Apa perbedaan antara dd dan cat untuk menulis file gambar?

5

Saat menulis file gambar ke disk atau ke stik USB, instruksi biasanya digunakan dd, seperti ini:

dd if=myimage.img of=/dev/sdb

Bagaimana ini berbeda dari, katakan:

cat myimage.img > /dev/sdb

Saya menyadari bahwa ddada lebih banyak opsi, seperti count=..., tetapi jika tujuan dari latihan ini adalah untuk menulis seluruh file ke perangkat, apa keuntungan menggunakan dd?

Johannes Ernst
sumber

Jawaban:

4

Pertanyaan ini seperti "Saya punya satu alat yang bisa menggambar persegi panjang dan yang lain bisa menggambar belah ketupat; mana yang merupakan alat yang tepat untuk menggambar persegi?"

Setiap kotak adalah kasus khusus persegi panjang dan kasus khusus belah ketupat, sehingga salah satu dari dua alat dapat digunakan.

Hal yang sama dengan dddan cat. Yang pertama dapat melakukan konversi, lewati dan cari, sesuaikan ukuran buffer; tetapi dalam kasus sederhana itu hanya membaca satu file (atau memblokir perangkat) dan menulis data mentah ke yang lain. Yang terakhir dapat menggabungkan beberapa file menjadi satu aliran dengan beberapa modifikasi tekstual opsional, tetapi dalam kasus sederhana hanya ada satu file input yang kontennya di-stream (dengan dukungan shell) ke file output atau perangkat.

Kedua alat ini bermanfaat dan tidak ada yang bisa diabaikan untuk yang lain. Lingkup mereka hanya tumpang tindih pada case sederhana ini yang Anda tanyakan.


Setelah mengatakan bahwa saya pikir setidaknya ada dua masalah yang membuat ddpilihan yang lebih baik.

1. Blokir izin perangkat

Untuk menulis ke file atau perangkat catperlu outputnya dialihkan. Shell Anda melakukan pengalihan yaitu membuka file target. Saat mengalihkan ke /dev/sdbAnda mungkin akan menekan "izin ditolak" kecuali Anda login sebagai root . Menjalankan shell karena root berisiko dan harus dihindari.

Anda boleh mencoba

sudo cat myimage.img > /dev/sdb

dan gagal karena sudotidak mempengaruhi pengalihan output yang dilakukan oleh shell.

Di sisi lain ini sama sekali tidak bermasalah:

sudo dd if=myimage.img of=/dev/sdb

Sedikit petunjuk: jika Anda menemukan diri Anda dalam situasi di mana Anda harus mengarahkan output ke file dengan akses terbatas maka Anda dapat menggunakan trik ini:

some_command | sudo tee restricted_file > /dev/null

Itu membawa kita ke cara lain untuk melakukan pekerjaan itu. Perintah teemeneruskan inputnya ke beberapa file dan ke output standar. Dalam kasus sederhana ada satu file dan output standar dibuang:

sudo tee /dev/sdb < myimage.img > /dev/null

Dalam hal ini ada juga pengalihan input yang tidak terpengaruh oleh sudo.

2. Melangkah melampaui kasus sederhana

Bayangkan seorang tukang kayu yang membuat meja dapur. Sebagian besar tabel memiliki permukaan atas persegi panjang; yang berbentuk belah ketupat jauh lebih jarang. Ada meja dengan bagian atas yang harus dibuat. Kotak adalah belah ketupat, juga persegi panjang. Apakah tukang kayu akan menggunakan metode yang berlaku untuk meja berbentuk belah ketupat yang langka? atau ke meja persegi panjang umum? Kedua set metode harus bekerja dengan tabel persegi, namun ia membuat persegi panjang setiap hari kerja, sehingga tidak ada gunanya mengubah pendekatan.

Kembali ke catdan dd. Menurut pendapat saya (dan latihan saya) hampir tidak pernah ada kebutuhan untuk menggabungkan beberapa gambar untuk menulis semuanya untuk memblokir perangkat. Itu pasti akan menjadi pekerjaan cat. Alat ini dapat melakukan sesuatu yang lebih tetapi Anda tidak menginginkannya: opsi menargetkan file teks sehingga mereka dapat membatalkan data biner Anda saat digunakan dengan file gambar.

Sekarang, opsi yang disediakan oleh ddsering berguna bagi saya ketika saya membaca dari atau menulis ke perangkat:

  • conv=noerr - ketika sumbernya mungkin salah;
  • bs=… - buffer besar tidak akan menghabiskan HDD saya;
  • count=… - untuk membaca sebuah fragmen, seperti MBR;
  • conv=sparse - untuk mengurangi ukuran gambar dalam beberapa keadaan.

Masih ada lagi. Perintah ini:

kill -s USR1 $(pidof dd)

membuat ddstatistik I / O cetak ke kesalahan standar. Saya tidak berpikir Anda bisa melakukan ini cat.

Ini adalah alasan yang saya anggap ddsebagai alat alami untuk bekerja dengan gambar mentah. Saya melihat tidak ada gunanya mengubah alat cathanya karena tidak ada perbedaan dalam beberapa kasus khusus. Saya ingin memikirkan instruksi yang biasanya digunakan ddkarena penulisnya berpikir seperti saya. Ada beberapa keanggunan dalam kemampuan untuk secara sadar memilih alat yang tepat , terutama ketika ada lebih banyak yang tampaknya sama-sama cocok.


Pada akhirnya saya akui saya telah menggunakan pv myimage.img | sudo tee /dev/sdb > /dev/null. Saya meninggalkan alat kanan saya tetapi pvmemberi saya progress bar. Kecuali jika Anda perlu menggabungkan (atau memecahkan data biner Anda dengan alat teks) cattidak memberikan apa-apa.

Kamil Maciorowski
sumber