Odzyskiwanie superbloków ext4


47

Ostatnio moja zewnętrzna obudowa dysku twardego uległa awarii (sam dysk twardy włącza się w innej obudowie). Jednak w rezultacie wydaje się, że jego system plików EXT4 jest uszkodzony.

Dysk ma jedną partycję i korzysta z tablicy partycji GPT (z etykietą ears).

fdisk -l /dev/sdb przedstawia:

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

testdisk pokazuje, że partycja jest nienaruszona:

1 P MS Data                     2049 1953524952 1953522904 [ears]

... ale nie można zamontować partycji:

$ 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 zgłasza nieprawidłowy superblok:

$ 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

i e2fsckzgłasza podobny błąd:

$ 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 również:

$ 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(uwaga -n) zwraca superbloki:

$ 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

... ale próba „e2fsck -b [blok]” dla każdego bloku kończy się niepowodzeniem:

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

Jednak, jak rozumiem, to właśnie tam były superbloki podczas tworzenia systemu plików, co niekoniecznie oznacza, że ​​nadal są nienaruszone.


Przeprowadziłem również testdisk głębokie wyszukiwanie, czy ktoś może rozszyfrować dziennik. Wymienia wiele wpisów, takich jak:

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

Uruchomienie e2fsck z tymi wartościami daje:

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

Próbowałem tego ze wszystkimi superblokami w testdisk.log

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

... wszystkie z tym samym e2fsckkomunikatem o błędzie.


Podczas mojej ostatniej próby spróbowałem różnych przesunięć systemu plików. Dla każdego przesunięcia i, gdzie ijest jeden z 31744, 32768, 1048064, 1049088:

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

... i biegnąc testdisk /dev/loop0, nie znalazłem nic ciekawego.


Byłem dość wyczerpujący, ale czy jest jakiś sposób na odzyskanie systemu plików bez uciekania się do narzędzi do odzyskiwania plików niskiego poziomu ( foremost/ photorec)?


Co sudo fdisk -l /dev/sdbpokazuje
Karlson

4
Nie mogę uwierzyć, że miałeś na tyle pecha, że wszystkie kopie superbloku zostały usunięte. Musi więc być coś nie tak z tablicą partycji, która z kolei odrzuca logiczne przesunięcia bloków w systemie plików, powodując, że fsck nie może znaleźć alternatywnych superbloków.
Kyle Jones

Nie masz na tym dysku LVM? Czy masz obudowę zewnętrzną tego samego typu co poprzednia (taki sam rozmiar bloku itp.)?
Jan Marek

1
@KyleJones Zgodnie z zaleceniami autora testdisk, jak wspomniano powyżej, próbowałem różnych przesunięć przy użyciu losetup( i * 512gdzie ijest jeden z 62, 64, 2047 lub 2049).
tlvince

@JanMarek Nie, niestety nie ma LVM. Obudowa mieści dowolny standardowy dysk 3,5 ", ale nie mam innego ani drugiego dysku 1 TB.
tlvince

Odpowiedzi:


15

Niestety nie udało mi się odzyskać systemu plików i musiałem zastosować techniki odzyskiwania danych niższego poziomu (ładnie podsumowane we wpisie wiki Ubuntu Data Recovery ), z których Sleuth Kit okazał się najbardziej przydatny.

Oznaczanie jako odpowiedź ze względu na czystość.


8

To może być już nieaktualne, ale kilka sugestii:

Jeśli masz absolutną pewność, że oryginalny rozmiar bloku wynosi 4096, jak twierdzi testdisk, możesz przepisać superbloki na dysku za pomocą mke2fs -S. Od człowieka:

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

Jeśli nie masz pewności co do prawidłowego rozmiaru bloku, użyj mke2fs -n -b 2048 /dev/sdb1i wypróbuj wszystkie kopie zapasowe superbloku, jakie daje to polecenie, a następnie to samo, ale używając ostatniego rozmiaru bloku 1024.


0

Jak wspomniano, prawdopodobnie nieaktualne, ale fdisk (AFAIK) nie obsługuje dysków GPT. Musisz użyć narzędzia parted lub innego narzędzia.

Właśnie przetestowałem maszynę wirtualną z systemem ściśnięcia Debiana (jądro 2.6.32-5-486) ​​i sformatowałem dysk wirtualny jako GPT, używając parted ...

# 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

To jest fdisk wersja 2.17.2 (util-linux-ng).

mkfs i fsck powinny wybrać „prawdziwą” partycję OK, ale aby sprawdzić, czy tablica partycji GPT nie jest uszkodzona, powinieneś użyć partycji GNU.


0

Ten sam problem z montażem wystąpił po ponownym uruchomieniu komputera. W moim przypadku wystarczyło uruchomić parted i wydać polecenie:

set 1 lvm on

a następnie wyjdź i spróbuj zamontować ponownie. Może ci to też pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.