Memulihkan superblok kunci ext4

47

Baru-baru ini, penutup hard drive eksternal saya gagal (hard drive sendiri menyala di kandang lain). Namun, sebagai hasilnya, tampaknya sistem file EXT4nya rusak.

Drive memiliki satu partisi dan menggunakan tabel partisi GPT (dengan label ears).

fdisk -l /dev/sdb menunjukkan:

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

testdisk memperlihatkan bahwa partisi tersebut masih utuh:

1 P MS Data                     2049 1953524952 1953522904 [ears]

... tetapi partisi gagal dipasang:

$ 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 melaporkan superblok yang tidak valid:

$ 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

dan e2fsckmelaporkan kesalahan serupa:

$ 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 juga:

$ 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(catatan, -n) mengembalikan superblok:

$ 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

... tetapi mencoba "e2fsck -b [block]" untuk setiap blok gagal:

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

Namun seperti yang saya mengerti, ini adalah di mana superblok itu ketika filesystem dibuat, yang tidak berarti mereka masih utuh.


Saya juga telah menjalankan testdisk pencarian mendalam jika ada yang bisa mendekripsi log. Itu menyebutkan banyak entri seperti:

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

Menjalankan e2fsck dengan nilai-nilai itu memberi:

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

Saya mencoba itu dengan semua superblok di testdisk.log

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

... semua dengan e2fsckpesan kesalahan yang sama .


Dalam upaya terakhir saya, saya mencoba berbagai offset sistem file. Untuk setiap offset i, di mana iada satu dari 31744, 32768, 1048064, 1049088:

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

... dan berlari testdisk /dev/loop0, saya tidak menemukan sesuatu yang menarik.


Saya sudah cukup lengkap, tetapi apakah ada cara untuk memulihkan sistem file tanpa menggunakan alat pemulihan file tingkat rendah ( foremost/ photorec)?

Sejak itu
sumber
Apa yang sudo fdisk -l /dev/sdbditunjukkan?
Karlson
4
Saya tidak bisa membuat diri saya percaya bahwa Anda cukup beruntung untuk memiliki semua salinan superblok yang dihapus. Jadi pasti ada sesuatu yang salah dengan tabel partisi, yang pada gilirannya membuang offset blok logis dalam sistem file yang menyebabkan fsck tidak dapat menemukan superblok alternatif.
Kyle Jones
Bukankah Anda memiliki pada LVM disk ini? Apakah Anda memiliki selungkup eksternal dengan tipe yang sama seperti sebelumnya (ukuran blok yang sama, dll.)?
Jan Marek
1
@KyleJones Mengikuti saran dari penulis testdisk, seperti yang disebutkan di atas, saya mencoba berbagai offset menggunakan losetup(di i * 512mana isalah satu dari 62, 64, 2047 atau 2049).
tlvince
@ JanMarek Tidak, sayangnya tidak ada LVM. Enklosur ini adalah yang menampung disk standar 3,5 ", tapi saya tidak punya disk lain, atau disk 1TB kedua.
tlvince

Jawaban:

15

Sayangnya, saya tidak dapat memulihkan sistem file dan terpaksa menggunakan teknik pemulihan data tingkat rendah (diringkas dengan baik dalam entri wiki Pemulihan Data Ubuntu ), yang terbukti paling bermanfaat oleh Sleuth Kit .

Ditandai sebagai dijawab karena kebersihan.

Sejak itu
sumber
8

Ini mungkin sudah usang, tetapi beberapa saran:

Jika Anda benar-benar yakin bahwa ukuran blok asli adalah 4096, seperti diklaim oleh testdisk, Anda dapat menulis ulang superblok pada disk menggunakan mke2fs -S. Dari manusia:

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

Jika Anda tidak yakin tentang bloksize yang benar, gunakan mke2fs -n -b 2048 /dev/sdb1dan coba semua backup superblock yang diberikan oleh perintah ini, dan setelah itu sama tetapi gunakan blocksize terakhir 1024.

Jari Laamanen
sumber
0

Seperti disebutkan, mungkin sudah ketinggalan zaman, tetapi fdisk (AFAIK) tidak mendukung disk GPT. Anda perlu menggunakan sebagian atau alat lain.

Saya baru saja menguji Mesin Virtual yang menjalankan pemerasan Debian (kernel 2.6.32-5-486) ​​dan memformat disk virtual sebagai GPT menggunakan 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

Ini adalah fdisk versi 2.17.2 (util-linux-ng).

mkfs dan fsck harus mengambil partisi 'asli' OK, tetapi untuk memeriksa bahwa tabel partisi GPT tidak rusak, Anda seharusnya menggunakan GNU yang dipisah.

StarNamer
sumber
0

Saya mendapat masalah pemasangan yang sama setelah me-reboot komputer saya. Dalam kasus saya itu sudah cukup untuk menjalankan parted dan mengeluarkan perintah seperti:

set 1 lvm on

dan kemudian berhenti dan coba pasang kembali. Mungkin itu akan membantu Anda juga.

pengguna30192
sumber