GNU/Linux >> Belajar Linux >  >> Linux

Apakah lebih baik menggunakan cat, dd, pv atau prosedur lain untuk menyalin CD/DVD?

Semua perintah berikut ini setara. Mereka membaca byte CD /dev/sr0 dan tulis ke file bernama image.iso .

cat /dev/sr0 >image.iso
cat </dev/sr0 >image.iso
tee </dev/sr0 >image.iso
dd </dev/sr0 >image.iso
dd if=/dev/cdrom of=image.iso
pv </dev/sr0 >image.iso
cp /dev/sr0 image.iso
tail -c +1 /dev/sr0 >image.iso

Mengapa Anda menggunakan salah satunya?

  • Kesederhanaan. Misalnya, jika Anda sudah mengetahui cat atau cp , Anda tidak perlu mempelajari perintah lain lagi.

  • Kekokohan. Yang ini sedikit varian dari kesederhanaan. Seberapa besar risiko mengubah perintah akan mengubah fungsinya? Mari kita lihat beberapa contoh:

    • Apa pun dengan pengalihan:Anda mungkin secara tidak sengaja melakukan pengalihan dengan cara yang salah, atau melupakannya. Karena tujuannya adalah file yang tidak ada, set -o noclobber harus memastikan bahwa Anda tidak menimpa apa pun; namun Anda mungkin menimpa perangkat jika Anda tidak sengaja menulis >/dev/sda (untuk CD yang read-only, tidak ada resiko tentunya). Ini mendukung cat /dev/sr0 >image.iso (sulit membuat kesalahan dengan cara yang merusak) daripada alternatif seperti tee </dev/sr0 >image.iso (jika Anda membalikkan pengalihan atau lupa masukan, tee akan menulis ke /dev/sr0 ).
    • cat :Anda mungkin secara tidak sengaja menggabungkan dua file. Itu membuat data mudah diselamatkan.
    • dd :i dan o dekat pada keyboard, dan agak tidak biasa. Tidak ada yang setara dengan noclobber , of= dengan senang hati akan menimpa apapun. Sintaks pengalihan lebih sedikit rawan kesalahan.
    • cp :jika Anda secara tidak sengaja menukar sumber dan target, perangkat akan ditimpa (sekali lagi, dengan asumsi perangkat non-baca saja). Jika cp dipanggil dengan beberapa opsi seperti -R atau -a yang ditambahkan beberapa orang melalui alias, itu akan menyalin node perangkat daripada konten perangkat.
  • Fungsionalitas tambahan. Satu alat di sini yang memiliki fungsi tambahan yang berguna adalah pv , dengan opsi pelaporannya yang andal.
    Namun di sini Anda dapat memeriksa berapa banyak yang telah disalin dengan melihat ukuran file keluaran.

  • Pertunjukan. Ini adalah proses terikat I/O; pengaruh utama dalam kinerja adalah ukuran buffer:alat membaca potongan dari sumber, menulis potongan ke tujuan, berulang. Jika potongannya terlalu kecil, komputer menghabiskan waktunya untuk beralih antar tugas. Jika potongan terlalu besar, operasi baca dan tulis tidak dapat diparalelkan. Ukuran potongan optimal pada PC biasanya sekitar beberapa megabyte tetapi ini jelas sangat tergantung pada OS, perangkat keras, dan apa lagi yang dilakukan komputer. Saya membuat tolok ukur untuk salinan hard disk ke hard disk beberapa waktu lalu, di Linux, yang menunjukkan bahwa untuk salinan dalam disk yang sama, dd dengan ukuran buffer yang besar memiliki keunggulan, tetapi untuk salinan lintas disk, cat memenangkan dd apa pun ukuran penyangga.

