web-dev-qa-db-fra.com

Pourquoi FSCK a-t-il déclaré que le superbloc ou la table de partition corrompue et comment réparer?

J'ai fait une image (DD) d'un lecteur et j'essaie d'exécuter un système de fichiers. Vérifiez-le: Type de système de fichiers: EXT3

Voici l'erreur originale de FSCK:

 fsck -fv -z ./Seagate.ST3500320NS.SN-9QM5ZHHR.500GB.465GiB.undo.$(date
+"%Y-%m-%d.%H.%M.%S").und /dev/loop2
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
Overwriting existing filesystem; this can be undone using the command:
    e2undo ./Seagate.ST3500320NS.SN-9QM5ZHHR.500GB.465GiB.undo.2019-01-17.13.31.41.und /dev/loop2

The filesystem size (according to the superblock) is 122063840 blocks
The physical size of the device is 121604515 blocks
Either the superblock or the partition table is likely to be corrupt!

Info de FDISK -L/DEV/SDA

Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000794ac

Device     Boot  Start       End   Sectors   Size Id Type
/dev/sda1  *        32      8191      8160     4M  4 FAT16 <32M
/dev/sda2       262144 976773119 976510976 465.7G 83 Linux

Info de fdisk -l ./seagate.st3500320ns.sn-9qm5zhhr.500gb.465gib.img

Disk ./Seagate.ST3500320NS.SN-9QM5ZHHR.500GB.465GiB.img: 464 GiB, 498226311168 bytes, 973098264 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000794ac

Device                                              Boot  Start       End   Sectors   Size Id Type
./Seagate.ST3500320NS.SN-9QM5ZHHR.500GB.465GiB.img1 *        32      8191      8160     4M  4 FAT16 <32M
./Seagate.ST3500320NS.SN-9QM5ZHHR.500GB.465GiB.img2      262144 976773119 976510976 465.7G 83 Linux

J'ai fait un appareil de boucle pour la partition en utilisant:

losetup --offset $((512*262144)) /dev/loop2 ./Seagate.ST3500320NS.SN-9QM5ZHHR.500GB.465GiB.img

De blockdev --getbsz/dev/loop2

4096

De blockdev --getsz/dev/loop2

972836120

De buche2fs/dev/loop2:

Filesystem UUID:          f68ccb5a-bcfa-4e8a-8876-45adaa6e6b85
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean with errors
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              30523392
Block count:              122063840
Reserved block count:     6103192
Free blocks:              96939245
Free inodes:              30462657
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      994
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Filesystem created:       Sat Apr 26 21:28:22 2014
Last mount time:          Wed Jan 16 15:59:22 2019
Last write time:          Thu Jan 17 18:16:50 2019
Mount count:              17
Maximum mount count:      -1
Last checked:             Sat Apr 26 21:28:22 2014
Check interval:           0 (<none>)
Lifetime writes:          10 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      162d0daa-7968-48f9-8370-f095c9e19f58
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
Journal size:             128M
Journal length:           32768
Journal sequence:         0x000059bd
Journal start:            0

Suivi de beaucoup de:

Group 0: (Blocks 0-32767)
  Primary superblock at 0, Group descriptors at 1-30
  Reserved GDT blocks at 31-1024
  Block bitmap at 1025 (+1025)
  Inode bitmap at 1026 (+1026)
  Inode table at 1027-1538 (+1027)
  4 free blocks, 8179 free inodes, 2 directories
...
(SKIPPING TO END)
...
Group 3725: (Blocks 122060800-122063839)
  Block bitmap at 122060800 (+0)
  Inode bitmap at 122060801 (+1)
  Inode table at 122060802-122061313 (+2)
  0 free blocks, 8192 free inodes, 0 directories

Fini avec:

dumpe2fs: /dev/loop2: error reading bitmaps: Can't read a block bitmap

Maintenant, je peux monter/dev/sda2 juste bien et lire les fichiers que je ne peux cependant pas monter/dev/loop2

mount -t ext3 /dev/loop2 ./DriveImage/
mount: wrong fs type, bad option, bad superblock on /dev/loop2,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

Je reçois la même erreur d'essayer de monter directement à partir de l'image en utilisant:

mount -o loop,offset=$((512*262144)) ./Seagate.ST3500320NS.SN-9QM5ZHHR.500GB.465GiB.img ./DriveImage

Maintenant, selon LUBE2FS, le superbloc a raison!
[.____] et selon les mathématiques:

 Superblock says:
 122063840
 Filesystem says:
 121604515

 block size:
 4096

 Math: Sectors * Sector Size = Size / Block Size = Blocks
 Partition 1: 
 8160 * 512 = 4177920 / 4096 = 1020
 Partition 2:
 [From fdisk]
 976510976 * 512 = 499973619712 / 4096 = 122063872
 [From blockdev with /dev/loop2]
 972836120 * 512 = 498092093440 / 4096 = 121604515

