내 LV에 ext4 파일 시스템이 있는데 실수로 파티션을 축소했는데 파티션이 너무 작아서 손상되었습니다. 파티션을 원래 크기로 다시 확장한 후 LV에 새 ext4 FS를 배치했습니다. 현재 상태에서는 udev
장치 파일도 제공되지 않기 때문입니다.
이전 슈퍼블록을 복원해야 합니다. 아직 어딘가에 좋은 백업이 있기를 바랍니다.
어떻게 찾을 수 있나요? 할 수 있나요?
testdisk
무리를 찾은 것 같지만 그 중 아무 것도 작동하지 않습니다.
답변1
운이 좋아서 파티션에 백업 슈퍼블록이 있을 수도 있습니다. 파일 시스템을 생성하는 데 사용한 옵션을 기억하는 경우(예: 방금 기본값을 사용함) 다음과 같이 백업 위치를 찾을 수 있습니다.
sudo /sbin/mkfs.ext4 -n <original_options> <device>
이것은 -n
매우 중요합니다. 이것은 "모의 실행" 옵션이며 디스크에 아무 것도 기록되지 않습니다(실험하는 동안 디스크를 안전한 장소에 버리는 것이 여전히 좋은 생각일 수 있습니다. 저는 여러분이 이 작업을 수행했다고 가정합니다).
원래 옵션이 기억나지 않더라도 위의 옵션은 최종 후보 목록을 얻으려고 시도해 볼 가치가 있습니다.
이제 각 후보 슈퍼블록에 대해 -o ro,sb=<n>
대체 슈퍼블록(및 읽기 전용)을 사용하도록 마운트해 보세요. 성공하면 일부 파일을 복구할 수 있습니다.
후보 슈퍼블록 중 어느 것도 성공적인 설치를 허용하지 않는 경우 최후의 노력은 -S
다음 옵션을 사용하여 새 슈퍼블록을 작성하는 것일 수 있습니다 mkfs.ext4
.수퍼블록 및 그룹 설명자만 작성됩니다. 이는 모든 슈퍼블록과 백업 슈퍼블록이 손상되어 최후의 수단 복구 방법이 필요한 경우에 유용합니다." 저 할 수 있어요아니요전체 파티션 백업 없이 이 작업을 수행합니다.
답변2
먼저, 데이터를 복구하는 동안 디스크에 더 이상 쓰기가 이루어지지 않도록 디스크가 읽기 전용인지 확인하세요.
ext4 슈퍼블록은 inode 수, 블록 수 등에 따라 내용이 크게 다르기 때문에 찾기가 어렵습니다. 그러나 검색해 볼 수 있는 매직 서명 0xEF53(16비트)이 있습니다. 올바른 위치를 찾을 수 있는 경우 슈퍼블록의 시작 부분(따라서 총 inode 수)은 이보다 56바이트(16진수로 0x38바이트) 앞에 배치되어야 합니다.
0xEF53의 인스턴스를 많이 찾을 수 있지만 슈퍼블록에서 다른 가능한 값을 확인하여 이를 식별할 수 있습니다.
다음은 ext4 슈퍼블록 값 테이블입니다:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Block
전체 디스크 이미지에 대해 16진수 편집기를 사용하면 결과가 나올 수 있습니다.
ext4 슈퍼블록과 유사한 데이터를 검색하기 위해 프로그램을 작성하거나 누군가에게 비용을 지불하여 이를 수행하는 것도 아이디어일 수 있습니다. (예를 들어, 운영 체제가 "Linux"이므로 오프셋 72(0x48)의 32비트 숫자는 0이어야 합니다.)
행운을 빌어요.