Bagaimana arahan dd berfungsi di linux dengan contoh

Bagaimana arahan dd berfungsi di linux dengan contoh

DD adalah utiliti yang sangat kuat dan berguna yang terdapat pada sistem operasi Unix dan Unix seperti. Seperti yang dinyatakan dalam manualnya, tujuannya adalah untuk menukar dan menyalin fail. Pada sistem operasi Unix dan Unix seperti Linux, hampir semuanya dianggap sebagai fail, walaupun menghalang peranti: ini menjadikan DD berguna, antara perkara lain, untuk mengklon cakera atau lap data. The DD Utiliti boleh didapati di luar kotak walaupun dalam pemasangan yang paling minimum dari semua pengagihan. Dalam tutorial ini, kita akan melihat cara menggunakannya dan bagaimana kita dapat mengubah tingkah lakunya dengan menggunakan beberapa pilihan yang paling biasa digunakan untuk menjadikan pekerjaan pentadbiran sistem linux anda lebih mudah.

Dalam tutorial ini anda akan belajar:

  • Cara Menggunakan DD
  • Cara mengubah suai tingkah laku program dengan menggunakan beberapa pilihan yang paling biasa digunakan


Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran-bebas
Perisian Tiada perisian khas diperlukan untuk mengikuti tutorial ini kecuali DD
Yang lain Kebiasaan dengan antara muka dan pengalihan baris arahan
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Penggunaan asas

Sintaks asas DD sangat mudah. Secara lalai program dibaca dari input standard dan menulis kepada output standard. Walau bagaimanapun, kita boleh menentukan alternatif input dan pengeluaran fail dengan menggunakan masing -masing jika dan dari Pilihan baris arahan. Di sini DD berbeza dari sebahagian besar arahan shell, kerana tidak menggunakan standard --pilihan atau -o sintaks untuk pilihan.



Mari lihat contoh penggunaan DD. Salah satu kes penggunaan yang paling tipikal untuk utiliti adalah sandaran rekod boot induk: sektor pertama pada warisan Mbr sistem partition. Panjang sektor ini biasanya 512 bait: ia mengandungi tahap 1 grub bootloader dan jadual partisi cakera. Katakan kami mahu membuat sandaran Mbr cakera /dev /sda, yang perlu kita lakukan ialah menggunakan DD dengan sintaks berikut:

$ sudo dd if =/dev/sda bs = 512 count = 1 of = mbr.img

Mari analisis arahan di atas. Pertama sekali kita mengutamakan penyerahan DD sebenar dengan arahan sudo, untuk menjalankan perintah dengan keistimewaan pentadbiran. Ini diperlukan untuk mengakses /dev/sda Blok peranti. Kami kemudian memohon DD menyatakan sumber input dengan jika pilihan dan fail output dengan dari. Kami juga menggunakan BS dan hitung pilihan untuk menentukan masing -masing jumlah data yang harus dibaca pada satu masa, atau saiz blok, dan jumlah blok untuk dibaca. Dalam kes ini kita boleh meninggalkan BS pilihan, sejak 512 bait adalah saiz lalai yang digunakan oleh DD. Jika kita menjalankan arahan di atas, kita akan melihat bahawa ia menghasilkan output berikut:

1+0 rekod dalam 1+0 rekod keluar 512 bait disalin, 0.000657177 s, 779 kb/s

Output di atas menunjukkan kepada kami jumlah rekod yang dibaca dan ditulis, jumlah data yang disalin, jumlah masa di mana tugas itu selesai dan kelajuan pemindahan. Sekarang kita harus mempunyai klon Mbr sektor, disimpan di mbr.img fail. Jelas sekali akhiran fail tidak mempunyai makna sebenar pada Linux, jadi penggunaan ".IMG "Satu benar -benar sewenang -wenang: anda mungkin mahu menggunakan".DD "untuk membiarkan nama fail mencerminkan arahan yang digunakan untuk membuat fail.

Dalam contoh di atas kita menggunakan BS pilihan untuk menentukan kedua -dua jumlah bait yang harus dibaca dan ditulis pada satu masa. Untuk menentukan nilai berasingan untuk kedua -dua operasi, kita boleh menggunakan IBS dan obs Pilihan sebaliknya, yang ditetapkan, masing -masing, jumlah bait yang dibaca dan ditulis pada satu masa.

Melangkau blok semasa membaca dan menulis

Terdapat kes -kes di dalam kita mungkin mahu melangkau sejumlah saiz blok semasa membaca atau menulis ke fail. Dalam kes sedemikian kita harus menggunakan Langkau dan mencari Pilihan, masing -masing: mereka digunakan untuk melangkau blok data yang ditentukan, pada permulaan input dan pada permulaan output.

Contoh keadaan sedemikian adalah apabila kita ingin membuat sandaran/memulihkan data tersembunyi antara Mbr dan partition pertama pada cakera, yang biasanya bermula pada sektor 2048, atas sebab penjajaran. The 2047 sektor kawasan ini biasanya mengandungi, pada warisan Mbr Persediaan Partition, Tahap 1.5 dari grub bootloader. Bagaimana kita boleh mengarahkan DD untuk mengklon hanya kawasan ini, tanpa memasukkan Mbr? Yang perlu kita lakukan hanyalah menggunakan Langkau pilihan:

$ sudo dd if =/dev/sda of = hidden-data-selepas kiraan-mbr = 2047 skip = 1

Dalam kes ini kami mengarahkan DD untuk menyalin 2047 blok 512 bait dari cakera /dev /sda bermula dari yang kedua. Dalam keadaan yang bertentangan, apabila kita ingin memulihkan data klon dan tulisnya semula di zon cakera yang sama, kita mahu menggunakan pilihan Seek, yang melangkau bilangan blok yang ditentukan pada permulaan output:

