Saya menggunakan perintah dd untuk membuat usb bootable dari file iso:
sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M
Setelah menekan enter, keluar sebentar dan beri saya:
915+0 records in 915+0 records out 959447040 bytes (959 MB) copied,
0.539375 s, 1.8 GB/s
Jadi itu seperti berjalan di latar belakang karena saya dapat melihat bahwa flash drive berfungsi. Akhirnya itu akan berhenti menyalin dan saya dapat menghapus drive dengan sukses tetapi pertanyaannya adalah mengapa tidak dd perintah menunggu untuk menyalin selesai. Mengapa ini berjalan di latar belakang. Dan bagaimana saya bisa membuatnya menunggu?
command-line
bash
Kir Ivlev
sumber
sumber
sync
?sync
mungkin menunggu.dd
juga memiliki beberapa opsi sinkronisasi, misalnyaconv=fsync
. Yang mengatakan, saya tidak pernah harus menggunakannya dengan/dev/sd*
drive sendiri. Jika Anda benar-benar menggunakan/dev/sdx
tebakan saya, berarti Anda memiliki file 959MB yang tidak berguna di/dev
(ramdisk) sekarang ...Jawaban:
Meskipun kepercayaan populer,
dd
adalah perintah yang sangat biasa, itu tidak lebih rendah daripadacat
ataucp
. Perintah Anda membaca dari cache disk dan menulis ke buffer disk seperti perintah lainnya.Untuk memastikan bahwa data sepenuhnya ditulis ke media fisik, Anda perlu menelepon
sync
. Perintahsync
mem-flush semua buffer output ke disk. Ketikasync
perintah kembali, data telah sepenuhnya ditulis.Sebagian besar waktu, Anda tidak perlu menelepon
sync
, karena melepas sistem file melakukan pekerjaan yang sama. Ketikaumount
perintah kembali, atau ketika Anda mendapatkan pesan konfirmasi setelah mengklik "Keluarkan", buffer telah ditulis ke disk. Di sini, Anda langsung menulis ke disk tanpa melalui sistem file yang terpasang, jadi Anda perlu secara otomatis menyiram buffer.Perhatikan bahwa alih-alih
dd
, Anda bisa menggunakantee
. Ini memiliki dua keuntungan: ada sedikit risiko pembalikan sumber dan tujuan karena kesalahan ketik, dan mungkin sedikit lebih cepat .sumber
sudo tee /dev/sdx >/dev/null
, jika tidak, proses penyalinan akan tetap sangat lambat karena data ditulis ke keluaran konsol.sync
perintah, tetapi mereka melakukan pekerjaan yang sama di bawah tenda.conv=fdatasync
,dd
perintah tidak menunggu untuk menyelesaikan sampai data ditulis ke disk, seperti yang diminta OP. Lebih jauh,sync
perintah menjadwalkan operasi sinkronisasi, tetapi segera kembali; tidak menunggu untuk kembali sampai setelah data ditulis ke disk.dd
tidak akan menunggu cache disiram tanpaconv=fdatasync
dll. tetapi di Linux non-kuno Anda salah tentangsync
tidak menunggu. Anda dapat melihat coreutilssync(8)
membuatsync(2)
syscall . Halamansync(2)
manual mengatakan "Sebelum versi 1.3.20 Linux tidak menunggu I / O selesai sebelum kembali." jadisync(8)
tidak akan kembali sampai disk mengakui penulisan (atau kesalahan dipicu).Coba ini:
The
conv=fdatasync
memberitahudd
untuk menggunakan opsi khusus untuk memastikan bahwa data yang bisa ditulis ke perangkat fisik.sumber