Я стер все разделы с моего устройства 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
раздела, каковы шаги по его удалению и воссозданию с меньшим размером?
На сегодняшний день (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
поддерживает сжатие, а также расширение.
Иззи
/dev/block/mmcblk0pXX
должна быть как минимум на 16 КБ меньше , чем сам раздел (выделение мое). У меня нет опыта работы с F2FS, но есть ли доступная командаmkf2fs
или ?mkfs.f2fs
Затем вы можете запустить это с соответствующими параметрами, чтобы воссоздать файловую систему соответствующего размера (что, конечно, уничтожит все данные в текущей файловой системе в этом разделе, поэтому сначала сделайте резервную копию).март 2377 г.
Иззи