ddrescueを使用してファイルを回復し、塗りつぶしモードで破損したファイルを検出します。

ddrescueを使用してファイルを回復し、塗りつぶしモードで破損したファイルを検出します。

내 목표는 파티션을 파일로 구출한 다음(전체 디스크 복사나 부팅 가능한 드라이브 생성이 필요 없음) 해당 이미지를 마운트하고 파일 시스템의 폴더를 3배 더 큰 새 드라이브로 이동하는 것입니다. 하지만 어떤 특정 파일이 손상되었는지도 알고 싶습니다.

원본 및 대상 드라이브가 모두 연결된 Synology DSM에서 명령을 실행할 수 있기를 원합니다(ext4 비-raid 기본 볼륨 모두). 네트워크를 통해 사용할 수 있도록 DSM용 ddrutility 패키지를 찾을 수 없습니다(Parted Magic에서 시작하여 SMB 네트워크를 통해 이미지 및 맵 파일에 액세스). 또는 채우기 모드 ddrescue를 사용하여 이러한 항목을 가리키는 방법을 알아내야 합니다. 파일.

나의 구조 활동 방향:

  • synocommunity 패키지 설치SynoCli 디스크 유틸리티
  • USB를 통해 손상된 하드 드라이브를 Synology DS216+II에 연결
  • 외부 드라이브(USB 꺼내기)로 표시되면 웹 UI를 통해 즉시 마운트 해제하세요.
  • 다음 명령을 실행하여 장치(예: sda) 및 파티션(예: sda1) 이름과 물리적 섹터 크기를 가져옵니다.fdisk -l
  • 명령으로 나열된 설치에 없는지 확인하십시오.mount
  • 의심스러운 부분을 건너뛰고 처음으로 ddrescue를 실행합니다.

ddrescue -f -n /dev/sda1 /volume2/rescue/sda1_rescue.img

  • 두 번째 패스를 실행하고 3번 재시도한 후 디스크에 직접 액세스합니다.

ddrescue -d -f -r3 /dev/sda1 /volume2/rescue/sda1_rescue.img /volume2/rescue/rescue.log

  • 어떻게든 이미지 내에서 어떤 파일이 손상되었는지 알아보세요(불량 블록이 있는 경우).
  • 이미지를 마운트합니다.

sudo mkdir /mnt/newfolder

mount /volume2/rescue/sda1_rescue.img /mnt/newfolder -o loop,ro

  • cp또는 rsync내부에서 /mnt/newfolder모든 것/volume2/salvaged folder

질문:

손상된 디스크를 연결하기 위해 SATA/USB3.0 어댑터를 사용하겠습니다. USB3.0 대신 USB2.0을 사용해야 하는 것 아닌가요?

-f는 출력 파일을 강제로 덮어씁니다.

제 경우에는 파일에 쓰는 경우 이 옵션을 건너뛰어야 합니까? 문서에는 "이 옵션은 파티션의 부주의한 손상에 대한 보호일 뿐이며 일반 파일에서는 무시됩니다."라고 나와 있습니다.

-n은 가져오기 단계를 건너뜁니다.

첫 실행에만 사용하는 것이 더 나은 것 같나요?

-d 직접 디스크 액세스.

복구에 더 적합한 것처럼 보이지만 작동하려면 올바른 섹터 크기가 필요합니다. 나는 USB 어댑터 보고서를 믿을 수 없다는 것을 알고 있지만 이것은데이터 시트내 WD4002FYYZ가 512e가 아닌 512n임을 보여줍니다. 이는 크기를 명시적으로 설정할 필요가 없다는 뜻인가요? 아니면 해당 옵션을 사용하는 경우 이 작업을 수행하는 것이 바람직합니까 -d?

대상 디스크는 SATA에 있고 4096개의 물리적 섹터로 표시되지만 부팅 가능한 디스크 등을 다시 만드는 대신 폴더를 복사하려는 경우에는 중요하지 않은 것 같습니다.

-v 자세한 모드.

어쩌면 필요하지 않습니까? 출력이 어떻게 보이는지 잘 모르겠습니다.

/dev/sda vs /dev/sda1

내 목적에 맞게 전체 드라이브 이미지를 생성해야 합니까? 제가 아는 한, 제 모든 데이터는 가장 큰 파티션에 있는데, 시스템 파티션 내부도 좀 궁금하네요. 파티션 대신 전체 장치를 읽으면 디스크가 추가로 손상될 위험이 높아지나요? 그렇다면 데이터 파티션이 안전한 후에 시스템 파티션을 매핑해 볼 수 있습니다. ddrescue( )가 포함된 파티션을 사용하면 /dev/sda1이미지를 마운트하는 데 오프셋 옵션이 필요하지 않고 이렇게 잘 작동한다는 것을 올바르게 이해하고 있습니까? mount /volume2/rescue/sda1_rescue.img /mnt/newfolder -o loop,ro

전체 파티션을 복구하려는 경우 먼저 e2fsck 또는 복구하려는 파티션 유형에 적합한 다른 도구를 사용하여 복사본을 복구한 다음 복구된 복사본을 어딘가에 설치하고 그 안에 있는 파일을 복구해 보십시오.

e2fsck -v -f /dev/sdb1

데이터를 복사하는 동안에는 파티션별로 실행할 필요가 없다고 생각하더라도 데이터를 복사(마운트)하기 전에 대상 이미지에서 e2fsck를 실행해야 합니까?

지금채우기 모드문서의 한 부분이 나를 약간 혼란스럽게 합니다.

