Ошибка расширения раздела 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-картой, у меня работает следующее.

  1. dd изображение без изменений на SDCard с dd if=my.img of=/dev/mmcblk0 bs=1M

  2. sync после этого

  3. использование fdisk в dЕлете 2ый раздел. Затем создайте new раздел и принять все значения по умолчанию. затем wобряд таблицы разделов.
  4. sync снова
  5. Проверьте файловую систему с e2fsck -f /dev/mmcblk0p2
  6. Изменить размер FS с resize2fs /dev/mmcblk0p2
  7. sync снова
Другие вопросы по тегам