실수로 /dev/sda 파티션 테이블을 GParted로 덮어썼습니다(전체 내용은 AskUbuntu를 참조하세요.). 아직 재부팅하지 않았고 파일 시스템을 완전히 사용할 수 있으므로 커널 메모리에서 파티션 테이블을 복구할 수 있다는 말을 들었습니다. 그게 가능합니까? 그렇다면 어떻게 복구하고 복원할 수 있나요?
답변1
예, /sys
파일 시스템을 사용하여 이 작업을 수행할 수 있습니다.
/sys
커널 및 커널 드라이버에 의해 동적으로 생성된 가짜 파일 시스템입니다. 이 특별한 경우에는 드라이브의 각 파티션
으로 이동하여 디렉터리를 볼 수 있습니다. /sys/block/sda
이 폴더에는 필요한 2개의 특정 파일이 있으며 . start
는 드라이브 시작 부분의 오프셋과 파티션 크기를 포함합니다. 파티션을 삭제하고 .size
start
size
/sys
예를 들어, 내 드라이브는 다음과 같습니다.
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 133119 65536 83 Linux
/dev/sda2 * 133120 134340607 67103744 7 HPFS/NTFS/exFAT
/dev/sda3 134340608 974675967 420167680 8e Linux LVM
/dev/sda4 974675968 976773167 1048600 82 Linux swap / Solaris
이것이 내가 가진 것입니다 /sys/block/sda
:
sda1/
start: 2048
size: 131072
sda2/
start: 133120
size: 134207488
sda3/
start: 134340608
size: 840335360
sda4/
start: 974675968
size: 2097200
실행 중인 시스템에서 파티션 테이블을 수정한 후 정보가 정확한지 확인하기 위해 이를 테스트했습니다.
답변2
이 문제를 해결하기 위해 스크립트를 작성했습니다.보증 없음. (하지만 가상 머신에서 테스트했습니다)
아래와 같이 손상된 HD를 첫 번째 매개변수로 사용하여 다음 스크립트를 실행합니다.
user@host:~$ ./repart.sh sda
콘텐츠 repart.sh
:
#!/bin/bash
echo "unit: sectors"
for i in /sys/block/$1/$1?/; do
printf '/dev/%s : start=%d, size=%d, type=XX\n' "$(basename $i)" "$(<$i/start)" "$(<$i/size)"
done
출력은 sfdisk 형식입니다. 하지만경고하다, 이 파일을 사용하려면 먼저 수정해야 합니다. 확장 파티션 유형 = 5인 경우 모든 논리적 공간과 확장 파티션의 시작과 첫 번째 논리적 파티션의 시작 사이의 공간을 사용하여 크기가 증가됩니다.
unit: sectors
/dev/sda1 : start=63, size=2040192, type=XX
/dev/sda2 : start=2040255, size=20482875, type=XX
/dev/sda3 : start=22523130, size=19197675, type=XX
/dev/sda4 : start=41720805, size=2, type=XX
/dev/sda5 : start=41720868, size=208782, type=XX
너는 변해야 해유형, XX부터 파티션 유형 번호까지. 입다부팅 가능첫 번째 줄에 파티션이 있습니다.
unit: sectors
/dev/sda1 : start=63, size=2040192, type=83, bootable
/dev/sda2 : start=2040255, size=20482875, type=83
/dev/sda3 : start=22523130, size=19197675, type=fd
/dev/sda4 : start=41720805, size=208845, type=5
/dev/sda5 : start=41720868, size=208782, type=82
이 변경사항 적용
cat repart.sfdisk | sfdisk -f /dev/sda
파티션 테이블 다시 읽기
partprobe
/sbin/blockdev --rereadpt
그럽 다시 설치
grub-install /dev/sda
답변3
시도해 봤어?테스트 디스크? 재부팅 후에도 디스크를 스캔하고 손실된 파티션 테이블을 복구할 수 있습니다.
Debian용으로 사전 패키지되어 있으며 Ubuntu에서도 사용할 수 있습니다. 아마도 다른 배포판일 수도 있습니다.
gparted CD를 부팅하는 경우 CD에 사전 설치되어 있는지 확인하는 것이 좋습니다.