Це синтез вищезазначених відповідей та інших місць, які працювали на мене - створіть резервну копію образу, якщо ви помилитесь:
Спочатку зробіть файл зображення більшим (тут ми додаємо 1 Гб до кінця):
truncate -s +1G ./image.img
Далі картографуйте все зображення як циклічний пристрій, щоб ми могли натиснути на таблицю розділів
sudo losetup /dev/loop0 ./image.img
Для подальшої довідки дозволяє скинути його:
sudo fdisk -l /dev/loop0
Результат виглядає так:
Disk /dev/loop0: 2962 MB, 2962227200 bytes
255 heads, 63 sectors/track, 360 cylinders, total 5785600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c4661
Device Boot Start End Blocks Id System
/dev/loop0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/loop0p2 122880 5785599 2831360 83 Linux
Тепер ми переробимо останній розділ, видаливши його, а потім відтворимо його в тому самому початковому місці, того ж типу, але в іншому кінцевому місці. Отже, зверніть увагу на стовпець «Пуск» для loop0p2 (розділ 2 - розділ Linux) - ми будемо використовувати його пізніше - його 122880 тут.
sudo fdisk /dev/loop0
Введіть наступне - вони безпечні для введення - нічого постійного не відбувається, поки ви не прочитаєте моє пояснення, що випливає:
p
d
2
n
p
2
122880
- просто натисніть клавішу Enter, щоб прийняти типово
p
Крок 1 - роздрукувати поточну таблицю. Крок 2-3 - видаліть розділ 2, кроки 4-8 - відтворіть розділ 2 з новою кінцевою точкою (за замовчуванням - кінець зображення), крок 9 - роздрукуйте нову таблицю.
Якщо припустити, що ваша щойно надрукована таблиця ідентична оригінальній таблиці, за винятком значення Кінцеве значення та Блоки (тобто розмір змінився), ви готові скористатися.
Введіть, w
щоб здійснити зміну, а потім увійдіть, q
щоб вийти.
Ви можете видалити це петлеве пристрій, ми зробимо інший для другого розділу. Запам’ятайте початкове зміщення, яке ви відзначили і використовували вище - ми знову його використаємо:
sudo losetup -d /dev/loop0 # delete the old loop setup
sudo losetup -o $((122880*512)) /dev/loop0 ./image.img
Це створить нове відображення на /dev/loop0
вказівку просто на розділ 2 - для довідки 512 розмір сектора, який ви можете побачити в першому fdisk
висновку.
Тепер змініть розмір розділу, щоб заповнити доступний простір:
sudo e2fsck -f /dev/loop0
sudo resize2fs /dev/loop0
Готово - тепер прибираємо:
sudo losetup -d /dev/loop0