gddrescueを使用してデバイスを複数のイメージファイルに複製する

gddrescueを使用してデバイスを複数のイメージファイルに複製する

誤ってすべての内容を削除したため、ddrescueを使用して1TB外付けドライブからデータを回復しようとしています。実際、私はここに掲載されたのと同じ状況に直面しなければなりませんでした。ddrescueディスクイメージを分割して再利用するには?しかしその点では質問、最初の部分はこれが私の質問のすべてです。まだ答えがありません。フォーラムを読んでいる間、私の状況と他のガイドだけが見つかりました。つまり、同じ場所に復元し、最初のドライブとまったく同じ記憶容量を持つ別のドライブに復元し、複数のパーティションを最初のドライブよりも大きな容量に復元します。

だから私の質問は、1TBの外付けHDDからデータを救出する必要があるということです。そのために、約935GB(GiBではない)の空き容量がある外付けHDDがあり、私のラップトップのWindowsパーティション(現在空白)には約222GBの空き容量があります。私は次のことをしました:ddrescueを起動しました

/# ddrescue -n -s900GB /dev/sdc /media/misi/Maxtor/recovery/recovery_part1.img /home/misi/recovery_log.txt

最初の900 GBのみ外付けドライブに保存してください。すべてがうまく行われ、次のような結果が出ました。

GNU ddrescue 1.17
Press Ctrl-C to interrupt
rescued:   900000 MB,  errsize:       0 B,  current rate:   64104 kB/s
   ipos:   899999 MB,   errors:       0,    average rate:   38981 kB/s
   opos:   899999 MB,    time since last successful read:       0 s
Finished

次に、残りの部分をWindowsパーティションに保存します。

/# ddrescue -n /dev/sdc /windows/recovery_part2.img /home/misi/recovery_log.txt

しかし、うまくいきません。

GNU ddrescue 1.17
Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:   900000 MB,  errsize:       0 B,  errors:       0
Current status
rescued:   900000 MB,  errsize:       0 B,  current rate:        0 B/s
   ipos:   900000 MB,   errors:       0,    average rate:        0 B/s
   opos:   900000 MB,    time since last successful read:       3 s
Copying non-tried blocks...
ddrescue: write error: Invalid argument

ただし、上記の質問とその他のガイドとマニュアルページに従う必要があります。引き続き別の外付けハードドライブにファイルを保存でき、Windowsパーティションの分割プロセス全体を再開することもできました。 Windowsパーティションに問題があるかどうかをテストしたかったので、両方のプロセスを中断しました。また、別のログファイルを使用し、最初のログファイルで検索する開始位置を手動で指定してみました(前述のように、数秒間続行してから少し変更されました)。

/# ddrescue -n -i900862115840 -o900862115840 /dev/sdc /windows/recovery_part2.img /home/misi/recovery_log_2.txt

Invalid argument前述のものと同じエラーメッセージを受け取りました。私が何を間違っているのでしょうか?データの最大部分を別の外部ドライブに保存し、残りの部分を私のWindowsパーティションに保存する正しいパターンは何ですか?事前にお答えいただきありがとうございます!

ベストアンサー1

私はddrescueそれがこのように動作するように設計されたことがないと思います。あなたが間違ったことを分析することは意味がありません。なぜなら、正しい方法は実際にあるからです。この回答あなたが述べた質問に。特にUnixの「すべてはファイルだ」という概念に慣れていない人にとっては、この文脈でこの単語の使用が明確ではないかもしれないことを認めます。

回答では、2つのファイルを1つの仮想デバイス(特殊ファイル)aに接続する方法について説明します。b/dev/mapper/merge

2つのファイルを作成ab実行方法を見る)利用可能な2つのファイルシステムに含まれているため、結合されたサイズが/dev/sdc

リンクされた回答の次のスニペットを適用します(正しいパスab)。

losetup /dev/loop1 a
losetup /dev/loop2 b
s() { blockdev --getsize "$1"; }
dmsetup create merge << EOF
0 $(s /dev/loop1) linear /dev/loop1 0
$(s /dev/loop1) $(s /dev/loop2) linear /dev/loop2 0
EOF

その後、通話中に/dev/mapper/merge代わりに使用します。recovery_part1.imgddrescue

の内容は/dev/mapper/merge基本的にの出力と同じですcat /your/path/to/a /your/different/path/to/bが、merge書き込みおよび検索が可能です。

注:/dev/mapper/merge再起動後も保持されませんが、ファイルはaもちろんb/dev/mapper/merge再起動後に使用するには、上記のコードを使用して再生成するだけです。

おすすめ記事