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

Contexto:

Limpié todas las particiones de mi dispositivo Moto G con la recuperación TWRP e instalé Cyanogen 13 en él. Luego tuve problemas al habilitar el cifrado: el teléfono simplemente se reinicia pero no cifra. Este es un problema conocido y se describe aquí .

Quería seguir un procedimiento descrito en esta respuesta (basado en esto ), que supuestamente funciona. La explicación es:

Al cifrar el teléfono, la partición /dev/block/mmcblk0pXX, que originalmente contenía un sistema de archivos ext4 que se monta como /data y /sdcard, ahora contiene un contenedor de cifrado. Esto se descifrará 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 /data y /sdcard. (...)

Para solucionarlo, el sistema de archivos en /dev/block/mmcblk0pXX debe ser al menos 16 KiB más pequeño que la partición en sí, lo que se puede hacer fácilmente con resize2fs.


En definitiva, la solución propuesta es redimensionar la /datapartición, eliminando algunos sectores de ella...

Importante es el número de bloques (...) De este número, restamos 8, lo que deja no 16 KiB sino un espacio seguro de 32 KiB para el encabezado de cifrado (no le importan 16 KiB en un volumen de 12 GB, en serio)

El número real de bloques que se eliminarán de la /datapartición depende del tamaño del sector de la partición. En el ejemplo anterior son 4 KB, por lo que 8x4 =32 .


El problema

Estas instrucciones solo se aplican a los sistemas de archivos ext2/3/4 ; los comandos necesarios ( e2fsck, tune2fs, resize2fs ) no funcionarán con la partición F2FS utilizada por Cyanogen v13.

Encontré fsck.f2fsen el directorio /sbin , que usé en lugar de e2fsck y tune2fs . A continuación se muestran los pasos desde el ADB Shell raíz, iniciado 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)

(...)


Entonces, mi /datapartición es mmcblk0p36, y tiene un tamaño de 11 583 232 sectores. Cada sector tiene 512 bytes, por lo que debo reducir la partición a un tamaño final de 11 583 168 sectores para dejar 32 KB sin asignar.

Pero, ¿cómo se puede hacer? Todo parece indicar que no es posible reducir una partición F2FS, pero no estoy seguro. Si no es así, y suponiendo que hice una copia de seguridad completa de la /datapartición, ¿cuáles son los pasos para eliminarla y volver a crearla con un tamaño más pequeño?

Recrear la partición con un tamaño más pequeño no resolvería su problema, si leo las comillas correctamente: para solucionarlo, el sistema de archivos/dev/block/mmcblk0pXX debe ser al menos 16 KiB más pequeño que la partición en sí (énfasis mío). No tengo experiencia con F2FS, pero ¿hay un comando mkf2fso disponible? mkfs.f2fsLuego podría ejecutarlo con los parámetros apropiados para volver a crear el sistema de archivos con el tamaño correspondiente (lo que, por supuesto, destruiría todos los datos en el sistema de archivos actual en esa partición, así que primero haga una copia de seguridad).
@Izzy ¡Funcionó! Gracias amigo. Te acredité en Unix y Linux SE .
¡Me alegra leer! Y gracias por publicarlo como respuesta con detalles (votado a favor;)

Respuestas (1)

A partir de hoy (30 de mayo de 2016), el sistema de archivos F2FS no admite la reducción. Si lo hace para cuando alguien lea esto, házmelo saber en los comentarios.

Entonces, la solución es eliminar y volver a crear todo el sistema de archivos para /data. De esta respuesta relacionada en Unix y Linux Stack Exchange:

mkfs.f2fs /dev/block/mmcblk0p36 11583168

Esto hará el truco. Después de reiniciar y restaurar la copia de seguridad y, finalmente, reiniciar en Android, el proceso de cifrado funcionó.

Importante: asegúrese de verificar Use rm -rf instead of formattingdesde la configuración de TWRP antes de restaurar la copia de seguridad.

resize.f2fs 1.12.0admite la contracción y la expansión.
@IrfanLatif No puedo encontrar ninguna evidencia de que se deba respaldar la reducción. ¿Dónde leyó eso?
Puede encontrar f2fs-tools(incluido resize.f2fs) compilado estáticamente para ARM aquí .