fdisk signale assez près des blocs de droite ... (seulement 32 autres blocs) mais dans mon livre, FSCK obtient son bloc de blocs de la même manière BlockDev le (ou l'utilise), mais selon LOPE2FS et vérifiant la table de partition réelle , le superbloc est réellement juste et est donc la table de partition.

Dans la peur de perdre les données d'origine sur le disque (10 ans de photos de famille/vidéos et de fichiers importants), je ne suis pas disposé à exécuter ce truc sur le disque d'origine. J'ai donc fait une copie du disque sur cette image, alors, au cas où je baiser quelque chose, j'ai également fait une copie de l'image. (Ne t'inquiète pas, j'ai un espace disque pour cela).

Qu'est-ce que je fais mal ici? Et comment puis-je résoudre ce problème?

Remarque: En raison de l'ancien lecteur qui commence à échouer (supposé, j'ai eu des problèmes), c'est pourquoi je le fais.
[.____] aussi, pour une raison quelconque, le lecteur a perdu sa table de partition et je devais utiliser TestDisk pour la récupérer. Après avoir été récupéré, j'ai pu monter la grande partition et lire toutes mes données.
[.____] J'ai donc supposé que l'un ou l'autre TestDisk l'a eu à droite ou à assez tard, car il y a tout.

(Mise à jour n ° 1) Je devrais également noter que lorsque j'exécute FSCK sur le lecteur d'origine, je ne reçois pas cette erreur ...

fsck -nfv /dev/sda2
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

       60735 inodes used (0.20%, out of 30523392)
        1510 non-contiguous files (2.5%)
          49 non-contiguous directories (0.1%)
             # of inodes with ind/dind/tind blocks: 23779/2425/0
    25124595 blocks used (20.58%, out of 122063840)
           0 bad blocks
           1 large file

       56022 regular files
        4704 directories
           0 character device files
           0 block device files
           0 fifos
           0 links
           0 symbolic links (0 fast symbolic links)
           0 sockets
------------
       60726 files

(Mise à jour n ° 2) J'ai découvert que le fichier image n'est pas identique à celui du lecteur, le fichier image est plus petit.
Taille du lecteur: 500107862016 (eu une erreur ici, je n'ai que la taille de la deuxième partition, mise à jour pour corriger les informations)
Taille de l'image: 498226311168
[.____] Le fichier image manque 1881550848 octets, plus de 1,88 Go de données. (Cela corrigé également)
[.____] Semble que DD n'a pas tout compris, et que je serais peut-être raison pour que le lecteur a des problèmes, est-il un moyen de faire des erreurs de lecture dd remplir avec un espace vide afin que je puisse avoir une taille correspondante?

Je cours à travers FSCK sur le périphérique de boucle pour voir ce que ça fait, je suppose que si je le gâche, je vais simplement restaurer l'image du dos.

Une autre note importante: il s'agit d'un système de serveur sans tête, aucune interface graphique, juste cli.

2
AJ Smith 'Smugger'

Erreurs d'une mauvaise image disque

On dirait que vous voyez des erreurs dans l'image causée par un lecteur d'échec. J'utiliserais gddrescue à la place, il tente de gérer les erreurs de lecture.

Manuel de GDDRESCUE est informatif, c'est la section 10 un petit tutoriel avec des exemples Démarre avec

Exemple 1: sauvetage entièrement automatique d'un disque entier avec deux partitions ext2 dans/dev/sda à/dev/dev/sdb.
[.____.

ddrescue -f -r3 /dev/sda /dev/sdb mapfile
fdisk /dev/sdb
e2fsck -v -f /dev/sdb1
e2fsck -v -f /dev/sdb2

Au lieu de sauver directement à un périphérique (/ dev/SDB), à l'aide d'un fichier fonctionne. Et au lieu de commencer avec -r 3 Pour réessayer les secteurs incorrects 3 fois, peut-être utiliser la valeur par défaut (0) et -n/--no-scrape Pour "sauter la phase de raclage" pour obtenir autant que vous pouvez rapidement en premier.

Il y a aussi un package DDRESCUEView qui donne une vue graphique d'un fichier de carte GDDRESCUE, qui pourrait être intéressant:

enter image description here

Et la surveillance Syslog ou DMESG aurait dû montrer des erreurs de lecture plus tôt, je les surveillerais tout en utilisant ce lecteur.

Y a-t-il de nombreux fichiers importants à sauvegarder?

Si les fichiers sont toujours lisibles, et surtout si les fichiers importants que vous souhaitez sauvegarder sont beaucoup plus petits que l'ensemble du lecteur, copiez simplement ces fichiers et oubliez l'image du lecteur entier. Les systèmes d'exploitation sont faciles à réinstaller.

Montage des images de disque complet

on dirait quelosetup -P crée des dispositifs de boucle de partition appropriés eux-mêmes, ou peut-être partprobe ou gnome-disk-image-mounter, en plus de kpartx.

1
Xen2050