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
ataucp
, 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 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,tee
akan menulis ke/dev/sr0
). cat
:Anda mungkin secara tidak sengaja menggabungkan dua file. Itu membuat data mudah diselamatkan.dd
:i
dano
dekat 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). Jikacp
dipanggil dengan beberapa opsi seperti-R
atau-a
yang 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,
dd
dengan ukuran buffer yang besar memiliki keunggulan, tetapi untuk salinan lintas disk,cat
memenangkandd
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 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
dd
agak "tingkat lebih rendah" daripada alat lain seperticat
dan mengakses perangkat secara langsung. Ini sepenuhnya salah:dd
dancat
dantee
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 menuliscat /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
danpv
) checksumnya identik . - Saya punya ide, setelah melakukan
dd
prosedur, buka drive dan tutup dengan disk yang sama, lalu selesaikan pengujian denganpv
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
tanpacount=X
parameter berhenti dengan benar di akhir disk dan memberikan citra disk yang sama denganpv
(checksum identik), jadi lebih baik saya menggunakandd
tanpa parameter atau hanyapv
.
Jadi, untuk saat ini, sepertinya pv
dan dd
dapat menyelesaikan penyalinan CD/DVD dengan hasil yang sama.