"장치->파티션 테이블 생성... 후 적용"을 클릭하여 gparted를 사용하여 NTFS(Windows) 파티션 테이블을 지웠습니다. NTFS 파티션을 복구할 수 있는 방법이 있습니까?
이 명령을 사용해 보았 gpart /dev/sda
더니 다음과 같은 결과가 나왔습니다.
Begin scan...
End scan.
Checking partitions...
Ok.
Guessed primary partition table:
Primary partition(1)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
Primary partition(2)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
Primary partition(3)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
Primary partition(4)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
이 출력은 무엇을 의미합니까? 회복할 수 있는 방법이 있나요?
답변1
파티션 테이블을 복구할 수 있지만 이를 위해서는 두 가지 조건이 충족되어야 합니다.
- 컴퓨터를 재부팅하지 않았습니다.
- 테이블이 변경될 당시 드라이브가 사용 중이었습니다.
이것이 작동하는 방식은 커널이 파티션 레이아웃을 메모리에 유지한다는 것입니다. 파티션이 사용 중인 경우 파티션이 시작되는 위치를 알아야 하므로 더 이상 사용하지 않을 때까지 새 테이블 다시 로드를 거부합니다.
이를 수행하는 방법:
이동 /sys/block/sda
. 그 안에는 각 파티션( sda1
, sda2
등) 에 대한 디렉터리가 표시됩니다 . 각각의 내부에는 start
and size
(so ) 라는 파일이 있습니다 /sys/block/sda/sda1/start
. 완전히 동일한 시작 위치와 크기를 사용하여 파티션 테이블을 다시 생성하면 괜찮을 것입니다.
파티션 유형은 유지되지 않습니다. Linux는 이 정보에 관심이 없습니다. 따라서 다시 생성한 후에는 파티션 유형이 무엇으로 설정되었는지(NTFS 등) 기억해야 합니다.
예
원본 디스크:
# fdisk -l /dev/sdc 디스크 /dev/sdc: 8006MB, 8006926336바이트, 15638528 섹터 단위 = 1 * 512 = 512바이트의 섹터 섹터 크기(논리적/물리적): 512바이트 / 512바이트 I/O 크기(최소/최적): 512바이트 / 512바이트 디스크 식별자: 0x000ce29c 장치 부팅 시작 끝 블록 ID 시스템 /dev/sdc1 2048 2099199 1048576 83 리눅스 /dev/sdc2 2099200 15638527 6769664 83 리눅스
# 마운트 | grep sdc /mnt/tmp 유형 xfs(rw)의 /dev/sdc2
# 고양이 /mnt/tmp/세계 안녕하세요
파티션 테이블 지우기
# fdisk /dev/sdc fdisk(util-linux 2.22.2)에 오신 것을 환영합니다. 변경 사항은 쓰기로 결정할 때까지 메모리에만 유지됩니다. write 명령을 사용하기 전에 주의하십시오. 명령(도움말은 m): d 파티션 번호(1-4): 1 파티션 1이 삭제되었습니다. 명령(도움말은 m): d 선택된 파티션 2 파티션 2가 삭제되었습니다. 명령(도움말은 m): p 디스크 /dev/sdc: 8006MB, 8006926336바이트, 15638528 섹터 단위 = 1 * 512 = 512바이트의 섹터 섹터 크기(논리적/물리적): 512바이트 / 512바이트 I/O 크기(최소/최적): 512바이트 / 512바이트 디스크 식별자: 0x000ce29c 장치 부팅 시작 끝 블록 ID 시스템 명령(도움말은 m): w 파티션 테이블이 변경되었습니다! ioctl()을 호출하여 파티션 테이블을 다시 읽습니다. 경고: 오류 16: 장치 또는 리소스가 사용 중이므로 파티션 테이블을 다시 읽지 못했습니다. 커널은 여전히 이전 테이블을 사용합니다. 새 테이블은 다음에서 사용됩니다. 다음에 재부팅하거나 partprobe(8) 또는 kpartx(8)를 실행한 후 디스크를 동기화하는 중입니다.
여전히 마운트되어 있고 액세스할 수 있다는 점에 유의하세요.
# 고양이 /mnt/tmp/세계 안녕하세요
오프셋 가져오기
# CD /sys/class/block/sdc #ls alignment_offset device@ events_poll_msecs 전원/ ro 슬레이브/ bdi@ 폐기_정렬 ext_range 대기열/ sdc1/ stat 기능 이벤트 보유자/범위 sdc2/하위 시스템@ dev events_async 기내 이동식 크기 uevent # 고양이 sdc1/시작 2048년 # 고양이 sdc1/크기 2097152 # 고양이 sdc2/시작 2099200 # 고양이 sdc2/크기 13539328
파티션 테이블 복원
# fdisk /dev/sdc fdisk(util-linux 2.22.2)에 오신 것을 환영합니다. 변경 사항은 쓰기로 결정할 때까지 메모리에만 유지됩니다. write 명령을 사용하기 전에 주의하십시오. 명령(도움말은 m): n 파티션 유형: p 기본(기본 0개, 확장 0개, 무료 4개) 전자 확장 선택(기본값 p): p 파티션 번호(1-4, 기본값 1): 1 첫 번째 섹터(2048-15638527, 기본값 2048): 2048 마지막 섹터, +섹터 또는 +크기{K,M,G}(2048-15638527, 기본값 15638527): +2097151 Linux 유형 및 크기 1GiB의 파티션 1이 설정되었습니다. 명령(도움말은 m): n 파티션 유형: p 기본(기본 1개, 확장 0개, 무료 3개) 전자 확장 선택(기본값 p): p 파티션 번호(1-4, 기본값 2): 2 첫 번째 섹터(2099200-15638527, 기본값 2099200): 2099200 마지막 섹터, +섹터 또는 +크기{K,M,G}(2099200-15638527, 기본값 15638527): +13539327 Linux 유형 및 크기 6.5GiB의 파티션 2가 설정되었습니다. 명령(도움말은 m): p 디스크 /dev/sdc: 8006MB, 8006926336바이트, 15638528 섹터 단위 = 1 * 512 = 512바이트의 섹터 섹터 크기(논리적/물리적): 512바이트 / 512바이트 I/O 크기(최소/최적): 512바이트 / 512바이트 디스크 식별자: 0x000ce29c 장치 부팅 시작 끝 블록 ID 시스템 /dev/sdc1 2048 2099199 1048576 83 리눅스 /dev/sdc2 2099200 15638527 6769664 83 리눅스 명령(도움말은 m): w 파티션 테이블이 변경되었습니다! ioctl()을 호출하여 파티션 테이블을 다시 읽습니다. 경고: 오류 16: 장치 또는 리소스가 사용 중이므로 파티션 테이블을 다시 읽지 못했습니다. 커널은 여전히 이전 테이블을 사용합니다. 새 테이블은 다음에서 사용됩니다. 다음에 재부팅하거나 partprobe(8) 또는 kpartx(8)를 실행한 후 디스크를 동기화하는 중입니다.
!!마지막 섹터를 지정할 때 크기 - 1을 사용합니다.!!
확인
드라이브를 마운트 해제하고 실행하여 partprobe
커널에 새 테이블을 선택하도록 지시한 다음 다시 마운트하고 여전히 파일에 도달하는지 확인하겠습니다.
# 마운트 해제 /mnt/tmp/ # 파트프로브 /dev/sdc # 마운트 /dev/sdc2 /mnt/tmp # 고양이 /mnt/tmp/세계 안녕하세요
답변2
당신은 사용해 볼 수도 있습니다테스트디스크파티션 테이블을 복구합니다. Testdisk는 디스크 표면을 읽고 파티션이 시작되고 끝나는 위치를 결정하려고 시도합니다.
답변3
parted
대략적인 위치를 알고 있는 경우 파일 시스템의 시작과 길이를 탐색할 수 있는 복구 명령이 있습니다.
답변4
NTFS 디스크의 크기를 알고 있다면 fdisk나 parted를 사용하여 이러한 디스크를 재설정할 수 있지만 운이 없다고 생각합니다.