Phục hồi superblocks ext4


47

Gần đây, vỏ ổ cứng gắn ngoài của tôi không thành công (ổ cứng tự cấp nguồn trong vỏ khác). Tuy nhiên, kết quả là hệ thống tệp EXT4 của nó bị hỏng.

Ổ đĩa có một phân vùng duy nhất và sử dụng bảng phân vùng GPT (có nhãn ears).

fdisk -l /dev/sdb trình diễn:

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

testdisk cho thấy phân vùng còn nguyên vẹn:

1 P MS Data                     2049 1953524952 1953522904 [ears]

... nhưng phân vùng không thể mount:

$ 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 báo cáo một siêu khối không hợp lệ:

$ 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

e2fsckbáo cáo một lỗi tương tự:

$ 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 cũng thế:

$ 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(lưu ý, -n) trả về các siêu khóa:

$ 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

... nhưng việc thử "e2fsck -b [block]" cho mỗi khối không thành công:

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

Tuy nhiên, theo tôi hiểu, đây là nơi các siêu khóa được tạo ra khi hệ thống tập tin được tạo ra, điều đó không nhất thiết có nghĩa là chúng vẫn còn nguyên vẹn.


Tôi cũng đã thực hiện một testdisk tìm kiếm sâu nếu ai đó có thể giải mã nhật ký. Nó đề cập đến nhiều mục như:

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

Chạy e2fsck với các giá trị đó mang lại:

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

Tôi đã thử điều đó với tất cả các siêu khóa trong testdisk.log

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

... Tất cả đều có cùng một e2fsckthông báo lỗi.


Trong lần thử cuối cùng của tôi, tôi đã thử các hệ thống tập tin khác nhau. Đối với mỗi phần bù i, trong đó icó một trong số 31744, 32768, 1048064, 1049088:

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

... Và chạy testdisk /dev/loop0, tôi không tìm thấy bất cứ điều gì thú vị.


Tôi đã khá mệt mỏi, nhưng có cách nào để khôi phục hệ thống tệp mà không cần dùng đến các công cụ khôi phục tệp cấp thấp ( foremost/ photorec) không?


Không sudo fdisk -l /dev/sdbthể hiện điều gì?
Karlson

4
Tôi không thể khiến bản thân tin rằng bạn đã không may mắn khi bị xóa tất cả các bản sao của siêu khối. Vì vậy, phải có một cái gì đó sai với bảng phân vùng, do đó sẽ loại bỏ các khối logic logic trong hệ thống tập tin khiến fsck không thể tìm thấy các siêu khóa thay thế.
Kyle Jones

Bạn không có trên đĩa LVM này? Bạn có bao vây bên ngoài cùng loại như trước đây (cùng kích thước khối, v.v.) không?
Jan Marek

1
@KyleJones Sau lời khuyên từ tác giả của testdisk, như đã đề cập ở trên, tôi đã cố gắng bù đắp khác nhau sử dụng losetup( i * 512nơi ilà một trong 62, 64, 2047 hoặc 2049).
tlvince

@JanMarek Không, không may LVM. Bao vây là ổ chứa bất kỳ đĩa 3,5 "tiêu chuẩn nào, nhưng tôi không có đĩa khác, cũng không phải đĩa 1TB thứ hai.
tlvince

Câu trả lời:


15

Thật không may, tôi không thể khôi phục hệ thống tệp và phải sử dụng các kỹ thuật phục hồi dữ liệu cấp thấp hơn (được tóm tắt độc đáo trong mục nhập wiki Phục hồi dữ liệu của Ubuntu ), trong đó Sleuth Kit tỏ ra hữu ích nhất.

Đánh dấu như đã trả lời cho sự sạch sẽ vì lợi ích.


8

Điều này có thể đã lỗi thời, nhưng một vài gợi ý:

Nếu bạn hoàn toàn chắc chắn rằng kích thước khối ban đầu là 4096, như được yêu cầu bởi testdisk, bạn có thể viết lại các siêu khóa trên đĩa bằng cách sử dụng mke2fs -S. Từ người đàn ông:

   -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.

Nếu bạn không chắc chắn về kích thước khối chính xác, hãy sử dụng mke2fs -n -b 2048 /dev/sdb1và thử tất cả các bản sao lưu siêu khối mà lệnh này đưa ra, và sau đó cũng tương tự nhưng sử dụng kích thước khối cuối cùng 1024.


0

Như đã đề cập, có lẽ đã lỗi thời, nhưng fdisk (AFAIK) không hỗ trợ đĩa GPT. Bạn cần sử dụng parted hoặc một số công cụ khác.

Tôi vừa thử nghiệm Máy ảo chạy nén Debian (kernel 2.6.32-5-486) ​​và định dạng một đĩa ảo là GPT bằng cách sử dụng ...

# 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

Đây là phiên bản fdisk 2.17.2 (produc-linux-ng).

mkfs và fsck nên chọn phân vùng 'thực' OK, nhưng để kiểm tra xem bảng phân vùng GPT không bị hỏng, bạn nên sử dụng GNU parted.


0

Tôi gặp vấn đề tương tự sau khi khởi động lại máy tính của tôi. Trong trường hợp của tôi, nó là đủ để chạy parted và đưa ra một lệnh như:

set 1 lvm on

và sau đó bỏ thuốc lá và cố gắng để kể lại. Có lẽ nó cũng sẽ giúp bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.