EXT4-fsの不正なジオメトリを修正(ブロックカウントがデバイスのサイズを超える)


23

FAT32パーティションとEXT4パーティションを持つマイクロSDカードがあります。EXT4パーティションはマウントされなくなります。dmesgは次のエラーを表示します。

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

私はグーグルで調べましたが、それでも問題がどこにあるのか(パーティションテーブルのどこ?ファイルシステム?)も、その修正方法も完全には理解していません。私はいくつかの解決策を試みました:

  • testdiskを使用してパーティションテーブルを書き込む
  • fsckを使用して、バックアップからスーパーブロックを復元します(すべて試してみました)。例えばfsck.ext4 -b 163840 -B 4096 /dev/sdb2
  • fsck -cc不良ブロックの確認に使用
  • resize2fsを使用してパーティションのサイズを設定します。出力:The combination of flex_bg and !resize_inode features is not supported by resize2fs.

fsckを実行すると、多数のエラー(以下の完全な出力)が表示されますが、修正すると主張しています。ただし、もう一度実行すると、毎回同じエラーが繰り返し表示されます。

不良ジオメトリの問題を修正して、ファイルシステムを再びマウント可能にするにはどうすればよいですか?どうしてそうなった?

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 出力:

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

fdisk -lこのカードの出力を含めることができますか?
ティモ14

@Timo申し訳ありませんが、回答するのを忘れていました。fdiskの出力で質問を更新しました
Michael

回答:


9

SDが元のブロックよりも数ブロック少ないSDカードイメージを切り捨てた後の同じ問題。ドライブをfdisk(上記参照)で再パーティションしましたが、「スーパーブロックのサイズはパーティションの物理サイズと異なります」というメッセージが残りました。ここで解決策を見つけました:http : //www.linuxquestions.org/questions/linux-hardware-18/size-in-superblock-is-different-from-the-physical-size-of-the-partition-298175/

したがって、マウントされていないパーティションで: e2fsck -f /dev/XXX resize2fs /dev/XXX


3

ファイルシステムはディスクのジオメトリを気にしません。これはパーティションテーブルの問題です。

パーティションテーブルのダンプを作成し、結果を確認して、このダンプでパーティションテーブルを上書きすることをお勧めします。これでCHSエントリが修正されます。

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

1
これを知らなかった場合、これらのコマンドを実行するにはrootになる必要があります。
slm

1
ご回答有難うございます。testdiskができなかったパーティションテーブルを書き込むためにsfdiskが動作する理由はありますか?試してみたところ、sfdiskはパーティションテーブルの書き込みに成功したと主張していますが、それでもジオメトリエラーが発生します。の出力sfdisk -dは、書き込み前後で同じです。私は何かを見逃しましたか?他に考えはありますか?
マイケル14

@Michael実のところ、私はそのことに気づかず、何も知らなかったtestdisk。インターネットから「失われたパーティションをチェックして回復する」と言われます。パーティションが失われた場合のみ、既存のパーティションを修復する必要があるのはなぜですか?
ホークレイジング

@HaukeLagingパーティションテーブルも書き換えたと言ったので、たった今尋ねました。とにかく、sfdiskの結果について何かアイデアはありますか?
マイケル14

3

私はほとんど同じ問題を抱えていました、マウントしようとすると:

$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

成功せずに、上記のパートテーブルの書き直しを試みました。

それで、ついにfdiskでドライブを再パーティションすることで問題を解決することができました。2番目のパーティションを削除して、再作成しました。

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

完璧に機能しました。これはばかげていますが、ちょっとです。
mgjk

私のために働かなかった。
デビッドケネディ

2

イメージファイルにも同じ問題がありました。つまり、パーティションテーブルがないため、ファイルシステム自体に問題があります。resize2fs画像ファイルを修正するだけで修正できました。


事前にフォーマットされたeMMCカードで問題が発生しました。失敗したext4パーティションのresize2fsが問題を解決しました。
ピーターグローア

0

他のソリューションを見つけることができなかったため、EXT4パーティションを再フォーマットしました。これにより、不良なジオメトリエラーがなくなりました。理由を知っていたのに。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.