Ada beberapa alasan mengapa Anda menemukan dd begitu sering disebutkan. Selain kinerja, itu bukan alasan yang bagus.

  • Dalam sistem Unix yang sangat lama, beberapa alat pemroses teks tidak dapat menangani data biner (mereka menggunakan string yang diakhiri null secara internal, sehingga cenderung memiliki masalah dengan byte nol; beberapa alat juga berasumsi bahwa karakter hanya menggunakan 7 bit dan tidak memproses set karakter 8-bit dengan benar). Saya tidak yakin apakah ini pernah menjadi masalah dengan cat (dengan alat yang lebih berorientasi garis seperti head , sed , dll.), tetapi orang cenderung menghindarinya pada data biner karena hubungannya dengan pemrosesan teks. Ini bukan masalah pada sistem modern seperti Linux, OSX, *BSD, atau apa pun yang sesuai dengan POSIX.
  • Ada semacam mitos bahwa dd agak "tingkat lebih rendah" daripada alat lain seperti cat dan mengakses perangkat secara langsung. Ini sepenuhnya salah:dd dan cat dan tee dan yang lainnya semua membaca byte dari input mereka dan menulis byte ke output mereka. Keajaiban sebenarnya ada di /dev/sr0 .
  • dd memiliki sintaks baris perintah yang tidak biasa, jadi menjelaskan cara kerjanya memberi lebih banyak kesempatan untuk bersinar dengan menjelaskan sesuatu yang hanya menulis cat /dev/sr0 .
  • Menggunakan dd dengan ukuran penyangga yang besar dapat memiliki kinerja yang lebih baik, tetapi tidak selalu demikian (lihat beberapa tolok ukur di Linux).

Risiko besar dengan dd adalah bahwa dapat melewatkan beberapa data secara diam-diam . Saya pikir dd aman selama skip atau count tidak lulus tapi saya tidak yakin apakah ini terjadi di semua platform. Tapi itu tidak memiliki keunggulan kecuali kinerja.

Jadi gunakan saja pv jika Anda menginginkan laporan kemajuan yang menarik, atau cat jika tidak.


Alih-alih menggunakan alat umum seperti cat atau dd , orang harus memilih alat yang lebih andal dalam membaca kesalahan seperti

  • penyelamatan
  • readcd (yang memiliki mekanisme koreksi/coba ulang kesalahan untuk drive CD/DVD bawaan)

Selain itu, pengaturan default mereka lebih cocok daripada mis. dd ini.


Ada fakta menarik dalam kasus ini, khususnya yang berikut:

  • Saya baru saja memeriksa output yang saya dapatkan dan berikan (saya menggunakan disk lain kali ini, tepatnya, disk pengaturan Xubuntu 15.04 x64), dan dengan kedua prosedur (dd dan pv ) checksumnya identik .
  • Saya punya ide, setelah melakukan dd prosedur, buka drive dan tutup dengan disk yang sama, lalu selesaikan pengujian dengan pv prosedur. Melakukan hal itu, saya mendapatkan salinan identik dengan kedua prosedur.
  • Saya berpikir Saya mendapat checksum yang berbeda pertama kali, karena untuk beberapa alasan, data yang dikumpulkan dari drive CD/DVD tampaknya "direkam" ke tujuan lain untuk beberapa waktu (seperti cache) - dengan demikian, operasi lain seperti checksum dibuat jauh lebih cepat daripada transfer. Beri komentar jika Anda tahu penyebab pastinya.
  • Fakta lainnya adalah dd tanpa count=X parameter berhenti dengan benar di akhir disk dan memberikan citra disk yang sama dengan pv (checksum identik), jadi lebih baik saya menggunakan dd tanpa parameter atau hanya pv .

Jadi, untuk saat ini, sepertinya pv dan dd dapat menyelesaikan penyalinan CD/DVD dengan hasil yang sama.


Linux
  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Bagaimana cara menyandikan base64 /dev/random atau /dev/urandom?

  3. Bagaimana Anda menukar/dev/sda dengan/dev/sdb?

  1. DD dari /dev/zero ke /dev/null...apa yang sebenarnya terjadi

  2. Apakah salah menautkan /dev/random ke /dev/urandom di Linux?

  3. Mengapa < atau > diperlukan untuk menggunakan /dev/tcp

  1. Cara membuat kata sandi acak di linux menggunakan /dev/random

  2. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  3. Perbedaan antara /dev/sda dan /dev/sda1