$ sudo dd if = hidden-data-selepas-mbr of =/dev/sda Seek = 1

Dalam kes ini kami mengarahkan DD untuk menyalin data dari Hidden-Data-selepas-MBR dan menulisnya di /dev/sda Blok peranti bermula dari blok kedua.



Memampatkan data yang dibaca oleh DD

Seperti yang telah kita katakan sebelum ini, salah satu operasi yang paling biasa dilakukan dengan DD ialah kloning cakera. Perintah DD menghasilkan klon sempurna cakera, kerana ia salinan peranti blok byte oleh byte, jadi kloning cakera 160 gb, menghasilkan sandaran saiz yang sama. Semasa mengkloning cakera ke fail, kami boleh paip data yang dibaca oleh DD walaupun utiliti mampatan seperti gzip, untuk mengoptimumkan hasilnya dan mengurangkan saiz fail akhir. Katakanlah sebagai contoh, kami ingin membuat klon peranti blok keseluruhan /dev /sda, kami boleh menulis:

$ sudo dd if =/dev/sda bs = 1m | gzip -c -9> sda.DD.Gz

Dalam contoh di atas, kami mengarahkan DD untuk membaca dari peranti /dev /sda, dan kami juga menukar saiz blok menjadi 1m, yang dapat memberi kami prestasi yang lebih baik dalam situasi tersebut. Kami kemudian mengemas data, memproses selanjutnya dengan gzip program yang kami gunakan dengan -c (ringkasan untuk --to-stdout) dan -9 pilihan yang mengarahkan program untuk menggunakan mampatan maksimum yang tersedia. Akhirnya, kami mengalihkan output ke "SDA.DD.Fail gz ". Dengan cara, jika anda ingin mengetahui lebih lanjut mengenai pengalihan semula Anda boleh membaca artikel kami mengenai perkara ini.

Mengelap peranti blok

Satu lagi kes penggunaan DD, adalah penyapu peranti. Terdapat banyak situasi di mana kita mungkin perlu melakukan operasi sedemikian: kita mungkin mahu menjual cakera, dan pastikan kandungannya sebelumnya telah dipadamkan sepenuhnya untuk alasan privasi yang jelas, atau kita mungkin mahu menghapuskan data sebelum membuat penyulitan. Dalam kes pertama ia cukup untuk menimpa cakera dengan sifar:

$ sudo dd if =/dev/sifar bs = 1m of =/dev/sda

Perintah di atas mengarahkan DD untuk dibaca dari peranti /dev /Zero yang memberikan aksara null dan tuliskannya ke peranti sehingga ia diisi sepenuhnya.

Sebelum menubuhkan lapisan penyulitan pada sistem kami, kami mungkin ingin mengisi cakera dengan data rawak, untuk menjadikan sektor ITS yang akan mengandungi data yang tidak dapat dibezakan dari yang kosong dan elakkan kebocoran metadata. Dalam kes ini kita mahu membaca data dari /dev/rawak atau /dev/urandom peranti:

$ sudo dd if =/dev/urandom bs = 1m of =/dev/sda

Kedua -dua arahan akan memerlukan sejumlah besar masa untuk selesai, bergantung pada saiz dan jenis peranti blok yang dipersoalkan dan sumber data rawak yang digunakan, /dev/rawak lebih perlahan (ia menghalang sehingga ia tidak mengumpulkan bunyi alam sekitar yang cukup), tetapi mengembalikan data rawak yang lebih tinggi daripada /dev/urandom.



Menukar data

The Conv Pilihan DD digunakan untuk menggunakan penukaran data. Pilihan mesti disediakan dengan senarai simbol yang dipisahkan koma sebagai hujah. Di sini beberapa yang paling banyak digunakan:

  • Noerror - Ini menggunakan DD terus walaupun selepas ralat baca ditemui;
  • NOTRUNC - Pilihan ini mengarahkan DD untuk tidak memotong fail output;
  • Sync - Pilihan ini mempunyai rasa terutama apabila digunakan bersama dengan Noerror. Ia mengarahkan DD untuk pad setiap blok input dengan nuls.

Kes biasa di mana kita mungkin mahu menjalankan DD bersama -sama dengan Conv = Sync, Noerror pilihan, adalah semasa mengkloning cakera yang mengandungi sektor yang rosak. Dalam kes sedemikian Noerror pilihan akan membuat DD terus berjalan walaupun sektor itu tidak dapat dibaca dengan jayanya, dan SYNC pilihan akan dibuat supaya jumlah data gagal dibaca olehnya Nuls, supaya panjang data dipelihara walaupun data sebenar hilang (kerana tidak mungkin untuk membacanya).

Kesimpulan

Dalam tutorial ini, kami belajar menggunakan arahan DD yang sangat kuat. Kami melihat beberapa kes biasa program ini digunakan, seperti pengklonan cakera, dan kami belajar mengetahui sintaksnya dan pilihan yang lebih penting yang dapat kami gunakan untuk mengubah suai kelakuannya. Oleh kerana DD adalah utiliti yang sangat kuat, ia mesti digunakan dengan perhatian yang melampau: hanya dengan menukar sasaran input dan output, seseorang boleh, dalam beberapa situasi, memusnahkan data sepenuhnya pada cakera.

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Menguasai Gelung Skrip Bash
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Cara mengklon sistem linux
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Muat turun linux
  • Partition klon di linux
  • Gelung bersarang dalam skrip bash
  • Cara Dual Boot Kali Linux dan Windows 10