Correction d'une mauvaise géométrie EXT4-fs (le nombre de blocs dépasse la taille de l'appareil)

23

J'ai une carte micro SD qui a une partition FAT32 et une partition EXT4. La partition EXT4 ne sera plus montée. dmesg affiche l'erreur suivante:

EXT4-fs (sdb2): bad geometry: block count 2199023779840 exceeds size of device (524288 blocks)

J'ai googlé, mais je ne comprends toujours pas où est le problème (dans la table de partition? Le système de fichiers?) Ni comment le résoudre. J'ai tenté plusieurs solutions:

  • Utilisation de testdisk pour écrire la table de partition
  • Utilisation de fsck pour restaurer le superbloc à partir des sauvegardes (je les ai toutes essayées). par exemplefsck.ext4 -b 163840 -B 4096 /dev/sdb2
  • Utilisation fsck -ccpour vérifier les blocs défectueux
  • Utilisation de resize2fs pour définir la taille de la partition. Sortie:The combination of flex_bg and !resize_inode features is not supported by resize2fs.

Lorsque j'exécute fsck, il arrive avec un tas d'erreurs (sortie complète ci-dessous), qu'il prétend corriger. Si je l'exécute à nouveau, cependant, il montre les mêmes erreurs à chaque fois.

Comment puis-je résoudre le problème de mauvaise géométrie et rendre mon système de fichiers montable à nouveau? Comment est-ce arrivé?

sortie fsck:

e2fsck 1.42 (29-Nov-2011)
One or more block group descriptor checksums are invalid.  Fix<y>? yes

Group descriptor 0 checksum is invalid.  FIXED.
Group descriptor 1 checksum is invalid.  FIXED.
Group descriptor 2 checksum is invalid.  FIXED.
Group descriptor 3 checksum is invalid.  FIXED.
Group descriptor 4 checksum is invalid.  FIXED.
Group descriptor 5 checksum is invalid.  FIXED.
Group descriptor 6 checksum is invalid.  FIXED.
Group descriptor 7 checksum is invalid.  FIXED.
Group descriptor 8 checksum is invalid.  FIXED.
Group descriptor 9 checksum is invalid.  FIXED.
Group descriptor 10 checksum is invalid.  FIXED.
Group descriptor 11 checksum is invalid.  FIXED.
Group descriptor 12 checksum is invalid.  FIXED.
Group descriptor 13 checksum is invalid.  FIXED.
Group descriptor 14 checksum is invalid.  FIXED.
Group descriptor 15 checksum is invalid.  FIXED.
/dev/sdb2 contains a file system with errors, check forced.
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
Free blocks count wrong for group #0 (24465, counted=24466).
Fix<y>? yes

Free blocks count wrong for group #2 (4788, counted=5812).
Fix<y>? yes

Free blocks count wrong for group #3 (8710, counted=8881).
Fix<y>? yes

Free blocks count wrong for group #8 (5682, counted=22066).
Fix<y>? yes

Free blocks count wrong (299742, counted=317322).
Fix<y>? yes

Inode bitmap differences:  -(8193--8194) -8197 -8208 -(8225--8226) -8229 -(8240--8241) -(8257--8258) -8261 -8272 -8274 -(8289--8290) -8293 -(8304--8306) -(8321--8322) -8325 -8336 -8339 -16387 -16389 -16400 -16419 -16421 -(16432--16433) -16451 -16453 -16464 -16466 -16483 -16485 -(16496--16498) -16515 -16517 -16528 -16531 -24577 -24579 -24581 -24592 -24609 -24611 -24613 -(24624--24625) -24641 -24643 -24645 -24656 -24658 -24673 -24675 -24677 -(24688--24690) -24705 -24707 -24709 -24720 -24723 -(32770--32771) -32773 -32784 -(32802--32803) -32805 -(32816--32817) -(32834--32835) -32837 -32848 -32850 -(32866--32867) -32869 -(32880--32882) -(32898--32899) -32901 -32912 -32915 -(40961--40963) -40965 -40976 -(40993--40995) -40997 -(41008--41009) -(41025--41027) -41029 -41040 -41042 -(41057--41059) -41061 -(41072--41074) -(41089--41091) -41093 -41104 -41107 -(49156--49157) -49168 -(49188--49189) -(49200--49201) -(49220--49221) -49232 -49234 -(49252--49253) -(49264--49266) -(49284--49285) -49296 -49299 -57345 -(57348--57349) -57360 -57377 -(57380--57381) -(57392--57393) -57409 -(57412--57413) -57424 -57426 -57441 -(57444--57445) -(57456--57458) -57473 -(57476--57477) -57488 -57491 -65538 -(65540--65541) -65552 -65570 -(65572--65573) -(65584--65585) -65602 -(65604--65605) -65616 -65618 -65634 -(65636--65637) -(65648--65650) -65666 -(65668--65669) -65680 -65683 -(73729--73730) -(73732--73733) -73744 -(73761--73762) -(73764--73765) -(73776--73777) -(73793--73794) -(73796--73797) -73808 -73810 -(73825--73826) -(73828--73829) -(73840--73842) -(73857--73858) -(73860--73861) -73872 -73875 -(81923--81925) -81936 -(81955--81957) -(81968--81969) -(81987--81989) -82000 -82002 -(82019--82021) -(82032--82034) -(82051--82053) -82064 -82067 -90113 -(90115--90117) -90128 -90145 -(90147--90149) -(90160--90161) -90177 -(90179--90181) -90192 -90194 -90209 -(90211--90213) -(90224--90226) -90241 -(90243--90245) -90256 -90259 -(98306--98309) -98320 -(98338--98341) -(98352--98353) -(98370--98373) -98384 -98386 -(98402--98405) -(98416--98418) -(98434--98437) -98448 -98451 -(106497--106501) -106512 -(106529--106533) -(106544--106545) -(106561--106565) -106576 -106578 -(106593--106597) -(106608--106610) -(106625--106629) -106640 -106643 -114694 -114704 -114726 -(114736--114737) -114758 -114768 -114770 -114790 -(114800--114802) -114822 -114832 -114835 -122881 -122886 -122896 -122913 -122918 -(122928--122929) -122945 -122950 -122960 -122962 -122977 -122982 -(122992--122994) -123009 -123014 -123024 -123027
Fix<y>? yes

