5 votos

Cómo cambiar el tamaño de la partición /data F2FS

He limpiado todas las particiones de mi Motorola XT1040 con la recuperación de TWRP, y le he instalado Cyanogen 13.

Entonces me encuentro con problemas al tratar de activar la encriptación. El teléfono se reinicia y no cambia nada. Este es un problema conocido y se describe aquí .

Quería seguir un procedimiento descrito en esta respuesta (también compruebe la enlace externo en él, para referencia), que según se informa funciona. La explicación es:

Cuando se encripta el teléfono, la partición /dev/block/mmcblk0pXX - que originalmente contenía un sistema de archivos ext4 que se montaba como /data y /sdcard - ahora contiene un contenedor de cifrado. Esto será desencriptado al principio del proceso de arranque y devuelve una partición lógica /dev/block/dm-0 que luego contiene el sistema de archivos ext4 para /datos y /sdcard. El registro de arranque de TWRP muestra eso:

(...)

continúa con el montaje de la tarjeta SD y luego las otras particiones /boot, /recovery, /system, y así sucesivamente.

El lector atento podría haber reconocido que la extensión reportada es -16384 que es sospechosamente igual al 16KiB mencionado por diogenesj.

Así que a diferencia de las versiones anteriores de CM, "teléfono encriptado" ya no aborta dejando el teléfono sin encriptar pero utilizable, pero encriptado y por lo tanto corrompe la partición de datos de forma irreversible.

Para arreglar eso, el sistema de archivos en /dev/block/mmcblk0pXX necesita estar en por lo menos 16KiB más pequeño que la propia partición, que puede ser fácilmente hecho por resize2fs.

En resumen, la solución propuesta es redimensionar el /data partición, quitando algunos sectores de ella...

Importante es el número de bloques (...) De este número, restamos 8, lo que deja no 16KiB sino un espacio seguro de 32 KiB para el encabezamiento de la encriptación (no te importa 16KiB en un volumen de 12GB, en serio)

El número real de bloques que se retirarán de la /data la partición depende de la tamaño del sector para la partición. En el ejemplo anterior es 4KB, así que 8x4 =32 .

El problema con estas instrucciones es que sólo se aplican a la ext2 - ext4 sistemas de archivos; los comandos necesarios ( e2fsck , tune2fs , resize2fs ) no funcionará con el Sistema de archivos F2FS utilizado por el sistema operativo Cyanogen v13.

Lo hice. ls en el sbin y encontré el directorio fsck.f2fs que usé en lugar de los dos primeros comandos de las instrucciones. A continuación están los pasos de root ADB Shell (iniciada en TWRP):

~ # mount | grep data

/dev/block/platform/msm_sdcc.1/by-name/modem on /firmware type ext4 (rw,seclabel,relatime,data=ordered)
/dev/block/mmcblk0p36 on /data type f2fs (rw,seclabel,relatime,background_gc=on,user_xattr,inline_xattr,acl,inline_data,active_logs=6)
/dev/block/mmcblk0p36 on /sdcard type f2fs (rw,seclabel,relatime,background_gc=on,user_xattr,inline_xattr,acl,inline_data,active_logs=6)
/dev/block/mmcblk0p33 on /cache type ext4 (rw,seclabel,relatime,data=ordered)

~ # umount /dev/block/mmcblk0p36

~ # fsck.f2fs -f /dev/block/mmcblk0p36

Info: Force to fix corruption
Info: sector size = 512
Info: total sectors = 11583232 (in 512 bytes)
Info: MKFS version
  "Linux version 3.4.42-g5e5969d-dirty (luca@luca020400-arch) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #1 SMP PREEMPT Sun Feb 7 22:11:19 CET 2016"
Info: FSCK version
  from "Linux version 3.4.42-ge95f63d (inky@cyanogenmod) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #1 SMP PREEMPT Sun May 29 05:22:11 PDT 2016"
    to "Linux version 3.4.42-g5e5969d-dirty (luca@luca020400-arch) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #1 SMP PREEMPT Sun Feb 7 22:11:19 CET 2016"

[FSCK] Unreachable nat entries                        [Ok..] [0x0]
[FSCK] SIT valid block bitmap checking                [Ok..]
[FSCK] Hard link checking for regular file            [Ok..] [0x0]
[FSCK] valid_block_count matching with CP             [Ok..] [0x3c295]
[FSCK] valid_node_count matcing with CP (de lookup)   [Ok..] [0x1622]
[FSCK] valid_node_count matcing with CP (nat lookup)  [Ok..] [0x1622]
[FSCK] valid_inode_count matched with CP              [Ok..] [0x156b]
[FSCK] free segment_count matched with CP             [Ok..] [0x831]
[FSCK] next block offset is free                      [Ok..]
[FSCK] fixing SIT types
[FSCK] other corrupted bugs                           [Ok..]

Done.

Así que, mi /data la partición es mmcblk0p36 y tiene un tamaño de 11.583.232 sectores. Cada sector es de 512 bytes, por lo que debo reducir la partición a un tamaño final de (11 583 232 - 64) = 11 583 168 sectores para dejar 32KB sin localizar.

¿Pero cómo se puede hacer? Todo parece indicar que no es posible encoger una partición F2FS, pero no estoy seguro.

Editar: Parece que la reducción de volumen no está todavía soportada para el F2FS. Así que, asumiendo que hice una copia de seguridad completa del /data partición, ¿cuáles son los pasos para eliminarlo y recrearlo con un tamaño más pequeño?

1 votos

Recrear la partición con un tamaño más pequeño no solucionaría tu problema, si leo bien las comillas: Para arreglar eso, el sistema de archivos en /dev/block/mmcblk0pXX debe ser de al menos 16KiB más pequeño que la propia partición (el énfasis es mío). No tengo experiencia con el F2FS, pero ¿hay una mkf2fs o mkfs.f2fs ¿comando disponible? Podrías ejecutarlo con los parámetros adecuados para volver a crear el sistema de archivos con el tamaño correspondiente (lo que, por supuesto, destruiría todos los datos del sistema de archivos actual en esa partición, así que haz primero una copia de seguridad).

0 votos

@Izzy ¡Funcionó! Gracias amigo. Te acredité en Unix y Linux SE .

1 votos

Me alegro de leerlo. Y gracias por publicarlo como respuesta con detalles (upvoted ;)

4voto

Marc.2377 Puntos 11

A partir de hoy (30 de mayo de 2016), el sistema de archivos F2FS no soporta el encogimiento. Si lo hace para cuando alguien lea esto, hágamelo saber en los comentarios.

La solución es entonces eliminar y recrear todo el sistema de archivos para /data . De esta respuesta relacionada en Unix y Linux Stack Exchange:

mkfs.f2fs /dev/block/mmcblk0p36 11583168

Esto servirá. Después de reiniciar y restaurar la copia de seguridad, y finalmente, reiniciar a Android, el proceso de encriptación funcionó.

Importante: Asegúrate de comprobar Use rm -rf instead of formatting de los ajustes de TWRP antes de restaurar la copia de seguridad.

2 votos

resize.f2fs 1.12.0 soporta tanto la contracción como la expansión.

1 votos

@IrfanLatif No encuentro ninguna prueba de que haya que apoyar la contracción, ¿dónde has leído eso?

2 votos

Puede encontrar f2fs-tools (incluyendo resize.f2fs ) compilado estáticamente para ARM aquí .

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X