Perintah dd Linux adalah salah satu utilitas paling kuat yang dapat digunakan dalam berbagai cara. Alat ini terutama digunakan untuk menyalin dan mengonversi data, oleh karena itu merupakan singkatan dari duplikator data. Alat ini dapat digunakan untuk:
- Mencadangkan dan memulihkan seluruh hard drive atau partisi.
- Membuat sistem file virtual dan mencadangkan gambar CD atau DVD yang disebut file ISO
- Salin wilayah file perangkat mentah seperti mencadangkan MBR (master boot record).
- Mengonversi format data seperti ASCII ke EBCDIC.
- Mengubah huruf kecil menjadi huruf besar dan sebaliknya.
Hanya superuser yang dapat menjalankan perintah ini. Anda harus sangat berhati-hati saat menggunakan perintah ini karena penggunaan yang tidak tepat dapat menyebabkan kehilangan data yang sangat besar. Jadi, beberapa orang menganggap alat ini sebagai penghancur data.
Sintaks perintah dd
Penggunaan dasar perintah dd agak mudah karena hanya membutuhkan dua argumen:jika =untuk menentukan file masukan dan dari =untuk menentukan file keluaran. Argumen untuk opsi tersebut dapat berupa file atau memblokir perangkat. Namun, saya tidak akan merekomendasikan menggunakan dd untuk menyalin file karena cp melakukannya dengan cara yang lebih sederhana. Namun, Anda dapat menggunakannya untuk mengkloning hard disk. Sintaksnya adalah
dd if=<source file name> of=<target file name> [Options]
Kita akan mempelajari berbagai opsi sambil mempelajari contoh perintah dd.
1. Mencadangkan dan memulihkan seluruh disk atau partisi
Dimungkinkan untuk menyimpan semua data dari seluruh disk/partisi ke disk/partisi lain. Bukan salinan sederhana seperti perintah cp tetapi salinan ukuran blok.
a. Cadangkan seluruh disk ke disk
Anda dapat menyalin semua data (seluruh disk) dari disk /dev/sda
ke /dev/sdb
. dd tidak tahu apa-apa tentang sistem file atau partisi; itu hanya akan menyalin semuanya dari /dev/sda
ke /dev/sdb
. Anda perlu menunjukkan ukuran blok yang akan disalin pada waktu dengan bs
pilihan. Jadi, ini akan mengkloning disk dengan data yang sama di partisi yang sama.
# dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync 97281+0 records in 97280+0 records out 99614720 bytes (100 MB) copied, 2.75838 s, 36.1 MB/s
Ini hanya berfungsi jika perangkat kedua sama besar atau lebih besar dari yang pertama. Jika tidak, Anda mendapatkan partisi yang terpotong dan tidak berharga di partisi kedua. Di sini, jika adalah singkatan dari file input , dari singkatan untuk file output dan bs adalah singkatan dari ukuran blok (jumlah byte yang akan dibaca/ditulis pada suatu waktu). Pastikan Anda menggunakan ukuran blok dalam kelipatan 1024 byte yang sama dengan 1KB. Jika Anda tidak menentukan ukuran blok, gunakan ukuran blok default 512 byte. conv
parameter nilai tidak ada kesalahan memungkinkan alat untuk terus menyalin data meskipun menemukan kesalahan. Opsi sinkronisasi memungkinkan untuk menggunakan I/O yang disinkronkan.
b. Membuat dd disk image (file image)
Anda dapat membuat gambar disk atau gambar file. Mencadangkan disk ke gambar akan lebih cepat daripada menyalin data yang tepat. Selain itu, citra disk membuat pemulihan menjadi lebih mudah.
# dd if=/dev/sda of=/tmp/sdadisk.img
Anda dapat menyimpan file output di tempat yang Anda inginkan tetapi Anda harus memberikan nama file yang diakhiri dengan .img
ekstensi seperti di atas. Alih-alih /tmp/sdadisk.img
, Anda dapat menyimpannya misalnya di /sdadisk.img
jika Anda mau.
c. Membuat gambar disk terkompresi
Karena dd membuat konten yang tepat dari seluruh disk, itu berarti terlalu banyak ukuran yang dibutuhkan. Anda dapat memutuskan untuk mengompresi gambar disk dengan perintah di bawah ini
# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
pipa | operator membuat output pada perintah kiri menjadi input pada perintah kanan. -c
opsi menulis output pada output standar dan menjaga file asli tidak berubah.
d. Cadangkan partisi atau klon satu partisi ke partisi lain
Alih-alih seluruh disk, Anda hanya dapat membuat cadangan partisi sederhana. Anda hanya perlu menunjukkan nama partisi di file input seperti di bawah ini
# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
Ini akan menyinkronkan partisi /dev/sda1
ke /dev/sdb1
. Anda harus memverifikasi bahwa ukuran /dev/sdb1
harus lebih besar dari /dev/sda1
. Atau Anda bisa membuat gambar partisi seperti di bawah ini
# dd if=/dev/sda1 of=/tmp/sda1.img
e. Memulihkan disk atau gambar partisi
Menyimpan disk atau partisi membantu memulihkan semua data, jika ada masalah dengan drive asli kami. Untuk memulihkan, Anda perlu membalik file input dengan file output yang ditunjukkan selama operasi pencadangan seperti di bawah ini.
# dd if=/tmp/sdadisk.img of=/dev/sda
Anda akan mengambil data yang ada sebelum operasi pencadangan dan bukan setelah operasi
e. Memulihkan gambar terkompresi
Anda harus terlebih dahulu menunjukkan file terkompresi dan file output yang merupakan disk yang dikompresi sebelumnya.
# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
Opsi -d di sini adalah untuk membuka kompres. Perhatikan file keluaran. Anda dapat memasang disk yang dipulihkan untuk melihat kontennya. Perhatikan bahwa Anda akan menambahkan data setelah operasi pencadangan kompresi terakhir.
2. Membuat sistem file virtual/Mencadangkan gambar CD atau DVD sebagai file iso
Anda mungkin perlu membuat sistem file virtual di Linux karena beberapa alasan seperti membuat mesin virtual di host Linux Anda. Anda juga perlu membuat gambar iso cadangan dari CD atau DVD
a. Membuat sistem file virtual
Sistem file virtual adalah sistem file yang ada dalam file, yang pada gilirannya ada di disk fisik. Anda dapat memerlukannya untuk membuat misalnya perangkat swap atau loop tambahan atau mesin virtual. Kami membutuhkan /dev/zero
yang merupakan file yang digunakan untuk membuat file tanpa data tetapi dengan ukuran yang diperlukan (file dengan semua nol). Dengan kata lain, ini akan membuat file data dengan semua nol dalam file yang akan memberikan ukuran file.
# dd if=/dev/zero of=/file bs=1024K count=500 500+0 records in 500+0 records out 524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s
Opsi count
mengacu pada jumlah blok input yang akan disalin. Dikombinasikan dengan nilai ukuran blok, ini menunjukkan ukuran total yang akan disalin. Misalnya bs=1024k
dan count=500
berikan ukuran=1024K*500 =524288000 byte =524MB
Sekarang mari kita periksa ukuran file kita
# ls -lh /file -rw-r--r-- 1 root root 500M May 17 18:57 /file
Anda dapat melihat bahwa kami telah membuat sistem file virtual kami dengan ukuran yang ditunjukkan. Anda sekarang dapat menggunakannya untuk membuat perangkat loop atau disk virtual atau apa pun.
b. Ubah 512 byte pertama file dengan data nol
Jika selama operasi Anda menunjukkan file output yang ada, Anda akan kehilangan datanya. Untuk beberapa alasan, Anda mungkin perlu mengganti ukuran blok file keluaran.
dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
notrunc
opsi mengacu pada jangan potong file, hanya ganti 512 byte pertama, jika ada. Jika tidak, Anda akan mendapatkan file 512 byte
c. Membuat gambar iso cadangan dari CD atau DVD
Anda mungkin bertanya-tanya mengapa tidak menyalin konten CD ke direktori saja. Bagaimana Anda menangani sektor boot CD? Anda tidak dapat menemukannya sebagai file di perangkat karena itu hanya sektor pertama. Karena dd menyalin sektor demi sektor, di sisi lain, informasi tersebut juga akan disalin.
# dd if=/dev/cdrom of=/mycd.iso
Anda perlu tahu bahwa Anda harus menggunakan -o loop
opsi, yang memungkinkan Anda memasang file seperti perangkat normal lainnya. Jadi, untuk memasang /mycd.iso
pada /mnt/cd
direktori, lakukan seperti di bawah ini
# mount -o loop /mycd.iso /mnt/cd
d) Buat Drive USB yang dapat di-boot
Mari kita asumsikan kita telah mengunduh gambar centos iso di sini ke direktori ini "~/Downloads/".
if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso - file input ada di jalur '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso'
of=/dev/sdb - file keluaran berada di jalur '/dev/sdb'
bs=1M - Baca dari '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso' dan tulis ke '/dev/sdb' 1 Megabyte data sekaligus.
# dd if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso of=/dev/sdb bs=1M
3. Mencadangkan dan memulihkan MBR
Bootloader GRUB paling sering disimpan di MBR drive yang dapat di-boot. MBR membentuk 512 byte pertama dari disk, memungkinkan penyimpanan hingga 466 byte untuk bootloader. Ruang tambahan akan digunakan untuk menyimpan tabel partisi untuk drive tersebut. Jika MBR rusak, kami tidak akan dapat melakukan booting ke Linux.
a. Mencadangkan MBR
Karena MBR merupakan 512 byte pertama dari disk, kita hanya perlu menyalin ukuran blok tersebut
# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
Dengan count=1
dan bs=512
, hanya 512 byte yang akan disalin yang sesuai dengan ukuran MBR kami.
Anda dapat menampilkan MBR yang disimpan dengan perintah od yang membuang file dalam oktal dan format lain seperti di bawah ini
# od -xa /tmp/sdambr.img 0000000 bf52 81f4 8b66 832d 087d 0f00 e284 8000 R ? t soh f vt - etx } bs nul si eot b nul nul 0000020 ff7c 7400 6646 1d8b 8b66 044d 3166 b0c0 | del nul t F f vt gs f vt M eot f 1 @ 0
-a
opsi memilih karakter bernama dan -x
memilih unit 2-byte heksadesimal
b. Mencadangkan data boot MBR tidak termasuk tabel partisi
Data MBR 512 byte terletak di sektor pertama hard disk. Ini terdiri dari bootstrap 446 byte, tabel partisi 64 byte dan tanda tangan 2 byte. Artinya, kita dapat mengecualikan tabel partisi dan tanda tangan byte saat mencadangkan MBR dengan hanya menghemat ukuran blok yang sama dengan ukuran bootstrap.
# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1
c. Memulihkan MBR dari gambar MBR
Anda dapat memulihkan MBR Anda seperti yang ditunjukkan pada perintah sebelumnya dengan
# dd if=/tmp/sdambr.img of=/dev/sda
3. Mengonversi format data
Jika file input menggunakan kumpulan karakter yang bukan kumpulan karakter asli dari komputer host, operator impor harus melakukan konversi. Misalnya, jika ASCII adalah format asli untuk string di komputer host Anda, tetapi file data input mewakili string menggunakan EBCDIC, Anda harus mengonversi EBCDIC ke ASCII dan sebaliknya.
a. Konversi format data file dari EBCDIC ke ASCII
Jika ada file ebcdic dengan Anda, sebagian besar diambil dari sistem mainframe, maka, Anda ingin mengonversinya ke ASCII untuk membuat modifikasi menggunakan editor teks di server UNIX
# dd if=textfile.ebcdic of=textfile.ascii conv=ascii
conv
parameter nilai sekarang adalah ascii karena kami mengonversi dari EBCDIC ke ASCII
b. Konversi format data file dari ASCII ke EBCDIC
Setelah memodifikasi versi ASCII dan setelah selesai, Anda dapat mengonversinya kembali ke EBCDIC untuk digunakan oleh aplikasi Anda.
# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic
conv
parameter nilai sekarang adalah e bcdic karena kita mengkonversi dari ASCII ke EBCDIC. Jika Anda hanya mengganti jumlah byte tertentu dengan jumlah byte yang setara yang memiliki karakter berbeda, konversi akan lancar dan aplikasi membaca file tidak akan mengalami masalah.
4. Mengonversi kasus file
Perintah DD juga dapat digunakan untuk hal yang luar biasa. Itu dapat mengonversi semua teks (abjad) dalam file ke huruf besar atau kecil dan sebaliknya. Untuk contoh di bawah ini, kami akan memiliki file untuk pengujian.
# cat file10 test dd convert
a. Mengonversi file menjadi huruf besar
Karena contoh file teks kita menggunakan huruf kecil, kita akan mengubahnya menjadi huruf besar
# dd if=~/file10 of=~/file20 conv=ucase
Perintah tersebut akan membuat file baru yang ditunjukkan. Lihat sekarang conv
opsi membutuhkan ucase nilai. Yuk cek hasilnya
# cat file20 TEST DD CONVERT
b. Mengonversi file menjadi huruf kecil
Sekarang kita akan melakukan operasi kebalikan yang akan diubah menjadi huruf kecil
# dd if=~/file20 of=~/file30 conv=lcase
Lihat bahwa kami menggunakan lcase dari conv
opsi untuk mengonversi dari huruf besar ke huruf kecil.
# cat file30 test dd convert
Perintah dd tidak mengonversi nama file, hanya isinya.
Kesimpulan
Perintah dd, meskipun secara teknis bukan perintah pengarsipan, dalam beberapa hal serupa karena dapat menyalin seluruh partisi atau disk ke dalam file dan sebaliknya.