Behebung der schlechten EXT4-f-Geometrie (Blockanzahl überschreitet Gerätegröße)

22

Ich habe eine Micro-SD-Karte, die eine FAT32-Partition und eine EXT4-Partition hat. Die EXT4-Partition wird nicht mehr bereitgestellt. dmesg zeigt den folgenden Fehler an:

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

Ich habe gegoogelt, verstehe aber immer noch nicht, wo das Problem liegt (in der Partitionstabelle? Im Dateisystem?) Und wie es behoben werden kann. Ich habe eine Reihe von Lösungen versucht:

  • Verwenden von testdisk zum Schreiben der Partitionstabelle
  • Verwenden von fsck, um den Superblock aus den Backups wiederherzustellen (ich habe alle ausprobiert). z.Bfsck.ext4 -b 163840 -B 4096 /dev/sdb2
  • Verwenden Sie fsck -cc, um nach fehlerhaften Blöcken zu suchen
  • Verwenden Sie resize2fs, um die Größe der Partition festzulegen. Ausgabe:The combination of flex_bg and !resize_inode features is not supported by resize2fs.

Wenn ich fsck ausführe, kommt es zu einer Reihe von Fehlern (vollständige Ausgabe unten), die angeblich behoben werden sollen. Wenn ich es jedoch erneut ausführe, werden jedes Mal wieder dieselben Fehler angezeigt.

Wie kann ich das fehlerhafte Geometrieproblem beheben und mein Dateisystem wieder bereitstellen? Wie ist es passiert?

fsck ausgabe:

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 Ausgabe:

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
quelle
Können Sie die Ausgabe von fdisk -lfür diese Karte einschließen ?
Timo
@Timo sorry, habe vergessen dir zu antworten. Ich habe die Frage mit der fdisk-Ausgabe aktualisiert
Michael

Antworten:

9

Dasselbe Problem nach dem Abschneiden eines SD-Karten-Image, bei dem die SD-Karte einige Blöcke weniger als das Original enthielt. Repartitionierte das Laufwerk mit fdisk (siehe oben), aber die Meldung "Größe im Superblock unterscheidet sich von der physischen Größe der Partition" blieb erhalten. Die Lösung wurde hier gefunden: http://www.linuxquestions.org/questions/linux-hardware-18/size-in-superblock-is-different-from-physical-size-of-the-partition-298175/

Also, auf der nicht gemounteten Partition: e2fsck -f /dev/XXX resize2fs /dev/XXX

Henk
quelle
3

Das Dateisystem kümmert sich nicht um die Plattengeometrie. Dies ist ein Partitionstabellenproblem.

Ich schlage vor, dass Sie einen Speicherauszug der Partitionstabelle erstellen, das Ergebnis überprüfen und die Partitionstabelle mit diesem Speicherauszug überschreiben. Das sollte die CHS-Einträge korrigieren.

sfdisk -d /dev/sdx >sdx.txt
cat sdx.txt
sfdisk /dev/sdx <sdx.txt
Hauke ​​Laging
quelle
1
Sie müssen root sein, um diese Befehle auszuführen, falls Sie dies nicht wussten.
SLM
1
Danke für deine Antwort. Gibt es einen Grund, warum sfdisk funktionieren sollte, um die Partitionstabelle zu schreiben, wo dies bei testdisk nicht der Fall war? Ich habe es versucht und sfdisk behauptet, die Partitionstabelle erfolgreich geschrieben zu haben, aber ich erhalte immer noch den schlechten Geometriefehler. Die Ausgabe von sfdisk -dist vor und nach dem Schreiben gleich. Habe ich etwas verpasst Irgendwelche anderen Gedanken?
Michael
@Michael Um die Wahrheit zu sagen: Ich habe das weder bemerkt, noch wusste ich, was es testdiskist. Das Internet sagt mir: "Überprüft und stellt verlorene Partitionen wieder her". Wenn dies nur für verlorene Partitionen gilt, warum sollte es vorhandene Partitionen reparieren?
Hauke ​​Laging
@HaukeLaging Ich habe nur gefragt, weil es gesagt hat, dass es auch die Partitionstabelle neu geschrieben hat. Wie auch immer, eine Idee über die Ergebnisse von sfdisk?
Michael
3

Ich hatte so ziemlich das gleiche Problem, als ich versuchte zu mounten:

$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

Ich habe das oben erwähnte Umschreiben der Teiltabelle ohne Erfolg versucht.

Endlich konnte ich das Problem lösen, indem ich mein Laufwerk über fdisk neu partitionierte. Ich habe meine 2. Partition gelöscht und neu erstellt.

$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.
Frank
quelle
hat perfekt funktioniert, was lächerlich ist, aber hey.
mgjk
Hat bei mir nicht funktioniert.
David Kennedy
2

Ich hatte das gleiche Problem mit einer Image-Datei, dh ohne Partitionstabelle, also liegt das Problem im Dateisystem selbst. Ich konnte das Problem beheben, indem ich nur resize2fsdie Image-Datei bearbeitet habe.

Asem
quelle
Ich hatte das Problem mit einer vorformatierten eMMC-Karte. resize2fs auf der fehlerhaften ext4-Partition hat das Problem behoben.
Peter Gloor
0

Da ich keine andere Lösung finden konnte, habe ich die EXT4-Partition neu formatiert. Dies beseitigte den schlechten Geometriefehler. Ich wünschte, ich wüsste warum.

Michael
quelle