Napraw złą geometrię EXT4-fs (liczba bloków przekracza rozmiar urządzenia)


23

Mam kartę micro SD, która ma partycję FAT32 i partycję EXT4. Partycja EXT4 nie będzie już montowana. dmesg wyświetla następujący błąd:

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

Poszukałem Google, ale wciąż nie rozumiem w pełni, gdzie jest problem (w tablicy partycji? System plików?) Ani jak go naprawić. Próbowałem szeregu rozwiązań:

  • Za pomocą testdisk zapisujemy tablicę partycji
  • Używanie fsck do przywracania superbloku z kopii zapasowych (próbowałem wszystkich). na przykładfsck.ext4 -b 163840 -B 4096 /dev/sdb2
  • Używanie fsck -ccdo sprawdzania złych bloków
  • Użycie resize2fs do ustawienia rozmiaru partycji. Wydajność:The combination of flex_bg and !resize_inode features is not supported by resize2fs.

Kiedy uruchamiam fsck, pojawia się kilka błędów (pełne dane wyjściowe poniżej), które rzekomo naprawia. Jeśli jednak uruchomię go ponownie, za każdym razem będą wyświetlać te same błędy.

Jak mogę rozwiązać problem złej geometrii i sprawić, aby mój system plików mógł zostać ponownie zamontowany? Jak to się stało?

wyjście 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 wydajność:

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

Czy możesz dołączyć dane wyjściowe fdisk -ldla tej karty?
Timo

@ Timo przepraszam, zapomniałem ci odpowiedzieć. Zaktualizowałem pytanie o dane wyjściowe fdisk
Michael

Odpowiedzi:


9

Ten sam problem po obcięciu obrazu karty SD, gdzie SD miał kilka bloków mniej niż oryginał. Ponownie utworzono partycję dysku za pomocą programu fdisk (patrz wyżej), ale komunikat „Rozmiar w superbloku różni się od fizycznego rozmiaru partycji”. Znalazłem rozwiązanie tutaj: http://www.linuxquestions.org/questions/linux-hardware-18/size-in-superblock-is-different-from-the-physical-size-of-the-partition-298175/

Tak więc na odmontowanej partycji: e2fsck -f /dev/XXX resize2fs /dev/XXX


3

System plików nie dba o geometrię dysku; jest to problem z tablicą partycji.

Sugeruję zrobienie zrzutu tabeli partycji, sprawdzenie wyniku i zastąpienie tabeli partycji tym zrzutem. To powinno poprawić wpisy CHS.

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

1
Musisz być rootem, aby uruchomić te polecenia, na wypadek, gdybyś tego nie wiedział.
slm

1
Dzięki za odpowiedź. Czy istnieje powód, dla którego sfdisk powinien działać, aby zapisać tablicę partycji, na której nie działa dysk testowy? Próbowałem i sfdisk twierdzi, że pomyślnie napisał tablicę partycji, ale wciąż pojawia się błąd złej geometrii. Wyjście sfdisk -djest takie samo przed i po napisaniu. Czy coś przeoczyłem? Jakieś inne myśli?
Michael

@Michael Prawdę mówiąc: ani tego nie zauważyłem, ani nie wiedziałem, co testdiskjest. Internet mówi mi: „sprawdza i odzyskuje utracone partycje”. Jeśli dotyczy to tylko utraconych partycji, dlaczego miałoby to naprawić istniejące partycje?
Hauke ​​Laging

@ HaukeLaging Właśnie zapytałem, ponieważ powiedział, że przepisał również tablicę partycji. W każdym razie, jakiś pomysł na temat wyników sfdisk?
Michael

3

Miałem prawie ten sam problem, próba zamontowania dała:

$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

Próbowałem wyżej wspomnianego przepisywania tabeli częściowej, ale bez powodzenia.

W końcu udało mi się rozwiązać problem, ponownie partycjonując dysk za pomocą fdisk. Usunąłem drugą partycję i ponownie ją utworzyłem.

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

działało idealnie, co jest śmieszne, ale hej.
mgjk

Nie działało dla mnie.
David Kennedy,

2

Miałem ten sam problem z plikiem obrazu, tzn. Bez żadnej tablicy partycji, więc problem dotyczy samego systemu plików. Byłem w stanie to naprawić, po prostu wykonując resize2fsplik obrazu.


Miałem problem na wstępnie sformatowanej karcie eMMC. resize2fs na uszkodzonej partycji ext4 rozwiązało problem.
Peter Gloor

0

Ponieważ nie mogłem znaleźć innego rozwiązania, sformatowałem partycję EXT4. To wyeliminowało błąd złej geometrii. Chciałbym wiedzieć, dlaczego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.