Для спеціялізованого кастомного дістро мені знадобився механізма
збільшення fat32 партішона (під час початкового буту). Коли вимовляють
слово resize мають на увазі 2 речі: збільшення партішона та
збільшення хфайлової системи. Можна просто зробити 1ше, але зиску для
користувача-дурбели від того буде небагато.
Кастомний дістро використовує (не треба непритомніти) systemd, який
вміє це робити, але, на жаль, не для fat32:
"systemd-growfs knows very little about specific file systems
... and will instruct the kernel to grow the mounted filesystem to
full size of the underlying block device ... Currently: ext4, btrfs,
xfs"
Якщо би мова йшла про ext4 та безтурботне життя без systemd, алгоритма
був би нескладний: за допомогою parted(8) збільшується розмір
партішона, потім за допомогою resize2fs(8) збільшується хфайлова
система. Робити це можна, наприклад, ув initramfs, до того як
монтуються блокові дівайси і запускається фінальний switch_root(8).
Ріпо з parted насправді має С бібліотеку libparted, якою користується
ютіліта parted. Навколо libparted побудована вся інфраструктура
магічних аплікації, які можуть зменшувати/збільшувати розміри
будь-яких партішонів.
libparted не містить коду для збільшення файлових систем, за
винятком vfat. Не дивлячись на це, рісайзування fat залишається
прихованим від користувача і відсутнім ув parted (страшенно популярна
gtk'шна аплікація gparted той маловідомий куток libparted радісно
використовує).
Далі починається божевілля. Будь-який дістро, від деривативів убунти,
федори та прибацаного арча до контейнерів з олпайном, містить нєчто
під назвою fatresize. Будь-яка LLM мументально виплюне цю назву і
напише приклад її використання, що, могло би бути вкрай корисно, коли
би та fatresize працювала.
Якщо поглянути на її нутрощі після розглядання libparted/parted, стає
нескладно помітити, що той, хто її писав, копіював звідти шматки
хфункцій чи цілі хфункції verbatim, що одначе не допомогло: "ютіліта"
є неспроможною навіть розпарсити рядок /dev/sda3 коректно і вилітає
після спроби замість того обробляти /dev/sda, тому що libparted
відмовляється робити ідіотизм.
На ґітгабі плачуть, але автор не відповідає. Є 1 (один) форк працюючий
(у сенсі, з намаганням полагодити елементарні речі), але також
занедбаний.
Варіянти вирішення прублеми: (а) натравити на те улюбленого огента,
(б) сказати огенту написати з нуля, (с) написати самому. Я вибрав
останнє,
$ _out/fat32-resize _out/junk/1G info 2
transport file
sectors 2097152
partition_table msdos
partitions 2
sector_size 512
partition_start 411648
partition_end 2097151
partition_length 1685504
fs_type fat32
fs_start 411648
fs_end 1460219
fs_length 1048572
partition_used_percent 62
lolbar loooooooooooooooooooo...........l
але перед тим поцікавився, хто є автор fatresize.
Ви не повірите!
"то, что ми сєйчас наблюдаєм по всєму міру -- єто вскритий давно
зрєющій фурункул русофобії і злоби. Шовінізм по отношєнію Запада ко
всєм русскім. Маскі сняти."
Це з його linkedin, де він пише що нібито працює ув швейцарському
охфісі гоогла, але одночасно ув твіторі чомусь косить під румунського
маґа-патріота.