So ändern Sie die Größe der /data F2FS-Partition

Kontext:

Ich habe mit der TWRP-Wiederherstellung alle Partitionen von meinem Moto G-Gerät gelöscht und Cyanogen 13 darauf installiert. Dann hatte ich Probleme beim Aktivieren der Verschlüsselung: Das Telefon startet einfach neu, verschlüsselt aber nicht. Dies ist ein bekanntes Problem und wird hier beschrieben .

Ich wollte einem in dieser Antwort beschriebenen Verfahren folgen (basierend auf diesem ), das angeblich funktioniert. Die Erklärung ist:

Beim Verschlüsseln des Telefons enthält die Partition /dev/block/mmcblk0pXX – die ursprünglich ein ext4-Dateisystem enthielt, das als /data und /sdcard gemountet wird – jetzt einen Verschlüsselungscontainer. Diese wird zu Beginn des Bootvorgangs entschlüsselt und gibt eine logische Partition /dev/block/dm-0 zurück, die dann das ext4-Dateisystem für /data und /sdcard enthält. (...)

Um dies zu beheben, muss das Dateisystem in /dev/block/mmcblk0pXX mindestens 16KiB kleiner sein als die Partition selbst, was einfach durch resize2fs erreicht werden kann.


Kurz gesagt, die vorgeschlagene Lösung besteht darin, die Größe der /dataPartition zu ändern und einige Sektoren daraus zu entfernen ...

Wichtig ist die Anzahl der Blöcke (...) Von dieser Zahl ziehen wir 8 ab, was nicht 16 KiB, sondern sichere 32 KiB Platz für den Verschlüsselungsheader übrig lässt (16 KiB auf einem 12-GB-Volume stören Sie nicht, im Ernst)

Die tatsächliche Anzahl der aus der /dataPartition zu entfernenden Blöcke hängt von der Sektorgröße für die Partition ab. Im obigen Beispiel sind es 4 KB, also 8x4 =32 .


Das Problem

Diese Anweisungen gelten nur für die Dateisysteme ext2/3/4 ; Die erforderlichen Befehle ( e2fsck, tune2fs, resize2fs ) funktionieren nicht mit der von Cyanogen v13 verwendeten F2FS-Partition .

Ich habe fsck.f2fsim Verzeichnis /sbin gefunden , das ich anstelle von e2fsck und tune2fs verwendet habe . Unten sind die Schritte von der Root-ADB-Shell, die in TWRP gebootet wird:

~ # 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)

(...)


Meine /dataPartition ist also mmcblk0p36, und hat eine Größe von 11.583.232 Sektoren. Jeder Sektor ist 512 Bytes groß, daher muss ich die Partition auf eine endgültige Größe von 11.583.168 Sektoren verkleinern, um 32 KB nicht zugeordnet zu lassen.

Aber wie kann es gemacht werden? Alles scheint darauf hinzudeuten, dass das Verkleinern einer F2FS-Partition nicht möglich ist, aber ich bin mir nicht sicher. Wenn dies nicht der Fall ist, und vorausgesetzt, ich habe eine vollständige Sicherung der /dataPartition durchgeführt, was sind die Schritte, um sie zu löschen und mit einer kleineren Größe neu zu erstellen?

Das Neuerstellen der Partition mit einer kleineren Größe würde Ihr Problem nicht lösen, wenn ich die Anführungszeichen richtig gelesen habe: Um dies zu beheben, muss das Dateisystem in /dev/block/mmcblk0pXXmindestens 16 KB kleiner sein als die Partition selbst (Hervorhebung von mir). Ich habe keine Erfahrung mit F2FS, aber gibt es einen mkf2fsor - mkfs.f2fsBefehl? Sie könnten das dann mit den entsprechenden Parametern ausführen, um das Dateisystem mit der entsprechenden Größe neu zu erstellen (was natürlich alle Daten im aktuellen Dateisystem auf dieser Partition zerstören würde, also machen Sie zuerst eine Sicherung).
@Izzy Es hat funktioniert! Danke Kumpel. Ich habe Sie auf Unix & Linux SE gutgeschrieben .
Freut mich zu lesen! Und danke, dass du es als Antwort mit Details gepostet hast (upvoted;)

Antworten (1)

Ab heute (30. Mai 2016) unterstützt das F2FS-Dateisystem keine Verkleinerung. Wenn dies der Fall ist, bis jemand dies liest, lass es mich einfach in den Kommentaren wissen.

Die Lösung besteht dann darin , das gesamte Dateisystem für /data. Aus dieser verwandten Antwort auf Unix & Linux Stack Exchange:

mkfs.f2fs /dev/block/mmcblk0p36 11583168

Dies wird den Trick machen. Nach dem Neustart und Wiederherstellen des Backups und schließlich dem Neustart auf Android funktionierte der Verschlüsselungsprozess.

Wichtig: Überprüfen Sie Use rm -rf instead of formattingunbedingt die TWRP-Einstellungen, bevor Sie die Sicherung wiederherstellen.

resize.f2fs 1.12.0unterstützt sowohl das Schrumpfen als auch das Erweitern.
@IrfanLatif Ich kann keine Beweise dafür finden, dass das Schrumpfen unterstützt werden sollte - wo hast du das gelesen?
f2fs-tools(einschließlich resize.f2fs) statisch für ARM kompiliert finden Sie hier .