dd がクラッシュする - 対処方法

dd がクラッシュする - 対処方法

dd数時間実行した後にクラッシュします。通常は次のようなメッセージが表示されます

Input/output error
68424+1 records in
68424+1 records out
342124883968 bytes (342 GB) copied, 5114.68 s, 66.9 MB/s

これについて何かできることはありますか? 出力を使用できる方法はありますか? または、中断したところから再開できますか?

バックアップ対象のパーティションが使用中であると考えられる理由はありますか?

パーティションの使用頻度が低いはずなのに、70~80% あたりでクラッシュすることがよくあります。

このプロセスには非常に長い時間がかかるため、さまざまなことを試すのは困難です。

イメージに出力します。パーティションを使用することもできますが、LVM が関係します。

sudo lvmdiskscan
/dev/centos/swap [       3.89 GiB] 
/dev/sda1        [     500.00 MiB] 
/dev/centos/root [      50.00 GiB] 
/dev/sda2        [     465.27 GiB] LVM physical volume
/dev/centos/home [     411.38 GiB] 
/dev/sdb1        [     931.51 GiB] 
3 disks
2 partitions
0 LVM physical volume whole disks
1 LVM physical volume


dd conv=sync,noerror if=/dev/centos/home bs=2000000   of=/run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image
dd: error reading '/dev/centos/home': Input/output error
171062+1 records in
171063+0 records out
342126000000 bytes (342 GB) copied, 4625.3 s, 74.0 MB/s
220856+2 records in
220858+0 records out
441716000000 bytes (442 GB) copied, 6138.1 s, 72.0 MB/s

金曜日の朝 ddrescue --sector-size=2048 --cluster-size=$((256*512)) --sparse --verbose /dev/centos/home /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.map

GNU ddrescue 1.18.1 About to copy 441714 MBytes from /dev/centos/home to /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image Starting positions: infile = 0 B, outfile = 0 B Copy block size: 131072 sectors Initial skip size: 32 sectors Sector size: 2048 Bytes

Press Ctrl-C to interrupt rescued: 441714 MB, errsize: 8192 B, current rate: 0 B/s ipos: 342124 MB, errors: 1, average rate: 60675 kB/s opos: 342124 MB, run time: 2.02 h, successful read: 9 s ago Finished

しかし extundelete sd7c_dd.image --restore-directory /home/ob/p -o /tmp/tt extundelete: Bad magic number in super-block when trying to open filesystem sd7c_dd.image

/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,noquota) 

答え1

マウントされたファイル システムでは絶対に実行しないでくださいdd。特にバックアップを行う場合は、イメージが破損する可能性があります。tar代わりに を使用することをお勧めします。

デバイスがないseek失敗した場合は、 (出力ファイルで N ブロックをシークする) フラグと(入力の N ブロックをスキップする) フラグを使用できますskip=N。Linux システムでは、dmesgコマンドを使用して現在のカーネル ログを取得できます。

コピー元のデバイスが故障しているかどうか不明な場合は、 を使用してddrescueデバイスのイメージを取得することをお勧めします。このツールは読み取りエラーが発生しても中断せず、正しく読み取れなかったブロックの位置を記録します。

答え2

使用中のパーティションをイメージ コピーしようとすると、非常に悪い結果を招くことになります。このようなパーティションをコピーするには、そこに何も書き込まれていないことが必要です。まったく。

パーティションを静止できる場合は、ディスクと不良セクターのあるパーティションを読み取るように設計された を使用できます。イメージ ファイルをddrescue抽出するための一般的な呼び出しは次のようになります。/dev/sda1/media/sda1.img

ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/sda1 /media/sda1.img /media/sda1.map

セクターとクラスターのサイズはddrescue64MB 単位の読み取り用に設定されています。これを 128MB または 256MB に増やすことも考えられますが、これによって必ずしもスループットが向上するわけではないことに注意してください。

あなたの特定のケースでは、ソース パーティションは実際には LVM ボリュームなので、これは非常に役立ちます。パーティションのスナップショットを取得してバックアップすることができます。この例では、 と呼んでいますhome-snap

lvcreate --snapshot --name home-snap --size 1G /dev/centos/home
ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/centos/home-snap /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.map
lvremove -y /dev/centos/home-snap

答え3

デバイスがコピーした 342 GB より大きい場合、このディスクに不良セクタがある可能性が高くなります。

再開するには、seekと を同じ値で使用できます。skip

dd <your previous options here ...> seek=68424 skip=68424 conv=notrunc

68424おそらく同じ I/O エラーが再び発生するだけなので、値を大きくする必要があります。使用したブロック サイズを指定していません (計算するのが面倒です)。小さなエラー領域をスキップするには、ブロック サイズを小さくした方がよい場合があります (その場合は、それに応じて調整する必要がありますseek) skip

使用しないでくださいconv=noerrorそれは物事を腐敗させるさらに多くのエラーが発生する場合は、 を使用してください。ddrescueこれは、 よりも読み取りエラーを適切に処理するツールですdd

関連情報