У меня Sony Xperia Z5 Compact, и мне показалось странным, что диспетчер памяти показал, что система заполняет 20 ГБ внутренней памяти объемом 32 ГБ, поэтому я углубился в это.
Я обнаружил, что раздел данных - это p42 во внутреннем ПЗУ, используя fdisk TWRP, который правильно сообщает, что он имеет 23 ГБ (однако я не нашел, как получить здесь вывод терминала TWRP). Однако, используя fdisk с полностью загруженным устройством через оболочку ADB, я получаю следующее:
suzuran:/ # fdisk -l /dev/block/mmcblk0
Disk /dev/block/mmcblk0: 31.2 GB, 31272730624 bytes
255 heads, 63 sectors/track, 3802 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/block/mmcblk0p1 1 3803 30539775+ ee EFI GPT
не показывает полную таблицу разделов...
Однако, когда я пытаюсь прочитать раздел, он не выдает ошибок:
suzuran:/ # dd if=/dev/block/mmcblk0p42 of=/dev/null
48365568+0 records in
48365568+0 records out
24763170816 bytes transferred in 246.927 secs (100285391 bytes/sec)
Чтение всего хранилища также не дает ошибок:
suzuran:/ # dd if=/dev/block/mmcblk0 of=/dev/null
61079552+0 records in
61079552+0 records out
31272730624 bytes transferred in 365.211 secs (85629213 bytes/sec)
Но при монтировании, либо при загрузке, либо внутри TWRP (я его тоже монтировал вручную) показывает только размер 8GB:
suzuran:/ # df
Filesystem 1K-blocks Used Available Use% Mounted on
[ other skipped mounts ]
/dev/block/mmcblk0p43 5215496 1188900 4026596 23% /system
/dev/block/mmcblk0p42 8641912 6071544 2570368 71% /data
/dev/block/mmcblk0p41 197472 188 197284 1% /cache
/dev/block/mmcblk0p3 81872 57808 24064 71% /firmware
/dev/block/mmcblk0p31 28144 164 27980 1% /persist
/dev/block/mmcblk0p39 14327 160 14167 2% /idd
/dev/block/loop0 92656 980 91676 2% /su
Я использую LineageOS, но в стандартной версии Sony у меня была та же проблема, только у меня не было инструментов, чтобы проверить это дальше.
У кого-нибудь была эта проблема раньше или может помочь мне с этим?
Изменить: я только что нашел команду «blockdev»:
suzuran:/ # blockdev --getsize64 /dev/block/bootdevice/by-name/userdata
24763170816
который дает правильный размер раздела. Что происходит с командой mount? Может ли это быть связано с ядром? Если да, то почему это происходит и в TWRP?
Немного «поиграв» с устройством, мне удалось отследить проблему до данных раздела ext4. Загрузился в TWRP, терминал, сделал резервную копию файлов в разделе, размонтировал, затем:
mke2fs -t ext4 /dev/block/bootdevice/by-name/userdata
И вуаля! Доступно 23 ГБ для хранения данных. Восстановил резервные копии файлов в новую файловую систему ext4, и теперь все работает, хотя я чувствую, что это немного медленнее. Тем не менее, это решаемо.