문서에 따르면 ddrescue 채우기 모드가 파일을 가리킬 수 있는 것으로 보입니다. 그러나 채우기 모드는 복구 모드가 아니며 생성된 이미지에 심각한 영향을 미치거나 다른 디스크 채널을 낭비하고 싶지 않다고 합니다. 12TB에는 실험을 위한 두 번째 4TB 이미지 복사본을 위한 추가 공간이 있을 수 있습니다. 하지만 여전히 명확하지 않습니다. 채우기 패턴을 통해 영향을 받는 파일 검색과 구조를 결합하는 가장 좋은 방법은 무엇입니까?

예 4: 디스크의 불량 영역에 어떤 파일이 있는지 알아보세요.

 ddrescue -b2048 /dev/cdrom cdimage mapfile
 printf "DEADBEEF" > tmpfile
 ddrescue --fill-mode=l- tmpfile cdimage mapfile
 rm tmpfile
 mount -t iso9660 -o loop,ro cdimage /mnt/cdimage
 find /mnt/cdimage -type f -exec grep -l "DEADBEEF" '{}' ';'
   (note that my_thesis.txt has a bad sector at pos 0x12345000)
 umount /mnt/cdimage
 ddrescue -b2048 -i0x12345000 -s2048 -dr9 /dev/cdrom cdimage mapfile
 ddrescue --fill-mode=- /dev/zero cdimage mapfile
 mount -t iso9660 -o loop,ro cdimage /mnt/cdimage
 cp -a /mnt/cdimage/my_thesis.txt /safe/place/my_thesis.txt

이 줄이 ddrescue --fill-mode=l- tmpfile cdimage mapfile cdimage를 덮어쓰나요? 처음으로 구조 모드에 들어간 후에 이 작업을 수행해야 합니까? 그리고 어떤 방식으로든 추가로 infile(손상된 하드 드라이브)을 건드리지 않죠? sda1_rescue.img이 명령을 또는 에서 실행 해야 합니까 sda1_rescue.img.bak? 이미 손상된 파일에 tmpfile 텍스트를 붙여넣기만 합니까? 두 번째 패스(재시도) 전에 채우기 모드를 실행해야 하는 경우 어떤 방식으로든 두 번째 패스를 조정해야 합니까? 예제에서는

ddrescue -b2048 -i0x12345000 -s2048 -dr9 /dev/cdrom cdimage mapfile

불량 섹터 위치 이후의 정확한 파일 크기를 알아야 할 것 같습니다. -s2048어떤 기준인지는 확실하지 않습니다. 그런 다음 손상된 상태에서 이미지의 해당 파일을 복구하기 위해 9번을 다시 시도합니까? 채우기 모드가 다시 실행되는 이유는 무엇입니까?

ddrescue --fill-mode=- /dev/zero cdimage mapfile

첫 번째 채우기 실행에 비해 키가 없으므로 l위치를 쓰지 않습니다(어쨌든 두 번째 구출 실행에만 필요합니까?). 이제 복구할 수 없는 마지막 불량 블록에 특정 텍스트를 쓰는 대신 불량 블록에 0을 쓰는 것 같습니다. 다음 단계는 설치 및 복구입니다. 이 단계는 단순히 더 이상 필요하지 않은 텍스트를 0으로 바꾸는 것입니까?

私のファイルのほとんどは再ダウンロードすることができ、ファイルが破損した場合は他の場所で交換したいのですが、可能であればいくつかのファイルをこの方法で回復することを好むかもしれませんが、どのように行うべきかわかりません。 -r3を使用してパーティション全体の2番目のステップを実行するよりも、危険な重要なファイル(複数のステップでファイルごとに1つのファイル?)にディスクリカバリを集中する方が安全ですか?

ベストアンサー1

免責事項:私はSynologyを所有していません。私はQNAPを使ったことがあり、気に入ったのと似ています。

プロセスは非常に簡単でなければなりません。しかし、ディスクが実際に死んでいる場合、チャンスは一度だけです。おそらく読む必要があると思います。オンライン文書始める前にddrescue

重要な順序でパーティションを回復したり、ディスク全体を回復したりできます。など/dev/sdaと交換して/dev/sda1パーティションを1つずつ削除します。ターゲットイメージファイル名も変更する必要があります。

ディスクが空で、ファイルシステムがマウント解除されていることを確認してください。fsckソースディスクから実行しないでください。

各回復プロセス中にのみrescue.log必要なので、各パーティションの回復を試みる前に削除する必要があります。特定のパーティションの回復試行が中断され、再起動が必要な場合は、欲しくない削除するrescue.log

rm -f /volume2/rescue/rescue.log
ddrescue -v /dev/sda /volume2/rescue/sda_rescue.img /volume2/rescue/rescue.log

復元されたイメージファイルがsda_rescue.imgディスクを表す場合は、そのパーティションテーブルを読み取り、そのパーティションの相対オフセットを確認する必要があります。幸いなことに、losetup最新のカーネルは通常これを行うことができます。

losetup --find --show /volume2/rescue/sda_rescue.img

たとえば、を取得したら、/dev/loop0ディスクイメージのパーティションごとに背面を見つける必要があります/dev/loop0p1/dev/loop0p2それ以外の場合は、パーティションテーブル(セクタ数学とオフセット)から直接調べる必要があります。

fsckイメージまたはイメージ内の各パーティションで適切なインスタンスを実行する必要があります。各イメージまたはパーティションをマウントしてみてください。失敗した場合は慎重に試してくださいfsck

mkdir /mnt/0p1
mount -o ro,noload /dev/loop0p1 /mnt/0p1    # ext4, readonly with no journal rollback

おすすめ記事