Free inodes count wrong for group #0 (7803, counted=7804).
Fix<y>? yes

Free inodes count wrong (130683, counted=130684).
Fix<y>? yes


/dev/sdb2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdb2: 388/131072 files (22.7% non-contiguous), 206966/524288 blocks

fdisk -l sortie:

Disk /dev/sdb: 16.0 GB, 16012804096 bytes
64 heads, 32 sectors/track, 15271 cylinders, total 31275008 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
Disk identifier: 0x0005ce93

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048    27080703    13539328    c  W95 FAT32 (LBA)
/dev/sdb2        27080704    31275007     2097152   83  Linux
Michael
la source
Pouvez-vous inclure la sortie de fdisk -lcette carte?
Timo
@Timo désolé, j'ai oublié de vous répondre. J'ai mis à jour la question avec une sortie fdisk
Michael

Réponses:

9

Même problème après avoir tronqué une image de la carte SD où la SD avait quelques blocs de moins que l'original. Le lecteur a été repartitionné avec fdisk (voir ci-dessus), mais le message "La taille dans le superbloc est différente de la taille physique de la partition" est resté. Trouvé la solution ici: http://www.linuxquestions.org/questions/linux-hardware-18/size-in-superblock-is-different-from-the-physical-size-of-the-partition-298175/

Donc, sur la partition non montée: e2fsck -f /dev/XXX resize2fs /dev/XXX

Henk
la source
3

Le système de fichiers ne se soucie pas de la géométrie du disque; il s'agit d'un problème de table de partition.

Je vous suggère de faire un vidage de la table de partition, de vérifier le résultat et d'écraser la table de partition avec ce vidage. Cela devrait corriger les entrées CHS.

sfdisk -d /dev/sdx >sdx.txt
cat sdx.txt
sfdisk /dev/sdx <sdx.txt
Hauke ​​Laging
la source
1
Vous devrez être root pour exécuter ces commandes, au cas où vous ne le sauriez pas.
slm
1
Merci pour votre réponse. Y a-t-il une raison pour laquelle sfdisk devrait fonctionner pour écrire la table de partition là où testdisk ne l'a pas fait? Je l'ai essayé et sfdisk prétend qu'il a réussi à écrire la table de partition, mais je reçois toujours la mauvaise erreur de géométrie. La sortie de sfdisk -dest la même avant et après l'écriture. Ai-je raté quelque chose? D'autres réflexions?
Michael
@Michael Pour dire la vérité: je n'ai ni remarqué ni su ce que testdiskc'est. Internet me dit: "vérifie et récupère les partitions perdues". Si c'est uniquement pour les partitions perdues, pourquoi devrait-il réparer les partitions existantes?
Hauke ​​Laging
@HaukeLaging Je viens de demander, car il a dit qu'il a également réécrit la table de partition. Quoi qu'il en soit, une idée des résultats de sfdisk?
Michael
3

J'ai eu à peu près le même problème, essayer de monter a donné:

$sudo mount /dev/sda2 ./oldfs/ 
mount: wrong fs type, bad option, bad superblock on /dev/sda2,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

J'ai essayé la réécriture de la table des pièces mentionnée ci-dessus, sans succès.

J'ai finalement pu résoudre le problème en re-partitionnant mon disque via fdisk. J'ai supprimé ma 2ème partition et l'ai recréée à nouveau.

$fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 31.4 GB, 31440502784 bytes
64 heads, 32 sectors/track, 29984 cylinders, total 61407232 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
Disk identifier: 0x000ecdca

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    20447231    10222592   83  Linux
/dev/sda2        20447232    61406208    20479488+  83  Linux

Command (m for help): d
Partition number (1-4): 2

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 
Using default value 2
First sector (20447232-61407231, default 20447232): 
Using default value 20447232
Last sector, +sectors or +size{K,M,G} (20447232-61407231, default 61407231): 
Using default value 61407231

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
Franc
la source
a parfaitement fonctionné, ce qui est ridicule, mais bon.
mgjk
Ça n'a pas marché pour moi.
David Kennedy
2

J'ai eu le même problème avec un fichier image, c'est-à-dire sans table de partition, donc le problème est dans le système de fichiers lui-même. J'ai pu le réparer en faisant juste un resize2fssur le fichier image.

Asem
la source
J'ai eu le problème sur une carte eMMC préformatée. resize2fs sur la partition ext4 défaillante a résolu le problème.
Peter Gloor
0

Comme je n'ai pu trouver aucune autre solution, j'ai reformaté la partition EXT4. Cela a éliminé la mauvaise erreur de géométrie. J'aimerais savoir pourquoi.

Michael
la source