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을 사용하여 전체 파티션 두 번째 단계를 수행하는 것보다 위험에 처한 중요한 파일(여러 단계에서 파일당 하나의 파일?)에 디스크 복구를 집중하는 것이 더 안전합니까?

답변1

면책조항: 저는 Synology를 소유하고 있지 않습니다. 저는 QNAP을 사용해 본 적이 있고 마음에 들었는데 비슷합니다.

프로세스는 매우 간단해야 합니다. 그러나 디스크가 실제로 죽어가고 있다면 기회는 단 한 번뿐일 수 있습니다. 아마 읽어봐야 할 것 같아요온라인 문서시작하기 전에 ddrescue.

중요한 순서대로 파티션을 복구하거나 전체 디스크를 복구할 수 있습니다. 등 /dev/sda으로 교체하여 /dev/sda1파티션을 하나씩 삭제합니다. 대상 이미지 파일 이름도 수정해야 합니다.

디스크가 비어 있고 파일 시스템이 마운트 해제되었는지 확인하십시오. 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

관련 정보