Исправлена ​​неправильная геометрия EXT4-fs (количество блоков превышает размер устройства)

23

У меня есть микро SD-карта, которая имеет раздел FAT32 и раздел EXT4. Раздел 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для этой карты?
Тимо
@ Тимо, извини, забыл тебе ответить. Я обновил вопрос с выводом 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

Henk
источник
3

Файловая система не заботится о геометрии диска; это проблема таблицы разделов.

Я предлагаю вам сделать дамп таблицы разделов, проверить результат и перезаписать таблицу разделов этим дампом. Это должно исправить записи CHS.

sfdisk -d /dev/sdx >sdx.txt
cat sdx.txt
sfdisk /dev/sdx <sdx.txt
Хауке Лагинг
источник
1
Вам нужно быть пользователем root для запуска этих команд, если вы этого не знали.
SLM
1
Спасибо за Ваш ответ. Есть ли причина, по которой sfdisk должен работать для записи таблицы разделов, где testdisk не работал? Я попробовал это, и sfdisk утверждает, что он успешно написал таблицу разделов, но я все еще получаю ошибку геометрии. Вывод sfdisk -dодинаков до и после записи. Я что-то пропустил? Есть еще мысли?
Майкл
@ Майкл Честно говоря: я этого не заметил и не знал, что это testdiskтакое. Интернет говорит мне: «проверяет и восстанавливает потерянные разделы». Если это только для потерянных разделов, почему это должно восстановить существующие разделы?
Хауке Лагинг
@HaukeLaging Я просто спросил, потому что он сказал, что переписал таблицу разделов тоже. Во всяком случае, есть идеи о результатах sfdisk?
Майкл
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. Я удалил свой второй раздел и заново создал его.

$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. Resize2fs на неисправном разделе ext4 решил проблему.
Питер Глур
0

Поскольку я не смог найти никакого другого решения, я переформатировал раздел EXT4. Это устранило ошибку геометрии. Хотел бы я знать почему.

Майкл
источник