Apakah ada alternatif untuk `dd`?

13

Alat apa lagi yang harus saya gunakan untuk membaca dan menulis file dengan pemotongan, mencari, dan melompati. Opsi baris perintah dd tampak tidak nyaman dan asing dan saya tidak suka memilih antara mode pencarian yang lambat, tetapi tepat ( bs=1) dan mode cepat, tetapi tidak fleksibel ( bs=4katau apa pun).

Apakah ada alat yang lebih modern untuk membaca 555 byte dari satu file (atau pipa atau soket atau dev) dari posisi 31337 dan menulisnya ke file lain di posisi 128205 (menggunakan blok 512 + 43), dengan atau tanpa pemotongan?

Vi.
sumber
2
Saya masih tidak melihat apa yang salah dengan itu dd. Anda selalu bisa meletakkan pembungkus skrip shell di sekitarnya jika Anda tidak menyukai antarmuka. ddada dalam standar POSIX , yang merupakan nilai tambah besar.
jw013
2
Hal salah utama adalah ketidakmampuan untuk mencari atau melewati blok fraksional. Hal salah kedua yang status=noxfertidak standar dan rusak dan yang saya butuhkan iflag=fullblock(hilangkan dalam beberapa skrip => data rusak).
Vi.
4
1. bs=1=> seluruh pipa lambat. Misalnya saya mungkin ingin membuang file video mulai dari beberapa frame yang tepat. 2. "Dibutuhkan beberapa aritmatika" => tidak terlalu cocok untuk oneliners dan perintah shell rutin.
Vi.
1
PSA: dd conv=seek_bytesakan seekbekerja dengan presisi byte.
i336_
1
@ i336_ Saya pikir itu hanya berarti bahwa pilihan paling aman bagi kita adalah menghindari menggunakan skrip shell dan menulis sebuah executable yang terhubung secara mandiri dan mandiri. Saya hanya mencari-cari alternatif karena dari waktu ke waktu saya mendengar tentang hal-hal gila yang mungkin secara langsung di bash, dan bertanya-tanya apakah akses file langsung mungkin salah satu dari hal-hal gila itu.
Trejkaz

Jawaban:

4

Ada alatnya ddrescue(hati-hati, ada juga dd_rescueyang merupakan program berbeda dengan fungsi yang hampir sama). Ini menggunakan sintaks yang lebih akrab dengan dasbor tunggal untuk dasbor pendek atau ganda untuk opsi panjang. Dari halaman manual:

   -i, --input-position=<bytes>
          starting position in input file [0]

   -K, --skip-size=<bytes>
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -o, --output-position=<bytes>
          starting position in output file [ipos]
Marco
sumber
1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Awal cerita yang buruk ...
Vi.
Saya baru saja mencoba dd_rescue. Itu melempar peringatan bahwa file (stdin) tidak dapat dicari, tetapi hasil. Anda bisa mencobanya. Namun, ddrescueterasa lebih berfitur lengkap dan dewasa.
Marco
1
@ Vi .: Jangan tembak pengirim pesan. ddrescuebenar, pipa tidak bisa dicari. Jika Anda ingin mulai membaca pada titik tertentu dalam file, Anda harus memberikan akses ke file yang dimaksud, bukan data yang disalurkan dari program lain. Berhati-hatilah juga bahwa menggunakan pipa bertarung melawan keinginan Anda untuk kecepatan tertinggi, karena satu-satunya cara untuk meniru pencarian dalam pipa adalah dengan membaca dan membuang bagian-bagian yang tidak ingin Anda proses. Mencari dalam file yang sebenarnya jauh lebih efisien.
Warren Young
Memang, karena alat ini dirancang untuk menyelamatkan data yang rusak, tidak ada kemampuan pipa. Ini agak memalukan ketika Anda ingin fleksibilitas mencari melalui file input tetapi hanya ingin menyalurkan hasilnya ke stdout. Namun, untuk tujuan yang dimaksudkan, itu bagus.
Lightness Races dengan Monica
2

dcfldd adalah alternatif dd lainnya. Itu tidak menjawab pertanyaan OP tentang input / output mencari fleksibilitas, tetapi mungkin bermanfaat bagi orang lain yang tiba di sini melalui pencarian google.

Ini didasarkan pada gnu dd, dengan fitur tambahan berikut:

  • Hashing on-the-fly - dcfldd dapat memotong data input saat sedang ditransfer, membantu memastikan integritas data.
  • Output status - dcfldd dapat memperbarui kemajuan pengguna dalam hal jumlah data yang ditransfer dan berapa lama waktu yang dibutuhkan untuk operasi.
  • Tisu disk fleksibel - dcfldd dapat digunakan untuk membersihkan disk dengan cepat dan dengan pola yang diketahui jika diinginkan.
  • Verifikasi gambar / penghapusan - dcfldd dapat memverifikasi bahwa drive target cocok dengan bit-for-bit dari file atau pola input yang ditentukan.
  • Berbagai keluaran - dcfldd dapat menampilkan ke banyak file atau disk secara bersamaan.
  • Split output - dcfldd dapat membagi output ke beberapa file dengan lebih banyak konfigurasi daripada perintah split.
  • Output dan log yang disalurkan - dcfldd dapat mengirim semua data log dan output ke perintah serta file secara asli.
Dan Pritts
sumber
2

Alternatif yang baik adalah pv. Tidak hanya secara otomatis menghitung ukuran blok paling efisien, pada dasarnya mempercepat, tetapi juga memberikan kemajuan, antara lain. Penggunaannya sederhana:

pv < /dev/sda > sda.img

Ia bermain dengan baik dengan kompresi juga. Cara cepat untuk membuat cadangan dan mengompres disk dalam satu gerakan adalah seperti ini:

pv < /dev/sdb | pigz -9 > disk.img.gz

Anda dapat mempelajari lebih lanjut di sini .

Polisi
sumber
Fitur utama yang diharapkan adalah mencari dalam file output dan input, yang pv (tampilan pipa) tidak menyediakan, karena tidak ada pencarian untuk pipa.
Vi.