Відновлення суперблоків ext4


47

Нещодавно мій зовнішній корпус жорсткого диска вийшов з ладу (сам жорсткий диск вмикається в іншому корпусі). Однак у результаті виявляється, що файлова система 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 [блок]" для кожного блоку не вдається:

$ 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повідомленням про помилку.


У своїй останній спробі я спробував різні компенсації файлової системи. Для кожного зміщення i, де iодин з 31744, 32768, 1048064, 1049088:

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

... і бігаючи testdisk /dev/loop0, я не знайшов нічого цікавого.


Я був досить вичерпним, але чи є спосіб відновити файлову систему, не вдаючись до інструментів відновлення файлів низького рівня ( foremost/ photorec)?


Що sudo fdisk -l /dev/sdbпоказує?
Карлсон

4
Я не можу змусити себе повірити, що вам не пощастило, щоб усі копії суперблоку було витерто. Отже, з таблицею розділів має бути щось не так, що, в свою чергу, викидає зсуви логічного блоку у файловій системі, через що fsck не зможе знайти альтернативні суперблоки.
Кайл Джонс

Чи не було у вас на цьому диску LVM? Чи є у вас зовнішній корпус того ж типу, що і попередній (той же розмір блоку тощо)?
Ян Марек

1
@KyleJones Виконуючи поради автора testdisk, як згадувалося вище, я спробував різні компенсації, використовуючи losetup( i * 512де iодин з 62, 64, 2047 або 2049).
переконайтеся

@JanMarek Ні, ні LVM, на жаль. У корпусі розміщено будь-який стандартний 3,5-
дюймовий

Відповіді:


15

На жаль, мені не вдалося відновити файлову систему, і довелося вдатися до методів відновлення даних нижчого рівня (що добре узагальнено у вікі-записі Ubuntu Data Recovery ), з яких Sleuth Kit виявився найбільш корисним.

Позначення як відповідь заради чистоти.


8

Можливо, це вже застаріло, але кілька пропозицій:

Якщо ви абсолютно впевнені, що оригінальний розмір блоку становить 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.


0

Як згадувалося, напевно застарів, але fdisk (AFAIK) не підтримує диски GPT. Вам потрібно скористатися проділом або яким-небудь іншим інструментом.

Я щойно перевірив віртуальну машину, на якій працює Debian видавлювання (ядро 2.6.32-5-486) ​​і відформатував віртуальний диск як 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.


0

Я отримав таку ж проблему з монтажем після перезавантаження комп'ютера. У моєму випадку було достатньо запустити проділ і видати команду типу:

set 1 lvm on

а потім вийдіть і спробуйте перерахувати. Можливо, це теж допоможе вам.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.