내가 뭔가 잘못하면 여러분이 나에게 말할 수 있도록 내 생각을 설명하겠습니다.
두 개의 외장 하드 드라이브가 있는데 그 중 하나는 오류가 발생하고(Windows에서는 다시 사용하려면 포맷하라는 메시지가 표시됨) 두 번째 드라이브는 비어 있고 훨씬 크기 때문에 오류가 발생한 드라이브를 복사하는 데 사용했습니다. 처음에는 Testdisk
경험이 있었기 때문에 사용하려고 생각했습니다. 그러나 복구 도구를 사용하기 전에 오류가 발생한 디스크의 전체 복사본을 갖고 싶었습니다. 그것이 내가 찾은 곳이다 GNU ddrescue
. 그래서 내 계획은 사본을 만든 GNU ddrescue
다음 Testdisk
사본에 사용하는 것입니다.
그래서 나는 GNU ddrescue - GUI version
. 복구가 완료된 후 선택할 수 있는 3가지 옵션이 나타납니다. 1.재설정 2.드라이브 마운트 3.종료; 나는 멍청한 사람이고 GNU ddrescue
아무것도 재설정하거나 마운트하지 않고 프로그램을 종료하는 것이 가장 좋을 것이라고 생각했습니다. 마운트가 실제로 드라이브에 어떤 영향을 미치는지 전혀 모르겠습니다. 죄송합니다.
Testdisk
다음으로, 손실된 파티션을 복구하기 위해 복제본을 사용할 계획입니다 .
하지만 계속 진행하기 전에 이 두 프로그램을 함께 사용하는 것이 실제로 옳은지, 아니면 그 과정에서 실패한 것이 있는지 알고 싶습니다. 이제 새 드라이브가 이전 드라이브의 완전한 복사본이라고 생각하는 것이 맞습니까?
편집하다:
/dev/sdd/ ... 오래된 하드 드라이브 오류
/dev/sde/ ... 새 하드 드라이브
root@PartedMagic:~# sudo gdisk -l /dev/sdd
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Disk /dev/sdd: 976773168 sectors, 465.8 GiB
Model: Portable
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): A6D24F7F-47D5-4FAA-8595-5E56582C1DB1
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 8-sector boundaries
Total free space is 5099 sectors (2.5 MiB)
Number Start (sector) End (sector) Size Code Name
1 63 976768064 465.8 GiB 0700 Microsoft basic data
root@PartedMagic:~# sudo gdisk -l /dev/sde
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Warning! Secondary partition table overlaps the last partition by
244209734 blocks!
You will need to delete this partition or resize it in another utility.
Disk /dev/sde: 732558336 sectors, 2.7 TiB
Model: Elements 10B8
Sector size (logical/physical): 4096/4096 bytes
Disk identifier (GUID): E797BEEA-722B-4903-8086-B2A84B5E741C
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 5
First usable sector is 6, last usable sector is 732558330
Partitions will be aligned on 8-sector boundaries
Total free space is 57 sectors (228.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 63 976768064 3.6 TiB 0700 Microsoft basic data
출력sudo blkid
root@PartedMagic:~# sudo blkid
/dev/sdd1: LABEL="Expansion Drive" UUID="3C148148148105DC" TYPE="ntfs" PARTUUID="3df9d654-01"
sudo blkid
/dev/sdeX/는 언급되지 않습니다.
설명을 위해: /dev/sdd/에는 실패하기 전에 파티션이 하나만 있었습니다.
답변1
이것은 그렇게 쉽게 작동하지 않을 것입니다.
새 디스크의 논리 섹터 크기는 4096
이고, 기존 디스크의 논리 섹터 크기는 입니다 512
. 파티션 테이블의 숫자는 동일하게 유지되었지만 새 섹터가 8배 더 크기 때문에 복제본의 전체 파티션 테이블은 의미가 없습니다.
어떤 경우에는 이 숫자를 번역하는 것이 가능합니다(비교내 이 대답) 그러나 여기서 (이전) 파티션은 4096으로 나눌 수 없는 63*512바이트의 오프셋에서 시작합니다. 이는 파일 시스템이 이제 어딘가에서 시작된다는 의미입니다.내부에더 큰 섹터(섹터의 시작 부분에서 시작해야 함)이므로 파티션 테이블이 이 작업을 즉시 수행하지 않습니다.
이제 무엇을 해야 할까요? 아래에 몇 가지 아이디어가 있습니다. 계속하기 전에 (만약의 경우) 기존 디스크의 연결을 끊으십시오.
(지금은 유효하지 않은) 파티션 테이블에 관계없이 파일 시스템 마운트를 계속 시도할 수 있습니다.
mount -o ro,offset=$((63*512)) /dev/sde /some/mountpoint
파일 시스템이 정상이라면 이것이 작동할 것입니다. 귀하의 경우 파일 시스템이 손상되어 명령이 실패할 수 있습니다. 하지만 어쩌면 그것이 효과가 있을 것이고 여러분은 중요한 데이터를 모두 꺼내게 될 것입니다.
다음 섹터 크기를 보고하는 루프 장치에 전체 디스크를 매핑할 수 있습니다 512
.
losetup -f --show /dev/sde # 512 is the default value
그러면 다음과 같은 노드가 인쇄됩니다 /dev/loop7
. 이 장치의 컨텍스트에서는 파티션 테이블이 유효합니다. 파티션 테이블을 예상하는 도구는 이제 장치에서 작동합니다(일부는 /dev/loop7p1
파티션 작업을 위해 가 필요할 수 있지만 kpartx
도움이 될 수 있지만 먼저 다음 아이디어를 고려함).
참고: 를 사용하여 노드를 파괴합니다 losetup -d /dev/loop7
.
실제 파티션을 루프 장치에 매핑할 수 있습니다.
losetup -f --show --offset $((63*512)) --sizelimit $(( (976768064+1-63)*512 )) /dev/sde
다시 말하지만, 이는 다음과 같은 노드를 인쇄해야 합니다 /dev/loop8
. (손상되었을 수 있는) 파일 시스템은 이 장치의 맨 처음부터 시작하므로 파일 시스템을 분석하는 복구 도구는 파티션 테이블 없이 해당 파일(또는 최소한 그 안에 있는 파일)을 찾을 수 있습니다.
파티션을 다른 오프셋으로 복사할 수 있으므로 파티션 테이블은~할 수 있다고정되다. 이것은 다소 까다롭습니다. 모든 숫자는 올바르게 계산되어야 합니다. 이전 방법 중 하나라도 충분하다면 걱정하지 마세요.
이전 디스크는 465.8GiB이고 새 디스크는 2.7TiB입니다. 그래서 공간이 충분해요. 파일 시스템을 디스크 끝에 복사해 보겠습니다.
이전 파티션은 섹터 번호 63부터 976768064(포함)까지 총 512바이트 섹터, 976768002 섹터를 차지했습니다. 즉, 최소 122096001개의 더 큰(4096바이트) 섹터가 필요합니다.
4096바이트 섹터에서 시작과 끝은 7(일부 사용) 및 122096008(부분 사용)로 변환됩니다.
디스크에는 732558336개의 섹터가 있으므로 122096001개의 섹터만큼 뒤로 물러나야 합니다(GPT를 사용하려는 경우 더 많이). 610459648의 시작 섹터는 괜찮은 것 같습니다. 끝에 보조 GPT를 위한 약간의 공간이 남게 됩니다(32MiB 경계에 맞춰 정렬되어 있지만 그다지 중요하지 않습니다). 이제 새 파티션의 마지막 섹터는 최소한 732555648(732555655)이 되어야 합니다(섹터의 크기를 8로 나눌 수 있도록 하려면 일부 도구가 만족스러울 수 있습니다. 파티션이 충분히 크면 파일 시스템에 영향을 주어서는 안 됩니다. 자신의 크기).
파티션 테이블을 편집하고 이전(잘못된) 항목을 삭제한 후 계획대로 새 항목을 만듭니다.
- 첫 번째 섹터 610459648
- 마지막 섹터 732555655
- NTFS에 적합한 코드 또는 유형
512바이트 섹터가 있는 이러한 대형 디스크에는 MBR 파티션 테이블이 아닌 GPT가 필요합니다. 4096바이트 섹터에서는 GPT 또는 MBR이 작동합니다.
그런 다음(파티션 프로그램이 암시적으로 호출하지 않는 경우 이후 partprobe
) 새 파티션에 액세스할 수 있어야 합니다.
위에서 생성한 데이터를 /dev/loop8
새 파티션으로 복사합니다.
dd if=/dev/loop8 of=/dev/sdeN bs=32M
# or better use ddrescue again
명령이 약 465.8 GiB를 복사한 후 파일 시스템은 파티션 내에서 적절하게 정렬됩니다(섹터 중간이 아닌 처음부터 시작함). 이전 아이디어는 다소 "해킹"이었습니다. 이것은 꽤 표준적인 설정을 제공합니다.
필요한 경우 복구된 데이터를 위해 또 다른 파티션을 생성할 수 있습니다. 원래 작성한 파일 시스템은 ddrescue
122096008 섹터에서 끝납니다. 새 복사본(만들기로 결정한 경우)은 610459648에서 시작합니다. 어쨌든 그 사이의 모든 것은 사용자가 사용할 수 있습니다.