> Нужно уменьшить размер файла на длину удаляемого блока.Поскольку это пересекается с sparse файлами, надеюсь что мсье в курсе что есть sparse и как получается что 100500Гб файл может занимать всего 10Мб на диске. Ну вот hole punch это инверсное действие. Занимаемое место сокращается, т.к. блоки отдаются ФС. А логический размер остается как и был. То-есть, если выкусили 5Мб, файловая система получит их назад и файл будет занимать по факту лишь 5Мб. Хотя логический размер в 100500Гб у него останется. Файл делается "более sparse".
Кстати posix_fallocate() так не умеет. Линевый fallocate() - расширенная версия, через которую можно posix_fallocate() забабахать в 2 счета, но у него есть как аллокация так и деаллокация. Что довольно логично. Просто POSIX ничего не знает о sparse файлах и сами по себе sparse являются следствием того что стандарт никак не обязывает ФС что-либо реально выделять под некий файл просто на основании того что его создали и возжелали чтобы это было нечто размером в 100500Гб. Файловая система имеет полное право выделять фактическое место как-нибудь потом и это ее внутренее дело. Если в сторону создания sparse-ов можно считерить не выехав за рамки posix, то вот с деаллокацией и разреживанием файлов так уже не получится. В posix тупо нет сисколлов через которые так можно сделать, ни с читерством ни без.
Если же речь была о том чтобы урезать и логический размер файла (при наличии sparse это довольно декларативная цифра и оно не так уж и актуально) - тогда да, придется вырубить блок и присобачить хвост файла его фактическим перемещением. Не потому что иначе запрещают законы физики и логики, а потому что в posix опять же IIRC нет каких либо сисколов для того чтобы внятно запросить данную операцию. Хотя чисто технически я вполне могу себе представить как какой-нибудь CoW вообще не будет кантовать при этом данные и оформит это как просто измененный вариант метаданных, описывающих размещение файла с поправкой на "выпавший" или "урезанный" блок. Да и обычный дизайн в принципе мог бы. Просто метаданные описывающие размещение придется перестраивать. Основная проблема в том что для такого нет рукояток. Видимо не столь частая операция чтобы кому-то понадобилось.