dd giriş cihazının sonunu geçiyor

Aug 18 2020

ddTamir ettiğim bir sabit diski klonlamak için kullanmaya çalışıyorum . ddKopyalama verisini sürücüden 10GB'lık parçalar halinde yapmaya çalışıyorum , ancak sürücünün içermesi gerekenden daha fazla veri aktarıyor. Sürücünün kendisi çalışır ve üzerindeki bölme monte edilebilir.

Kullanarak df -hsürücünün boyutunu 1000204886016 bayt (1TB sürücü) olarak aldım.

Başlangıçta denedim:

sudo dd if=/dev/sdb of=/dev/sdd status=progress

Ancak bu, yaklaşık 300 GB sonra yavaşladı ve sonunda bir okuma hatası nedeniyle başarısız oldu. 10GB'lık parçalar halinde kopyalamaya karar verdim. 128kByte blok boyutuyla 10GB okumanın 78125 bloğun kopyalanmasını gerektirdiğini hesapladım.

Bunu yapmak için kullanıyorum:

sudo dd if=/dev/sdb of=/dev/sdd bs=128k count=78125 status=progress oflag=seek_bytes seek=n

ddher seferinde 10240000000 bayt aktarıldığını bildiriyordu. Her yineleme için arama değerini hesaplamak için, aktarılan baytları topladım ve bir miktar çakışma olduğundan emin olmak için 1 GB çıkardım. Ortaya çıkan sıra:

seek=0
seek=9240000000
seek=18480000000
seek=27720000000
seek=36960000000
...
seek=1071840000000

Bunları ayrı dd komutlarıyla bir kabuk betiğine yazdım ve çalıştırdım. Son yinelemeyi, gerektiği kadar veri kopyalamak için serbest bıraktım.

sudo dd if=/dev/sdb of=/dev/sdd bs=128k count=78125 status=progress oflag=seek_bytes seek=0
sudo dd if=/dev/sdb of=/dev/sdd bs=128k count=78125 status=progress oflag=seek_bytes seek=9240000000
sudo dd if=/dev/sdb of=/dev/sdd bs=128k count=78125 status=progress oflag=seek_bytes seek=18480000000
sudo dd if=/dev/sdb of=/dev/sdd bs=128k count=78125 status=progress oflag=seek_bytes seek=27720000000
sudo dd if=/dev/sdb of=/dev/sdd bs=128k count=78125 status=progress oflag=seek_bytes seek=36960000000
    ...
sudo dd if=/dev/sdb of=/dev/sdd bs=128k status=progress oflag=seek_bytes seek=1071840000000

Son yinelemeye kadar sürücünün sonunu geçmesi gerekirdi, ancak devam etti. Klon bağlanır, ancak açıkça bozuktur ve veriler eksiktir.

  1. Matematiğimde veya kullandığım argümanlarda bir sorun mu var dd?
  2. Verileri 10 GB'lık parçalar halinde almak için bir 'dd' komutu yazmamın daha iyi bir yolu var mı?

Yanıtlar

3 thatotherguy Aug 18 2020 at 02:31

Sorun, seekgerçekte bir blok sayısı aldığında, bir bayt değeri aldığını varsaymanızdır . Sen kullanarak olmalıdır seek=0, 78125, 156250vb

Ancak, şunlardan kurtularak bunu oldukça basitleştirebilirsiniz dd:

split -b 10G < /dev/sdd
3 roaima Aug 18 2020 at 06:36

Tamir ettiğim bir sabit diski klonlamak için dd kullanmaya çalışıyorum

Yapma.

ddrescueBunun yerine, okunamayan bloklarla ve diğer medya hatalarıyla iyi başa çıkabilen kullanın .

2 alphasierra Aug 21 2020 at 03:06

Çözümümün başarısız olmasının nedeninin arama bayrağının ne yaptığını yanlış anlamak olduğunu keşfettim. Yalnızca çıkış sürücüsündeki yazma konumunu değiştiriyordu. Yani komut dosyası çıktıya ilk 10GB’ı defalarca kopyalıyordu. Cihazın sonuna asla ulaşmaz.

Girişi kaydırmak için atlama bayrağının da kullanılması gerekir:

sudo dd if=/dev/sdb of=/dev/sdd bs=128k count=78125 status=progress skip=n seek=n

Ayarlama oflag=seek_bytesve iflag=skip_bytesmatematiğin blokların aksine bayt cinsinden yapılmasına izin verir.

Ancak roaima ( ddrescue kullanın) ve diğer adam ( split -b 10G < /dev/sdd) tarafından sunulan seçenekler , hasarlı sürücüleri kurtarmak ve sırasıyla bölümlere ayrılmış transferler gerçekleştirmek için daha iyi bir yoldur.