Збільшення fat32
Для спеціялізованого кастомного дістро мені знадобився механізма збільшення 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, де він пише що нібито працює ув швейцарському охфісі гоогла, але одночасно ув твіторі чомусь косить під румунського маґа-патріота.

no subject
Наскіко я пам'ятаю, у всіх фат-партішонів спочатку йде отой файл-алокейшн-тейбл, розмір якого не фіксований, а залежить від власне розміру партішона при створенні. І, наскіко я знаю, якщо новий розмір партішона буде більше порогового, то доведеться переносити файло з блоків, де буде сидіти розширений фат.
Тапками не бийте, це в мене якісь конфабуляції, бо я ніби колись десь то читав.
no subject
так і є, але той партішона ізначально порожній майже (тобто користувач його буде наповнювати сам), так шо не страшно