Perintah dd Linux: salin blok, periksa hasil, dan verifikasi perangkat
dd menyalin byte dari input ke output dengan ukuran blok, posisi, dan konversi yang dapat diatur. Gunakan if= untuk sumber dan of= untuk tujuan; tujuan yang salah dapat langsung tertimpa tanpa konfirmasi. Mulailah dengan file latihan kecil sebelum mempertimbangkan operasi perangkat.
Contoh menggunakan GNU Coreutils. Periksa dd --help, man dd, dan dukungan opsi pada distribusi Anda. Untuk contoh file biasa, buat direktori baru dengan mkdir -- dd-lab && cd -- dd-lab dan hentikan jika gagal. Gunakan nama baru di dalamnya; siapkan source.img sebagai file data uji milik Anda, bukan tautan atau perangkat. Contoh perangkat memerlukan pemeriksaan terpisah di bawah.
Apa itu dd?
Tanpa if= dan of=, dd membaca masukan standar dan menulis keluaran standar. Operandnya memakai nama=nilai tanpa spasi di sekitar tanda sama dengan. I/O berarti masukan/keluaran; blok di sini adalah kelompok byte yang dibaca atau ditulis, bukan otomatis sektor fisik perangkat. File output biasa umumnya dipotong sebelum ditulis, kecuali perilakunya diubah, misalnya dengan conv=notrunc.
Sintaks dasar
dd [OPERAND]...
Kutip seluruh operand yang berisi spasi, misalnya if="data sumber.img" atau of="data salinan.img". Nilai nama seperti of=-hasil.bin tetap bagian dari operand, bukan opsi berawalan tanda hubung. Periksa jalur dan direktori kerja: tanda kutip tidak membuktikan bahwa input/output benar. Jangan memakai file yang sama sebagai input dan output.
Penggunaan dasar dd
Menyalin satu file ke file lain
if berarti input file, sedangkan of berarti output file. Siapkan sumber uji dan pastikan copy.img belum ada. Perintah ini menyalin sampai akhir sumber dengan blok 4 MiB; ukuran akhir mengikuti panjang sumber, bukan harus kelipatan 4 MiB. Untuk salinan biasa cp lebih sederhana; dd berguna ketika perlu mengatur posisi, batas, atau konversi.
dd if=source.img of=copy.img bs=4M status=progress
Buat file berukuran tetap yang diisi nol
/dev/zero menghasilkan byte nol tanpa akhir, sehingga count membatasi pekerjaan. Pada GNU, 1M berarti 1.048.576 byte; 100 blok menghasilkan 104.857.600 byte. Perintah berikut benar-benar mengirim data nol ke output dan menimbulkan penulisan, berbeda dari memperpanjang file dengan truncate dan area sparse. Alokasi fisik akhirnya tetap bergantung pada sistem berkas, kompresi, dan deduplikasi; ukuran logis bukan jaminan penggunaan disk.
dd if=/dev/zero of=test.bin bs=1M count=100 status=progress
Buat citra disk
Bagian ini adalah contoh Linux untuk administrator yang sudah memastikan sumber. Nama /dev/sdb hanya contoh: cocokkan model, nomor seri, kapasitas dalam byte, dan seluruh partisi anak menggunakan pemeriksaan di bawah. Hentikan penulis dan lepas mount sistem berkas sumber sebelum pencitraan offline, atau gunakan snapshot yang konsisten dengan aplikasi. Snapshot biasa tidak otomatis menjamin konsistensi aplikasi. Simpan citra pada penyimpanan terpisah dari perangkat yang dibaca, pastikan direktori /backup benar-benar berada di tujuan yang dimaksud dan ruang kosong cukup untuk ukuran perangkat penuh. conv=excl menolak output yang sudah ada; fsync meminta sinkronisasi sebelum selesai.
sudo dd if=/dev/sdb of=/backup/disk-sdb.img bs=16M status=progress conv=excl,fsync
Memeriksa salinan dengan file kecil
Contoh lengkap berikut membuat tiga byte ABC dan menyalinnya dalam direktori latihan baru. Rangkaian berhenti bila penyiapan atau penyalinan gagal, sehingga pemeriksaan tidak menutupi kegagalan dd dengan membandingkan file lama. Ini hanya contoh file biasa; jangan mengganti namanya dengan jalur perangkat saat latihan.
printf '%s' 'ABC' > source.bin &&
dd if=source.bin of=copy.bin bs=1 status=none &&
{
cmp -s -- source.bin copy.bin
result=$?
printf '%s\n' "$result"
}
Keluaran 0 berarti cmp menemukan isi yang sama; 1 berarti berbeda, sedangkan status lebih besar menandakan kesalahan pemeriksaan. status=none menyembunyikan statistik transfer, tetapi pesan kesalahan tetap ditampilkan. Kecocokan byte tidak membuktikan bahwa citra berasal dari sistem berkas yang konsisten atau semua cache perangkat sudah persisten.
Operand utama
| Opsi | Tujuan |
|---|---|
if=FILE |
Pilih file atau perangkat input. |
of=FILE |
Pilih file atau perangkat output. |
bs=SIZE |
Atur ukuran blok input dan output. |
count=N |
Batasi jumlah blok input yang disalin. |
skip=N |
Lewati blok input sebelum membaca. |
seek=N |
Lewati blok output sebelum menulis. |
status=progress |
Secara berkala tampilkan kemajuan transfer. |
conv=noerror,sync |
Lanjutkan setelah kesalahan baca dan beri padding pada blok yang pendek. |
conv=fsync |
Sinkronkan data output dan metadata sebelum selesai. |
iflag=fullblock |
Kumpulkan bacaan pendek untuk mengisi blok input jika diperlukan. |
Ini terutama operand nama=nilai, bukan opsi panjang bergaya --nama. Pada GNU, akhiran M/MiB berbasis 1.024, sedangkan MB berbasis 1.000. bs mengatur ibs (ukuran blok input) dan obs (output); skip dan count mengikuti input, sementara seek mengikuti output. count membatasi bacaan: jika input berakhir lebih awal, hasilnya dapat lebih pendek. iflag=fullblock mengumpulkan bacaan pendek, tetapi tidak menciptakan data setelah akhir input.
Contoh praktis
Memeriksa perangkat sebelum memulihkan citra
Pemulihan menimpa tujuan, termasuk struktur partisi jika citranya mencakup seluruh disk. Periksa identitas, ukuran citra, kapasitas tujuan yang sekurang-kurangnya sama, dan seluruh partisi anak. Nama perangkat dapat berubah setelah penyambungan ulang. lsblk menampilkan perangkat dan partisinya; findmnt memeriksa mount yang terlihat dalam lingkungan saat ini. Jika alat pemeriksaan gagal atau informasi tidak jelas, hentikan pekerjaan. Daftar mount kosong bukan bukti perangkat tidak dipakai: periksa ruang tukar (swap), pengelola volume logis (LVM), susunan beberapa disk (RAID), enkripsi, dan pemakai lain. Jika tujuan aktif, hentikan pekerjaan dan gunakan lingkungan pemulihan yang sesuai. Baris tulis berikut sengaja menjadi komentar agar pemeriksaan tidak langsung diikuti penimpaan. Sesudah semua kondisi terpenuhi, sesuaikan jalur dengan perangkat yang benar-benar diverifikasi dan jalankan langkah tulis itu secara terpisah.
lsblk -b -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
findmnt
# Langkah tulis terpisah: hanya setelah verifikasi identitas, kapasitas,
# tidak sedang dipakai, dan cadangan selesai; ganti jalur contoh dahulu.
# sudo dd if=/backup/disk.img of=/dev/sdc bs=16M status=progress conv=fsync
Mengekstrak rentang dari citra
Dengan bs=1M, skip=100 melewati 104.857.600 byte dan count=20 menyalin paling banyak 20.971.520 byte. Siapkan disk.img uji sepanjang sedikitnya 120 MiB dan gunakan nama output baru. Bila sumber hanya 110 MiB, hasilnya paling banyak 10 MiB; status berhasil saja tidak membuktikan rentang penuh tersedia. GNU mendukung kontrol byte melalui iflag=skip_bytes,count_bytes pada versi yang menyediakannya; periksa bantuan versi terpasang sebelum memakainya.
dd if=disk.img of=segment.bin bs=1M skip=100 count=20 status=progress
Verifikasi hasil salinan
Sesudah penyalinan berhasil, sinkronkan output dan bandingkan hasil yang tepat. sha256sum mencetak nilai SHA-256 (sidik data 256 bit), tetapi tidak otomatis menyatakan kedua file sama: bandingkan kedua nilai heksadesimal dan ukurannya, atau gunakan cmp untuk perbandingan byte. Contoh memeriksa file source.img dan copy.img dari bagian awal, bukan seluruh perangkat tujuan yang mungkin lebih besar. Sumber harus tetap tidak berubah selama penyalinan dan pemeriksaan. Jika sinkronisasi gagal, rangkaian berikut berhenti sebelum mencetak hash; periksa pesan kesalahannya dan jangan menyatakan penyimpanan sudah selesai. Sinkronisasi yang berhasil tidak menguji ketahanan perangkat terhadap kehilangan daya.
sync -- copy.img &&
sha256sum -- source.img copy.img &&
stat -c '%s %n' -- source.img copy.img
Perbandingan dengan perintah lain
Referensi perintah Linux berdasarkan tugas (bahasa Inggris) membantu memilih alat untuk salinan biasa atau sinkronisasi ketika kontrol blok dd tidak diperlukan.
| Perintah atau metode | Peran utama | Cocok untuk |
|---|---|---|
dd |
Penyalinan dan konversi berbasis blok | Citra disk dan pekerjaan berdasarkan posisi byte |
cp |
Penyalinan file pada tingkat sistem file | File dan direktori biasa |
rsync |
Sinkronisasi bertahap dan jarak jauh | Cadangan berulang dan salinan jaringan |
GNU ddrescue |
Mencoba lagi dan memetakan pembacaan media yang rusak | Memulihkan sebanyak mungkin dari disk yang gagal |
Hal yang perlu diperhatikan
Pembalikan if dan of dapat merusak sumber
of adalah target penulisan. Periksa kembali arah, jalur terurai, identitas, kapasitas, dan pemakaian perangkat tepat sebelum eksekusi. dd tidak menyediakan urungkan; jika penulisan salah dimulai, hentikan untuk membatasi kerusakan dan jangan menganggap data yang tertimpa dapat dikembalikan. Cadangan harus sudah tersedia sebelum operasi.
Ukuran blok yang lebih besar tidak selalu lebih baik
Ukuran yang sesuai bergantung pada perangkat dan beban kerja. Blok sangat besar meningkatkan kebutuhan memori dan membuat penanganan kesalahan lebih kasar; angka laju transfer dari satu contoh bukan patokan kinerja. status=progress melaporkan byte, waktu, dan laju ke keluaran kesalahan standar, bukan persentase keseluruhan yang selalu diketahui; pekerjaan singkat mungkin selesai sebelum pembaruan berkala.
Gunakan alat khusus pemulihan untuk media yang gagal
conv=noerror melanjutkan setelah kesalahan baca; conv=sync menambahkan byte nol pada blok input pendek, bukan menyinkronkan disk. Data nol pengganti bukan data asli yang berhasil dipulihkan. conv=fsync memiliki tujuan berbeda: meminta sinkronisasi data dan metadata output. Untuk media bermasalah, manual resmi GNU ddrescue menjelaskan mapfile, yaitu catatan rentang yang sudah dan belum diselamatkan, untuk melanjutkan upaya tanpa mengulang semuanya. Manpage GNU ddrescue yang disertakan paket Debian juga memuat aturan bahwa kelanjutan penyelamatan memerlukan mapfile. Simpan catatan itu pada media sehat dan jangan mencoba memperbaiki sistem berkas asli yang sedang gagal sebelum data penting diselamatkan.
FAQ
Apa arti if dan of?
if adalah input untuk dibaca; of adalah output yang ditulis. File output yang ada dapat dipotong atau tertimpa.
Bagaimana cara menampilkan progres?
Pada GNU dd, tambahkan status=progress. Statistik muncul pada keluaran kesalahan standar; kemunculannya bukan bukti penyalinan telah selesai atau terverifikasi.
Apakah sebuah citra seluruh disk harus ditulis ke jalur partisi?
Citra seluruh disk umumnya mencakup tabel partisi dan ditulis ke seluruh perangkat. Citra partisi memiliki cakupan berbeda. Ikuti petunjuk format dari penyedia citra dan periksa target, kapasitas serta status pemakaiannya.
Dapatkah dd memulihkan disk dengan kesalahan baca?
Sebagian data mungkin terbaca, tetapi opsi noerror/sync tidak menyediakan strategi pemulihan lengkap. GNU ddrescue dengan mapfile lebih sesuai untuk menyimpan kemajuan dan melanjutkan upaya; keberhasilan penyelamatan tetap tidak dijamin.




