Вопрос или проблема
Я создаю бинарный образ из различных разделов Android с помощью dd
. Затем я монтирую образ с помощью losetup
и mount
. Большинство разделов монтируются правильно, кроме последнего (userdata).
# sudo fdisk -l user.bin
Диск user.bin: 14.68 GiB, 15758000128 байт, 30777344 секторов
Единицы: сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода/вывода (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: 03B183AF-9DB5-4EFC-805E-9097AE08BEF0
Устройство Начало Конец Секторы Размер Тип
user.bin1 55552 57599 2048 1M Файловая система Linux
user.bin2 57600 59647 2048 1M Файловая система Linux
user.bin3 59648 61695 2048 1M Файловая система Linux
user.bin4 61696 63743 2048 1M Файловая система Linux
user.bin5 63744 64255 512 256K Файловая система Linux
user.bin6 64256 129791 65536 32M Файловая система Linux
user.bin7 129792 195327 65536 32M Файловая система Linux
user.bin8 195328 4389631 4194304 2G Файловая система Linux
user.bin9 4389632 8583935 4194304 2G Файловая система Linux
user.bin10 8583936 10681087 2097152 1G Файловая система Linux
user.bin11 10681088 12778239 2097152 1G Файловая система Linux
user.bin12 12778240 12827391 49152 24M Файловая система Linux
user.bin13 12827392 12958463 131072 64M Файловая система Linux
user.bin14 12958464 12978943 20480 10M Файловая система Linux
user.bin15 12978944 12999423 20480 10M Файловая система Linux
user.bin16 12999424 13097727 98304 48M Файловая система Linux
user.bin17 13097728 13163263 65536 32M Файловая система Linux
user.bin18 13163264 13327103 163840 80M Файловая система Linux
user.bin19 13327104 13329151 2048 1M Файловая система Linux
user.bin20 13329152 13331199 2048 1M Файловая система Linux
user.bin21 13331200 13339391 8192 4M Файловая система Linux
user.bin22 13339392 13341439 2048 1M Файловая система Linux
user.bin23 13341440 13472511 131072 64M Файловая система Linux
user.bin24 13472512 30777310 17304799 8.3G Файловая система Linux
Выше показан раздел объемом 8.3 ГБ. Затем я использую sudo losetup -vP -f user.bin
, и после этого я проверяю снова:
# sudo fdisk -l /dev/loop28p24
Диск /dev/loop28p24: 2.88 GiB, 3089117184 байт, 6033432 сектора
Размер уменьшен!! И когда я пытаюсь смонтировать его, я получаю ошибку, и dmesg показывает:
[28136.901092] loop29: обнаружено изменение емкости с 0 на 6033432
[28136.921405] EXT4-fs (loop29): плохая геометрия: количество блоков 1572864 превышает размер устройства (754179 блоков)
Почему losetup загружает это как меньший раздел, чем он есть?
Правка: добавлена дополнительная информация выше по комментарию и некоторая информация ниже:
ls -l user.bin
-rw-r--r-- 1 root root 15758000128 Ноя 5 21:45 user.bin
Ответ или решение
Причины проблемы с размерами раздела и его монтированием
На основании вашего описания проблемы с монтированием раздела userdata
из бинарного образа user.bin
, можно выделить несколько возможных причин. Проанализируем информацию, предоставленную вами, и постараемся выяснить, что могло привести к этой ошибке.
1. Ошибка в работе losetup
При использовании losetup
необходимо учитывать, что эта команда может неправильно интерпретировать размеры разделов, если на уровне образа (user.bin
) имеются несоответствия. В вашем случае, когда вы используете команду sudo losetup -vP -f user.bin
, запрос происходит на создание циклического устройства, которое помимо размеров должно корректно обрабатывать таблицы разделов в образе.
Ваша таблица разделов показывает, что 24-й раздел занимает 8,3 ГБ. Однако после привязки (mounted
) этот раздел отображается как 2.88 ГиБ. Это может указывать на ошибки в самой структуре раздела или несовершенства в его записи.
2. Возможные ошибки в создании образа
Рекомендуется проверить корректность создания бинарного образа с использованием dd
. Убедитесь, что вы верно указали параметры, такие как if
и of
, а также использовали правильные размеры блоков. Некорректные параметры могут привести к неправильной записи данных и, как следствие, порче структуры таблицы разделов.
sudo dd if=/dev/<source> of=user.bin bs=4M status=progress
3. Проблемы с файловой системой раздела
Сообщение об ошибке в выводе dmesg
:
EXT4-fs (loop29): bad geometry: block count 1572864 exceeds size of device (754179 blocks)
указывает на то, что файловая система на данном разделе не соответствует указанным размерам. Это может быть связано с несколькими факторами:
- Неактуальные параметры файловой системы: Если при создании образа были использованы устаревшие параметры, это может стать причиной проблемы с несовпадением размеров.
- Зачистка пространства: При использовании
dd
важно убедиться, что все области раздела корректно инициализированы. Файловая система может "недознать" доступное место при некорректной записи или копировании.
4. Исправление ошибки
Для устранения проблемы рекомендуем выполнить следующие шаги:
-
Переосоздание образа: Возможно, существует необходимость заново создать образ раздела с корректными параметрами.
-
Используйте
parted
: При необходимости проверьте структуру разделов с помощьюparted
. Это может помочь выявить потенциальные проблемы с самим образом или таблицей разделов.sudo parted user.bin print
-
Проверка файловой системы: Попробуйте выполнить проверку и восстановление файловой системы на данном разделе. Это может помочь исправить ошибки и привести к корректному изменению размера.
sudo fsck.ext4 /dev/loop28p24
-
Создание нового раздела: Если ничего не помогает, возможно, стоит рассмотреть возможность создания нового образа с правильной таблицей разделов и инициализацией всех параметров.
Заключение
Ситуация, когда раздел не монтируется должным образом из-за несоответствующей интерпретации размеров, требует внимательного подхода между созданием образа и его последующим использованием. Следуя приведенным рекомендациям, вы сможете устранить возникшие проблемы и обеспечить стабильное и корректное использование ваших данных.