Correzione della geometria errata di EXT4-fs (il conteggio dei blocchi supera le dimensioni del dispositivo)


23

Ho una scheda micro SD che ha una partizione FAT32 e una partizione EXT4. La partizione EXT4 non verrà più montata. dmesg mostra il seguente errore:

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

Ho cercato su Google, ma ancora non capisco perfettamente dove sia il problema (nella tabella delle partizioni? Il filesystem?) Né come risolverlo. Ho tentato una serie di soluzioni:

  • Utilizzo di testdisk per scrivere la tabella delle partizioni
  • Uso di fsck per ripristinare il superblocco dai backup (li ho provati tutti). per esempiofsck.ext4 -b 163840 -B 4096 /dev/sdb2
  • Usando fsck -ccper verificare la presenza di blocchi danneggiati
  • Utilizzo di resize2fs per impostare la dimensione della partizione. Produzione:The combination of flex_bg and !resize_inode features is not supported by resize2fs.

Quando eseguo fsck, viene fuori un sacco di errori (output completo di seguito), che sostiene di correggere. Se lo eseguo di nuovo, tuttavia, mostra sempre gli stessi errori.

Come posso risolvere il problema della geometria errata e rendere di nuovo montabile il mio filesystem? Come è successo?

uscita 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 produzione:

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

Puoi includere l'output di fdisk -lper questa scheda?
Timo,

@Timo scusa, ho dimenticato di risponderti. Ho aggiornato la domanda con l'output di fdisk
Michael,

Risposte:


9

Stesso problema dopo aver troncato un'immagine della scheda SD in cui la SD aveva pochi blocchi in meno rispetto all'originale. Ripartizionato il disco con fdisk (vedi sopra), ma è rimasto il messaggio "La dimensione nel superblocco è diversa dalla dimensione fisica della partizione". Ho trovato la soluzione qui: http://www.linuxquestions.org/questions/linux-hardware-18/size-in-superblock-is-different-from-the-physical-size-of-the-partition-298175/

Quindi, sulla partizione non montata: e2fsck -f /dev/XXX resize2fs /dev/XXX


3

Il filesystem non si preoccupa della geometria del disco; questo è un problema con la tabella delle partizioni.

Suggerisco di creare un dump della tabella delle partizioni, controllare il risultato e sovrascrivere la tabella delle partizioni con questo dump. Ciò dovrebbe correggere le voci CHS.

sfdisk -d /dev/sdx >sdx.txt
cat sdx.txt
sfdisk /dev/sdx <sdx.txt

1
Dovrai essere root per eseguire questi comandi, nel caso non lo sapessi.
slm

1
Grazie per la tua risposta. C'è un motivo per cui sfdisk dovrebbe funzionare per scrivere la tabella delle partizioni dove testdisk non ha funzionato? L'ho provato e sfdisk afferma che ha scritto correttamente la tabella delle partizioni, ma sto ancora ottenendo il cattivo errore di geometria. L'output di sfdisk -dè lo stesso prima e dopo la scrittura. Ho perso qualcosa? Qualche altro pensiero?
Michael,

@Michael A dire il vero: non me ne sono accorto né sapevo cosa testdiskfosse. Internet mi dice: "controlla e recupera le partizioni perse". Se questo è solo per le partizioni perse, perché dovrebbe riparare le partizioni esistenti?
Hauke ​​Laging,

@HaukeLaging Ho appena chiesto perché ha detto che ha riscritto anche la tabella delle partizioni. Comunque, qualche idea sui risultati di sfdisk?
Michael,

3

Ho praticamente avuto lo stesso problema, provando a montare mi ha dato:

$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

Ho provato la summenzionata riscrittura del tavolo parziale, senza successo.

Quindi, finalmente sono stato in grado di risolvere il problema partizionando nuovamente il mio disco tramite fdisk. Ho cancellato la mia seconda partizione e l'ho ricreata di nuovo.

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

ha funzionato perfettamente, il che è ridicolo, ma ehi.
mgjk,

Non ha funzionato per me.
David Kennedy,

2

Ho avuto lo stesso problema con un file di immagine, cioè senza alcuna tabella delle partizioni, quindi il problema è all'interno del file system stesso. Sono stato in grado di risolverlo semplicemente facendo un resize2fsfile di immagine.


Ho riscontrato il problema su una scheda eMMC preformattata. resize2fs sulla partizione ext4 in errore ha risolto il problema.
Peter Gloor,

0

Dato che non sono riuscito a trovare un'altra soluzione, ho riformattato la partizione EXT4. Ciò ha eliminato il cattivo errore della geometria. Vorrei sapere perché.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.