Ошибка расширения раздела Linux
Я ломаю голову над очень простой задачей. У меня есть файл img, который содержит файловую систему с 2 разделами. Как показано в некоторых уроках, я расширил доступное пространство следующим образом:
dd if=/dev/zero of=./temp_image bs=1 count=1 seek=3G
cat temp_image >> orig_image.img
losetup --offset [offset of the second partition*512] /dev/loop0 orig_image.img
e2fsck -f /dev/loop0
resize2fs -f /dev/loop0
losetup -d /dev/loop0
Но я боюсь, что размер таблицы разделов изменен неправильно:
parted orig_image.img > print
Model: (file)
Disk /home/user/orig_image.img: 7255MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 4194kB 67,1MB 62,9MB primary fat16 lba
2 67,1MB 4000MB 3933MB primary ext4
Но если я вхожу в систему, она действительно находит новое пространство... Я пропустил некоторые шаги?
Я попытался изменить размер раздела с помощью gparted, но он не может жаловаться на ошибки во время e2fsck.
2 ответа
Рекомендую truncate
вместо причудливых dd
команда, которая создает разреженный файл 3GiB + нули на 1 байт. truncate
используйте также разреженный файл. С -s 3G
Вы получаете изображение точно 3GiB разреженного файла без нулей (или вы можете использовать count=0
за dd
тоже):
Я предпочитаю делать это "на месте" с truncate
, поскольку cat
конвертирует разреженный файл в нули (хотя это может быть тем, что вам нужно), что стоит времени, места и чрезмерной записи.
Следующий пример делает это "на месте" (см. +
префикс между -s
а также 3G
в truncate
команды):
Как видите, вам нужно изменить размер раздела (например, с помощью fdisk
) а также Так что вам нужно использовать losetup -P
вместо того, чтобы просто присоединить раздел, указав смещение. Это то, что вы пропустили, поскольку решение, которое вы связали / цитировали, относится только к образу файловой системы.
Когда вы воссоздаете запись раздела после удаления исходного, убедитесь, что он начинается на том же LBA, что и исходный (в примере это 206848
), иначе файловая система будет потеряна.
Никогда не тестировал описанный способ, но если вы имеете дело с SD-картой, у меня работает следующее.
dd
изображение без изменений на SDCard сdd if=my.img of=/dev/mmcblk0 bs=1M
sync
после этого- использование
fdisk
вd
Елете2
ый раздел. Затем создайтеn
ew раздел и принять все значения по умолчанию. затемw
обряд таблицы разделов. sync
снова- Проверьте файловую систему с
e2fsck -f /dev/mmcblk0p2
- Изменить размер FS с
resize2fs /dev/mmcblk0p2
sync
снова