Secara sengaja mengurangi kecepatan ddrescue

1

(poster pertama kali) Saya ingin memperlambat seberapa cepat ddrescue menyalin data. Saya sedang menggambar hard drive dari laptop linux saya ke desktop windows saya. ddrescue dapat berjalan lebih cepat dari yang dapat diunduh oleh komputer saya, jadi itu mencekik internet komputer saya. Saya membayangkan hal-hal seperti ini sesekali, dan ingin tahu apakah ada cara untuk menekan ddrescue sedikit, baik dari desktop Windows, atau laptop linux. (Windows 10, Parted Magic)

Terima kasih atas bantuan Anda?

McKittrick Swindle
sumber
mungkin menjawab ini Bagaimana cara Throttle per proses I / O ke batas maksimal? adalah apa yang dapat Anda gunakan.
MolbOrg

Jawaban:

0

Saya tidak punya solusi sederhana untuk itu ddrescue.
EDIT: Saya punya solusi yang tidak begitu sederhana sekarang.

Mempersiapkan file target

Anda perlu mengetahui ukuran hard drive sumber dalam unit 512-byte. Simpan dalam variabel.

SIZE=$(sudo blockdev --getsz /dev/sdX)

File target harus memiliki ukuran yang sesuai sebelumnya.

fallocate -l $((512*$SIZE)) /mnt/samba/share/target.dd

Mempersiapkan perangkat tertunda

Pertama, Anda membutuhkan perangkat loop.

sudo losetup -f /mnt/samba/share/target.dd
sudo losetup -a

Perintah kedua memberi tahu Anda perangkat loop mana yang terkait target.dd. Di sini saya menganggap itu /dev/loop0.

Kemudian Anda membuat perangkat dengan perangkat mapper.

echo "0 $SIZE delay /dev/loop0 0 0 /dev/loop0 0 500" | sudo dmsetup create delayed_target

Nomor 500 dalam contoh ini menyatakan bahwa setiap operasi penulisan aktif /dev/mapper/delayed_target akan ditunda hingga 500 ms. (Lihat man dmsetup dan dokumen ini untuk detail.)

Membaca yang sebenarnya

sudo ddrescue --force -D -c 2048 /dev/sdX /dev/mapper/delayed_target logfile.log

Tombol -c 2048 memberitahu ddrescue untuk memproses 2048 * 512 byte pada satu waktu, itu satu megabyte. Karena -D program menghilangkan caching dll. yang akan mengumpulkan banyak operasi tulis menjadi satu. Dengan -D setiap megabyte membentuk operasi tulis terpisah yang mencapai keterlambatan 500 ms.

Tweaking

Satu perubahan adalah untuk mengubah -c 2048 di ddrescue doa. Lain - untuk mengubah penundaan dalam dmsetup (Lihat Pembersihan bagian).

Kamu selalu bisa berhenti ddrescue dengan Ctrl + C , atur penundaan jika perlu, jalankan kembali ddrescue dengan logfile yang sama dan mungkin yang lain -c parameter - dan itu akan berlanjut. Eksperimen untuk menemukan nilai yang sesuai dengan kebutuhan Anda.

Pembersihan

sudo dmsetup remove delayed_target

(Untuk mengubah penundaan, kembali ke dmsetup create sekarang.)

sudo losetup -d /dev/loop0

Catatan

Alih-alih menunda menulis ke file target Anda dapat menunda membaca dari perangkat sumber. Tampaknya menjadi cara yang lebih baik karena tidak perlu perangkat loop. Namun, pengujian saya menunjukkan bahwa ada pembacaan langsung dari perangkat mapper yang baru dibuat. Bacaan ini memukul penundaan berkali-kali dan memblokir dmsetup diri. Semua interpretasi saya mungkin salah, masih ada penundaan signifikan setelahnya dmsetup create. Itu membuat tweaker (jika tidak semua prosedur) hampir mustahil.


Jawaban asli saya:

Dari pengalaman saya ddrescue secara signifikan lebih baik daripada dd hanya jika ada kesalahan baca. Jika disk Anda umumnya dalam kondisi baik dan Anda mengharapkan kesalahan baca jarang terjadi, Anda dapat menggunakannya dd dengan pv.

Contoh:

dd if=/dev/sdb conv=sync,noerror bs=32M 2>dd.log | pv -L 4M > /mnt/samba/desktop/my-image.dd

Itu noerror parameter untuk dd membuatnya berlanjut setelah kesalahan baca terjadi, jika ada; sync penyebab dd untuk menghasilkan nol dalam kasus itu, sehingga data yang baik kemudian ditempatkan dengan offset yang tepat dalam file gambar. Saya lebih suka besar bs untuk kinerja hdd. Perhatikan bahwa dengan besar bs satu kesalahan baca dapat menyebabkan sebanyak 32MiB nol yang salah pada gambar, jadi Anda mungkin perlu:

  • baik secara manual bermain dengan kalkulator saku dan dd ini bs, skip, seek dan conv=notrunc opsi untuk melakukan apa ddrescue tidak secara otomatis: membaca dan menyimpan sebanyak mungkin, mudah-mudahan mengurangi nol yang salah menjadi 512B atau 4096B per kesalahan baca (angka-angka ini adalah ukuran sektor umum untuk disk).
  • atau secara manual bermain dengan kalkulator saku dan buat file log untuk ddrescue, lalu lari ddrescue hanya membaca ulang fragmen sumber yang bermasalah; mengacu pada info ddrescue pada struktur file log.

Dalam kedua kasus yang disimpan stderr dari dd akan berguna untuk mencari sektor yang bermasalah, karenanya 2>dd.log pengalihan.

Untung dengan pv adalah kemampuannya untuk mengubah batas kecepatan dengan cepat (ganti PID dengan yang sebenarnya pid dari aslinya pv digunakan dengan dd ):

pv -L 6M -R PID

Dengan cara ini Anda dapat menyesuaikan batas tanpa memulai dari awal.

Kamil Maciorowski
sumber