web-dev-qa-db-fra.com

Comment récupérer des données d'une partition ext3 corrompue?

Un serveur de mien avait une défaillance de conduite d'une sorte qui a provoqué l'accident du système d'exploitation (CENTOS 5) et cesser d'arrêter de travailler (il refuse de démarrer).

Nous mettons donc un autre lecteur avec un système d'exploitation de travail et nous essayons de monter les partitions dans l'ancien lecteur.

La plupart des partitions montent bien sauf un: le /var Partition, où mes tables MySQL résident.
[.____] Lorsque j'essaie de monter celui-là, je vois ces erreurs avec dmesg:

sD 0: 0: 0: 0: 0: code de sens non géré
[.____] SD 0: 0: 1: 0: Erreur SCSI: Code de retour = 0x08100002
[.____
[.____] SDB: Courant: Touche Sense: Erreur moyenne
Ajouter. Sens: erreur de lecture non recouverte

Info FLD = 0x4a47e
JBD: Impossible de lire le bloc à compensation 9863
JBD: la récupération a échoué
EXT3-FS: Erreur lors du chargement du journal.

Y a-t-il une façon de récupérer les données dans cette partition?


Edit :
[.____] Comme demandé, la sortie de tune2fs -l /dev/sdb2 est:

tune2fs 1.39 (29-May-2006)
Filesystem volume name:   /var1
Last mounted on:          <not available>
Filesystem UUID:          d84f5181-24f3-40ce-9eaa-601ae5ae33bd
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              26214400
Block count:              26214063
Reserved block count:     1310703
Free blocks:              25127226
Free inodes:              26213665
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1017
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         32768
Inode blocks per group:   1024
Filesystem created:       Thu May 13 18:14:28 2010
Last mount time:          Thu Nov 29 12:52:00 2012
Last write time:          Wed Mar 27 20:29:28 2013
Mount count:              15
Maximum mount count:      -1
Last checked:             Thu May 13 18:14:28 2010
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      35f38c48-3933-4c99-bde2-63b0eccf200d
Journal backup:           inode blocks

Edit 2 :
[.____] Comme suggéré par @hartmut, je courais fsck.ext3 /dev/sdb2 Avec le résultat suivant:

e2fsck 1.39 (29-May-2006)
/var1: recovering journal
/var1: Attempt to read block from filesystem resulted in short read while reading block 11931

JBD: Failed to read block at offset 9863
fsck.ext3: No such device or address while trying to re-open /var1
e2fsck: io manager magic bad!
6
GetFree

Il semble que votre disque dur ait eu une défaillance physique et qu'elle a affecté un bloc contenant le journal ext3.

Vous aurez besoin d'un deuxième disque dur en blanc, au moins aussi important que la partition d'entraînement défaillante, d'effectuer une sorte de récupération de ce disque. Vous aurez également besoin d'une destination pour copier des fichiers récupérés, alors allons-nous. Appelez-le un troisième disque dur vierge, partage de fichier réseau, etc.

Le processus de récupération générale va être:

  1. Copiez la partition ayant échoué sur le nouveau lecteur à l'aide de dd conv=noerror ou mieux dd_rescue. Cela peut prendre un certain temps.

  2. Effectuer toutes les opérations supplémentaires sur la copie ici, je suppose que vous avez copié /dev/sdb2 à /dev/sdc2 et que vous récupérerez des fichiers à /dev/sdd2.

  3. Depuis que le journal est corrompu, nous le supprimerons:

    tune2fs -O ^has_journal /dev/sdc2
    
  4. Terminez maintenant un FSCK de l'appareil. Cela peut prendre un certain temps.

    e2fsck /dev/sdc2
    
  5. Montez le système de fichiers en lecture seule et essayez de récupérer des fichiers.

    mount -o ro /dev/sdc2 /mnt/baddrive
    mount /dev/sdd2 /mnt/recoveredfiles
    cp -av /mnt/baddrive/* /mnt/recoveredfiles
    
  6. En aucun cas, vous n'utilisez jamais le disque d'origine à nouveau. Remplacez-le (sous garantie, s'il est toujours sous garantie).

6
Michael Hampton

Avez-vous essayé de le monter en tant que système de fichiers ext2 avec mount -t ext2 ...? EXT3 est en retard compatible avec EXT2, il devrait donc simplement ignorer le journal qui semble être brisé. Ce n'est pas une solution idéale, mais cela peut vous laisser accéder à certaines données si vous êtes chanceux!

2
fab4am

Il pourrait être possible que les superblocs des systèmes de fichiers aient été corrompus. Vous pouvez suivre ci-dessous les étapes pour récupérer des superblocs.

# dumpe2fs /dev/sdb2 | grep -i superblock

Sortie d'échantillon:

Primary superblock at 0, Group descriptors at 1-6
Backup superblock at 32768, Group descriptors at 32769-32774
Backup superblock at 98304, Group descriptors at 98305-98310
Backup superblock at 163840, Group descriptors at 163841-163846
Backup superblock at 229376, Group descriptors at 229377-229382

Soit vous pouvez FSCK la partition avec une autre superbloc ou vous pouvez monter la partition avec superblock alternatif sans FSCK sur le système de fichiers.

Pour vérifier le système de fichiers

# fsck.ext3 -b 32768 /dev/sda2

Pour monter le système de fichiers avec Superblock alternatif:

# mount sb={alternative-superblock} /dev/device /mnt
# mount sb=32768 /dev/sdb2 /mnt

et essayez de parcourir des fichiers.

1
Amit Biyani