Как изменить размер раздела /data F2FS

Контекст:

Я стер все разделы с моего устройства Moto G с помощью рекавери TWRP и установил на него Cyanogen 13. Затем у меня возникли проблемы при включении шифрования: телефон просто перезагружается, но не шифрует. Это известная проблема , описанная здесь .

Я хотел следовать процедуре, описанной в этом ответе (на основе этого ), которая, как сообщается, работает. Объяснение:

При шифровании телефона раздел /dev/block/mmcblk0pXX, изначально содержащий файловую систему ext4, которая монтируется как /data и /sdcard, теперь содержит контейнер шифрования. Он будет расшифрован в начале процесса загрузки и вернет логический раздел /dev/block/dm-0, который затем содержит файловую систему ext4 для /data и /sdcard. (...)

Чтобы это исправить, файловая система в /dev/block/mmcblk0pXX должна быть как минимум на 16 КБ меньше, чем сам раздел, что легко сделать с помощью resize2fs.


Короче говоря, предлагаемое решение состоит в том, чтобы изменить размер /dataраздела, удалив из него некоторые сектора...

Важно количество блоков (...) Из этого числа вычитаем 8, что оставляет не 16КиБ, а безопасные 32КиБ места для заголовка шифрования (вы не против 16КиБ на 12Гб томе, серьезно)

Фактическое количество блоков, которые необходимо удалить из /dataраздела, зависит от размера сектора раздела. В приведенном выше примере это 4 КБ, поэтому 8x4 = 32 .


Проблема

Эти инструкции относятся только к файловым системам ext2/3/4 ; необходимые команды ( e2fsck, tune2fs, resize2fs ) не будут работать с разделом F2FS , используемым Cyanogen v13.

Я нашел fsck.f2fsв каталоге /sbin , который я использовал вместо e2fsck и tune2fs . Ниже приведены шаги из корневой оболочки ADB, загруженной в 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)

(...)


Итак, мой /dataраздел имеет mmcblk0p36размер 11 583 232 сектора. Каждый сектор имеет размер 512 байт, поэтому я должен уменьшить размер раздела до конечного размера 11 583 168 секторов, чтобы оставить 32 КБ нераспределенными.

Но как это сделать? Кажется, все указывает на то, что сжатие раздела F2FS невозможно, но я не уверен. Если это не так, и если я сделал полную резервную копию /dataраздела, каковы шаги по его удалению и воссозданию с меньшим размером?

Воссоздание раздела меньшего размера не решит вашу проблему, если я правильно прочитал кавычки: чтобы это исправить, файловая система/dev/block/mmcblk0pXX должна быть как минимум на 16 КБ меньше , чем сам раздел (выделение мое). У меня нет опыта работы с F2FS, но есть ли доступная команда mkf2fsили ? mkfs.f2fsЗатем вы можете запустить это с соответствующими параметрами, чтобы воссоздать файловую систему соответствующего размера (что, конечно, уничтожит все данные в текущей файловой системе в этом разделе, поэтому сначала сделайте резервную копию).
@Иззи Это сработало! Спасибо друг. Я указал вам на Unix & Linux SE .
Рад читать! И спасибо, что разместили его как ответ с подробностями (проголосовали за него;)

Ответы (1)

На сегодняшний день (30 мая 2016 г.) файловая система F2FS не поддерживает сжатие. Если это произойдет к тому времени, когда кто-то прочитает это, просто дайте мне знать в комментариях.

Тогда решение состоит в том, чтобы удалить и заново создать всю файловую систему для /data. Из этого связанного ответа на Unix & Linux Stack Exchange:

mkfs.f2fs /dev/block/mmcblk0p36 11583168

Это поможет. После перезагрузки и восстановления резервной копии, и, наконец, перезагрузки на Android, процесс шифрования заработал.

Важно: обязательно проверьте Use rm -rf instead of formattingнастройки TWRP перед восстановлением резервной копии.

resize.f2fs 1.12.0поддерживает сжатие, а также расширение.
@IrfanLatif Я не могу найти никаких доказательств того, что сжатие должно поддерживаться - где вы это прочитали?
Найти f2fs-tools(в т.ч. resize.f2fs) скомпилированные статически для ARM можно здесь .