За 8 лет многое изменилось.
Fallocate
fallocate -d
filename
можно использовать для пробивания отверстий в существующих файлах.Из справочной страницы fallocate(1)
:
-d, --dig-holes
Detect and dig holes. This makes the file sparse in-place,
without using extra disk space. The minimum size of the hole
depends on filesystem I/O block size (usually 4096 bytes).
Also, when using this option, --keep-size is implied. If no
range is specified by --offset and --length, then the entire
file is analyzed for holes.
You can think of this option as doing a "cp --sparse" and then
renaming the destination file to the original, without the
need for extra disk space.
See --punch-hole for a list of supported filesystems.
(Этот список:)
Supported for XFS (since Linux 2.6.38), ext4 (since Linux
3.0), Btrfs (since Linux 3.7) and tmpfs (since Linux 3.5).
GNU cp
Кроме того, где-топо пути GNU cp
получил понимание разреженных файлов.Цитируя cp(1)
справочную страницу относительно режима по умолчанию, --sparse=auto
:
разреженные файлы SOURCE обнаруживаются грубой эвристикой, и соответствующий файл DEST также делается разреженным.
Но есть также --sparse=always
, который активирует копию файла, эквивалентную тому, что fallocate -d
делает на месте:
Укажите --sparse=always
, чтобы создатьразреженный файл DEST, когда файл SOURCE содержит достаточно длинную последовательность нулевых байтов.
Я наконец-то смог удалить свою однострочную строку tar cpSf - SOURCE | (cd DESTDIR && tar xpSf -)
, которая в течение 20 лет была моим седобородым способомкопирование разреженных файлов с сохранением их разреженности.