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
catataucp, 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 noclobberharus 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 mendukungcat /dev/sr0 >image.iso(sulit membuat kesalahan dengan cara yang merusak) daripada alternatif sepertitee </dev/sr0 >image.iso(jika Anda membalikkan pengalihan atau lupa masukan,teeakan menulis ke/dev/sr0). cat:Anda mungkin secara tidak sengaja menggabungkan dua file. Itu membuat data mudah diselamatkan.dd:idanodekat pada keyboard, dan agak tidak biasa. Tidak ada yang setara dengannoclobber,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). Jikacpdipanggil dengan beberapa opsi seperti-Ratau-ayang ditambahkan beberapa orang melalui alias, itu akan menyalin node perangkat daripada konten perangkat.
- Apa pun dengan pengalihan:Anda mungkin secara tidak sengaja melakukan pengalihan dengan cara yang salah, atau melupakannya. Karena tujuannya adalah file yang tidak ada,
-
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,
dddengan ukuran buffer yang besar memiliki keunggulan, tetapi untuk salinan lintas disk,catmemenangkanddapa 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 sepertihead,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
ddagak "tingkat lebih rendah" daripada alat lain seperticatdan mengakses perangkat secara langsung. Ini sepenuhnya salah:dddancatdanteedan yang lainnya semua membaca byte dari input mereka dan menulis byte ke output mereka. Keajaiban sebenarnya ada di/dev/sr0. ddmemiliki sintaks baris perintah yang tidak biasa, jadi menjelaskan cara kerjanya memberi lebih banyak kesempatan untuk bersinar dengan menjelaskan sesuatu yang hanya menuliscat /dev/sr0.- Menggunakan
dddengan 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 (
dddanpv) checksumnya identik . - Saya punya ide, setelah melakukan
ddprosedur, buka drive dan tutup dengan disk yang sama, lalu selesaikan pengujian denganpvprosedur. 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
ddtanpacount=Xparameter berhenti dengan benar di akhir disk dan memberikan citra disk yang sama denganpv(checksum identik), jadi lebih baik saya menggunakanddtanpa parameter atau hanyapv.
Jadi, untuk saat ini, sepertinya pv dan dd dapat menyelesaikan penyalinan CD/DVD dengan hasil yang sama.