ext4 슈퍼블록 복원

ext4 슈퍼블록 복원

최근에 외장 하드 드라이브 인클로저에 오류가 발생했습니다(하드 드라이브 자체가 다른 인클로저에서 부팅됨). 그러나 결과적으로 EXT4 파일 시스템이 손상된 것으로 보입니다.

드라이브에는 하나의 파티션이 있으며 GPT 파티션 테이블(레이블 포함 ears)을 사용합니다.

fdisk -l /dev/sdb보여주다:

   Device Boot      Start         End      Blocks   Id  System
     /dev/sdb1          1  1953525167   976762583+  ee  GPT

testdisk파티션이 손상되지 않았음을 표시합니다.

1 P MS Data                     2049 1953524952 1953522904 [ears]

...하지만 파티션을 마운트할 수 없습니다.

$ sudo mount /dev/sdb1 a
mount: you must specify the filesystem type
$ sudo mount -t ext4 /dev/sdb1 a 
mount: wrong fs type, bad option, bad superblock on /dev/sdb1,

fsck잘못된 슈퍼블록 신고:

$ sudo fsck.ext4 /dev/sdb1            
e2fsck 1.42 (29-Nov-2011)
fsck.ext4: Superblock invalid, trying backup blocks...
fsck.ext4: Bad magic number in super-block while trying to open /dev/sdb1

e2fsck유사한 오류를 보고합니다 .

$ sudo e2fsck /dev/sdb1        
Password: 
e2fsck 1.42 (29-Nov-2011)
e2fsck: Superblock invalid, trying backup blocks...
e2fsck: Bad magic number in super-block while trying to open /dev/sdb1

dumpe2fs반품:

$ sudo dumpe2fs /dev/sdb1                      
dumpe2fs 1.42 (29-Nov-2011)
dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb1

mke2fs -n(참고, -n)는 슈퍼블록을 반환합니다.

$ sudo mke2fs -n /dev/sdb1       
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
61054976 inodes, 244190363 blocks
12209518 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
7453 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848

...그러나 각 블록에 대해 "e2fsck -b [block]"을 시도하면 실패합니다.

$ sudo e2fsck -b 71663616 /dev/sdb1 
e2fsck 1.42 (29-Nov-2011)
e2fsck: Invalid argument while trying to open /dev/sdb1

그러나 이것은 파일 시스템이 생성되었을 때 슈퍼블록이 있었던 위치이며, 이것이 반드시 그대로 유지된다는 것을 의미하지는 않는다는 것이 제가 이해한 것입니다.


나도 달려봤어testdisk 심층 검색누구든지 로그를 해독할 수 있다면. 다음과 같은 많은 항목이 언급됩니다.

recover_EXT2: s_block_group_nr=1/7452, s_mnt_count=6/20,
s_blocks_per_group=32768, s_inodes_per_group=8192
recover_EXT2: s_blocksize=4096
recover_EXT2: s_blocks_count 244190363
recover_EXT2: part_size 1953522904
recover_EXT2: "e2fsck -b 32768 -B 4096 device" may be needed

이 값으로 e2fsck를 실행하면 다음이 제공됩니다.

e2fsck: Bad magic number in super-block while trying to open /dev/sdb1

슈퍼블럭 다 써봤는데testdisk.log

for i in $(grep e2fsck testdisk.log | uniq | cut -d " " -f 4); do
   sudo e2fsck -b $i -B 4096 /dev/sdb1
done

...모두 동일한 e2fsck오류 메시지가 있습니다.


마지막 시도에서는 다른 파일 시스템 오프셋을 시도했습니다. 31744, 32768, 1048064, 1049088 중 하나인 i각 오프셋에 대해 다음을 수행합니다 .i

$ sudo losetup -v -o $i /dev/loop0 /dev/sdb

...그리고 달리면서 testdisk /dev/loop0흥미로운 점을 찾지 못했습니다.


꽤 자세하게 설명했는데 혹시 있나요?그래도낮은 수준의 파일 복구 도구( foremost/ photorec)를 사용하지 않고 파일 시스템을 복구하시겠습니까?

답변1

안타깝게도 파일 시스템을 복구할 수 없었고 더 낮은 수준의 데이터 복구 기술(Ubuntu)을 사용해야 했습니다.데이터 복구위키 항목),탐정 키트가장 유용한 것으로 입증되었습니다.

청결을 위해 답변으로 표시했습니다.

답변2

이것은 오래되었을 수 있지만 다음은 몇 가지 제안 사항입니다.

명시된 대로 원래 블록 크기가 4096이라고 확신하는 경우 testdisk디스크에 슈퍼 블록을 다시 쓸 수 있습니다 mke2fs -S. 남성의 경우:

   -S    Write  superblock and group descriptors only.  This is useful if all
          of the superblock and backup superblocks are corrupted, and a  last-
          ditch  recovery method is desired.  It causes mke2fs to reinitialize
          the superblock and group descriptors, while not touching  the  inode
          table and the block and inode bitmaps.  The e2fsck program should be
          run immediately after this option is used, and there is no guarantee
          that  any  data  will be salvageable.  It is critical to specify the
          correct filesystem blocksize when using this option, or there is  no
          chance of recovery.

올바른 블록 크기가 확실하지 않은 경우 mke2fs -n -b 2048 /dev/sdb1이 명령으로 제공되는 모든 슈퍼블록 백업을 사용하고 시도한 다음 동일한 작업을 수행하되 마지막 블록 크기인 1024를 사용하십시오.

답변3

언급한 대로 오래되었을 수 있지만 fdisk(AFAIK)는 GPT 디스크를 지원하지 않습니다. parted나 다른 도구를 사용해야 합니다.

방금 Debian squeeze(커널 2.6.32-5-486)를 실행하고 parted를 사용하여 가상 디스크를 GPT로 포맷하는 가상 머신을 테스트했습니다...

# parted /dev/sde
(parted) mklabel GPT
(parted) mkpart part1 0 10G
(parted) quit
# fdisk -l /dev/sde
.
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
.
Disk /dev/sde: 85.9 GB, 85899345920 bytes
 255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
. 
   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1       10444    83886079+  ee  GPT

fdisk 버전 2.17.2(util-linux-ng)입니다.

mkfs 및 fsck는 "실제" 파티션을 선택할 수 있어야 하지만 GPT 파티션 테이블이 손상되지 않았는지 확인하려면 GNU parted를 사용해야 합니다.

답변4

  • 지팡이의 전체 이미지를 만듭니다(제 경우에는 Micro SD 카드).

  • 새 MicroSD 카드에 이미지를 복원합니다.

  • 달리기

    fsck.ext4 -f /dev/sdXY
    

    ( sdXY새 MicroSD 카드의 실제 장치 이름으로 대체)

    오류를 수정해야 하는지 묻는다면 "예"라고 대답하세요.

  • 완료되면 다시 나에게 큰 도움이 되었습니다.

관련 정보