henry_flower: A melancholy wolf (Default)
henry_flower ([personal profile] henry_flower) wrote2026-03-14 11:41 pm

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

kondybas: (Default)

[personal profile] kondybas 2026-03-14 09:58 pm (UTC)(link)
румунський мага-патріот, то найсмішніше у пості.

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

Тапками не бийте, це в мене якісь конфабуляції, бо я ніби колись десь то читав.