Repara la geometría incorrecta de EXT4-fs (el recuento de bloques excede el tamaño del dispositivo)

23

Tengo una tarjeta micro SD que tiene una partición FAT32 y una partición EXT4. La partición EXT4 ya no se montará. dmesg muestra el siguiente error:

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

Busqué en Google, pero aún no entiendo completamente dónde está el problema (en la tabla de particiones? El sistema de archivos?) Ni cómo solucionarlo. He intentado una serie de soluciones:

  • Usando testdisk para escribir la tabla de particiones
  • Usando fsck para restaurar el superbloque de las copias de seguridad (las he probado todas). p.ejfsck.ext4 -b 163840 -B 4096 /dev/sdb2
  • Utilizando fsck -ccpara verificar si hay bloques defectuosos
  • Usando resize2fs para establecer el tamaño de la partición. Salida:The combination of flex_bg and !resize_inode features is not supported by resize2fs.

Cuando ejecuto fsck, aparece un montón de errores (salida completa a continuación), que dice corregir. Sin embargo, si lo vuelvo a ejecutar, muestra los mismos errores una y otra vez, siempre.

¿Cómo puedo solucionar el problema de geometría incorrecta y hacer que mi sistema de archivos se pueda volver a montar? ¿Cómo pasó esto?

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

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
Miguel
fuente
¿Puedes incluir la salida de fdisk -lesta tarjeta?
Timo
@Timo lo siento, olvidé responderte. He actualizado la pregunta con la salida de fdisk
Michael

Respuestas:

9

El mismo problema después de truncar una imagen de tarjeta SD donde la SD tenía unos pocos bloques menos que la original. Se particionó la unidad con fdisk (ver arriba), pero el mensaje "El tamaño en el superbloque es diferente del tamaño físico de la partición" permaneció. Encontré la solución aquí: http://www.linuxquestions.org/questions/linux-hardware-18/size-in-superblock-is-different-from-the-physical-size-of-the-partition-298175/

Entonces, en la partición desmontada: e2fsck -f /dev/XXX resize2fs /dev/XXX

Henk
fuente
3

El sistema de archivos no se preocupa por la geometría del disco; Este es un problema de la tabla de particiones.

Le sugiero que realice un volcado de la tabla de particiones, verifique el resultado y sobrescriba la tabla de particiones con este volcado. Eso debería corregir las entradas de CHS.

sfdisk -d /dev/sdx >sdx.txt
cat sdx.txt
sfdisk /dev/sdx <sdx.txt
Hauke ​​Laging
fuente
1
Tendrá que ser root para ejecutar estos comandos, en caso de que no lo supiera.
slm
1
Gracias por tu respuesta. ¿Hay alguna razón por la que sfdisk debería funcionar para escribir la tabla de particiones donde testdisk no lo hizo? Lo probé y sfdisk afirma que escribió con éxito la tabla de particiones, pero todavía recibo el error de geometría incorrecta. La salida de sfdisk -des la misma antes y después de escribir. ¿Me he perdido algo? ¿Alguna otra idea?
Michael
@Michael Para decir la verdad: ni me di cuenta de eso ni supe qué testdiskes. Internet me dice: "comprueba y recupera particiones perdidas". Si eso es solo para particiones perdidas, ¿por qué debería reparar las particiones existentes?
Hauke ​​Laging
@HaukeLaging Acabo de preguntar porque dice que también reescribió la tabla de particiones. De todos modos, ¿alguna idea sobre los resultados de sfdisk?
Michael
3

Casi tuve el mismo problema, tratando de montar dio:

$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

Intenté la reescritura de la tabla de partes mencionada anteriormente, sin éxito.

Entonces, finalmente pude resolver el problema volviendo a particionar mi disco a través de fdisk. Eliminé mi segunda partición y la volví a crear.

$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.
Franco
fuente
funcionó perfectamente, lo cual es ridículo, pero bueno.
mgjk
No funciono para mi.
David Kennedy
2

Tuve el mismo problema con un archivo de imagen, es decir, sin ninguna tabla de partición, por lo que el problema está dentro del sistema de archivos. Pude solucionarlo simplemente haciendo un resize2fsen el archivo de imagen.

Asem
fuente
Tuve el problema en una tarjeta eMMC preformateada. resize2fs en la partición ext4 que falla resolvió el problema.
Peter Gloor
0

Como no pude encontrar ninguna otra solución, volví a formatear la partición EXT4. Esto eliminó el error de geometría incorrecta. Ojalá supiera por qué.

Miguel
fuente