Ошибка расширения раздела Linux

280
Mark

Я ломаю голову над очень простой задачей. У меня есть файл 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.

0
запуск e2ksck в / dev / loop0 завершается с ошибкой в ​​магическом числе суперблока Mark 8 лет назад 0
FWIW, лучше не использовать `parted`, так как он использует единицу СИ вместо двоичной единицы по умолчанию, что может вызвать путаницу. используйте вместо этого `fdisk -l`. Tom Yan 8 лет назад 0
Также вам нужно изменить размер раздела (запись в таблице разделов) перед изменением размера файловой системы с помощью `resize2fs`. Tom Yan 8 лет назад 0
FIY по этой ссылке я нахожу эту команду dd (второй ответ): http://raspberrypi.stackexchange.com/questions/4943/resize-image-file-before-writing-to-sd-card Mark 8 лет назад 0
Не берите в голову. Я был неправ. Команда создает изображение с разреженным файлом 3GiB + 1 байтовый ноль. `truncate -s 3G image_for_append` все равно лучше Tom Yan 8 лет назад 0

2 ответа на вопрос

0
ansi_lumen

Never tested the described way, but if your deal with an SD-Card, the following works for me.

  1. dd the image unchanged to the sdcard with dd if=my.img of=/dev/mmcblk0 bs=1M

  2. sync after that

  3. Use fdisk to delete the 2nd partition. Then create a new partition and accept all defaults. Then write the partition table.
  4. sync again
  5. Check the filesystem with e2fsck -f /dev/mmcblk0p2
  6. Resize the fs with resize2fs /dev/mmcblk0p2
  7. sync again
Спасибо, но мне нужно управлять разделами ПЕРЕД записью SD-карты. Мне нужно сделать все вещи с файлом IMG. Подробно я хочу расширить второй раздел (ext4), а затем создать еще один раздел ext4. Mark 8 лет назад 0
0
Tom Yan

I recommend truncate instead of quirky dd command that creates 3GiB sparse file + 1 byte zeros. truncate use sparse file as well. With -s 3G you get a image of precisely 3GiB sparse file with no zeros (or you can use count=0 for dd too):

enter image description here

I prefer doing it "in-place" with truncate, since cat would convert the sparse file to zeros (although that might be what you want), which costs time, space, and excessive write.

The following example does it "in-place" (see the + prefix between -s and 3G in the truncate command):

enter image description here

As you can see, you need to resize the partition (e.g. with fdisk) as well. So you need to use losetup -P instead of just attaching the partition by specifying an offset. This is what you've missed since the solution you linked/quoted applies to a filesystem image only.

When you recreate the partition entry after deleting the original one, make sure it starts at the same LBA as the original (in the example it's 206848), otherwise the filesystem will be lost.

Я успешно выполнил мои потребности с вашей помощью. Благодарю. Mark 8 лет назад 0

Похожие вопросы