Автоматично розгорніть останній розділ, щоб використовувати весь нерозподілений простір, використовуючи розділений в пакетному режимі


20

Коротше кажучи, мені потрібно все це виконати автоматично під час завантаження (вбудована система).

Наші інженери будуть відтворювати зображення на виробничих пристроях. Ці зображення містять невелику таблицю розділів. Під час завантаження мені потрібно автоматично розгорнути останній розділ (№3), щоб використовувати весь доступний простір на диску.

Ось що я отримую, коли дивлюся на вільний простір на своєму диску.

> parted /dev/sda print free
Model: Lexar JumpDrive (scsi)
Disk /dev/sda: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  25.3MB  24.2MB  fat16        primary  legacy_boot
        25.3MB  26.2MB  922kB   Free Space
 2      26.2MB  475MB   449MB   ext4         primary
 3      475MB   1549MB  1074MB  ext4         primary
        1549MB  32.0GB  30.5GB  Free Space

Мені потрібно розгорнути розділ 3 на N (30,5 ГБ) кількість байтів

Як виконати цей крок автоматично, без підказки? Для цього потрібно працювати з динамічним розміром простору, доступним після 3-го розділу.


Не сподівайтеся отримати готовий сценарій для запуску без спроб! Тож чи можете ви показати нам, що ви намагалися до цього часу? Інша річ, що розділ, на який ви змінюєте розмір, не повинен встановлюватися під час операції ....
Luciano Andress Martini

Я спробував resizepartкоманду, і вона працює, але вона вимагає точного розміру. Мені потрібно, щоб це було динамічно.
Пол Нопф

resize2fsможе бути те, що я шукаю. linux.die.net/man/8/resize2fs
Пол Кнопф

Відповіді:


22

У поточних версіях parted, resizepartповинен працювати для розділу ( partedрозуміє 100%чи подібні речі -1s, останній також повинен --зупинити параметри розбору на cmdline). Для того, щоб визначити точне значення , яке ви можете використовувати unit s, print free. resize2fsзгодом приходить для файлової системи.


У старих версіях partedбула resizeкоманда, яка дозволила б змінити розмір і розділу, і файлової системи за один раз, навіть вона працювала vfat.

У модифікації Kobo ereader я використав це для максимального розміру 3-го розділу внутрішньої пам'яті: (сліпо вважає, що немає 4-го розділу та таблиці msdos та речей)

start=$(cat /sys/block/mmcblk0/mmcblk0p3/start)
end=$(($start+$(cat /sys/block/mmcblk0/mmcblk0p3/size)))
newend=$(($(cat /sys/block/mmcblk0/size)-8))

if [ "$newend" -gt "$end" ]
then
    parted -s /dev/mmcblk0 unit s resize 3 $start $newend
fi

Таким чином, ви також можете отримати значення, /sys/block/.../якщо ядро ​​його підтримує. Але команду partedвидалено, resizeтому вам потрібно зробити два кроки зараз, resizepartщоб виробити розділ, і будь-який інструмент, який надає ваша файлова система, для вирощування цього, як resize2fsдля ext*.


Це саме те, що я шукав. Спасибі за вашу допомогу!
Пол Кнопф

Побічне запитання, що з 8 байтами наприкінці?
Пол Кнопф

Уникайте зміни розміру на одному секторі ... вам доведеться змінити це на -40 або щось подібне (заголовок резервного копіювання GPT в кінці диска).
frostschutz

Чи partedне підтримує автоматичне розширення з командного рядка? Тому що, це робить його підтримки в інтерактивному режимі . Якщо запустити інтерактивно, він запитає, чи потрібно виправити таблицю розділів GPT відповідно до розміру диска (типу fix), а потім можна запустити resizepart 3 -1. Я намагався зрозуміти, як змусити це зробити з командного рядка.
Харві

Не так швидко: команда зміни розміру була видалена в розділеному розділі 3.0. Спробуйте sfdisk або gparted.
GregD

16

Не в змозі належним чином розірвати скрипт (він попросив підтвердження, оскільки розділ встановлений і всупереч іншим відповідям, які я знайшов, не зрозумів -1sабо 100%), я просто знайшов інструмент зростанняpart, який робить саме це.

Використання просте: growpart /dev/sda 3(а потім resize2fs /dev/sda3, або інша відповідна команда для використовуваного типу файлової системи).

У Debian і Ubuntu він упакований як хмара-гості-утиліти .


1
Це найзручніший спосіб, який я зараз міг знайти для цього. Це чудово працювало.
SebiF

Це було рішенням для мене - розлучений не любив ext4 як файлову систему, і, здавалося, немає способу уникнути його спроби змінити розмір файлової системи ...
Antti Haapala

не працює для Ubuntu 18.04
DreamFlasher

@DreamFlasher Я не можу сказати, чому це не працювало для вас. Наскільки я можу бачити, ви можете просто встановити пакунок хмара-гость-утиліти, і оскільки це єдина функція, яку надає зростанняpart, вона повинна працювати, якщо немає помилки, вона використовується неправильно або щось не підходить під її контроль. Зауважте, що останній аргумент (3 у прикладі) - це розділ, який має бути змінений, рахуючи від 1, і що після розбиття потрібно отримати достатньо місця, щоб мати змогу змінити розмір.
Іво Смітс

7

Правильний спосіб зробити це - використовувати той факт, що проділ має поняття відсотків. Так

parted /dev/sda resize 3 100%

1
застаріла, не працює з Ubuntu 18.04 та пізнішими
версіями

Злегка команда зміни розміру пішла з розірваною версією 3, тепер вам доведеться використовувати команду resizepart, а потім окремо змінити розмір базової файлової системи або PV, якщо для цього використовується. Для ext4 командою є resize2fs, або для XFS це xfs_growfs. Обидва вони зазвичай виконуються, коли файлова система змонтована, і аргумент є точкою монтування в обох випадках.
Джонатан Канюк

0

У Ubuntu 18.04 я можу змінити розмір, щоб заповнити нерозподілений простір у сценарії з наступним:

sudo parted -s /dev/sdb "resizepart 2 -1" quit
sudo mount -av
sudo umount /dev/sdb2
sudo mount /dev/sdb2 /mnt
sudo resize2fs /dev/sdb2

Можливо, не потрібно буде монтувати перед зміною розміру. Я зробив це, щоб придушити запит від resize2fs для введення користувача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.