Sparse files (разряженные файлы): различия между версиями

Материал из sysadm
Перейти к навигации Перейти к поиску
 
(не показаны 3 промежуточные версии этого же участника)
Строка 9: Строка 9:
 
'''Как найти sparse файлы'''
 
'''Как найти sparse файлы'''
 
<pre>
 
<pre>
find /path/to/dir -type f -printf "%n %s %p\n" | awk '$1 != $2 { print $0 }'
+
find /path/to/dir/ -type f -printf "%S %s %p\n" | awk '$1 < 1 { print $0 }'
 
</pre>
 
</pre>
  
Строка 19: Строка 19:
 
# утилита копирования cp
 
# утилита копирования cp
 
# --sparse=auto    (по умолчанию в RHEL10, в других дистрибутивах не проверялось) если источник является sparse, то файл назначения тоже будет sparse
 
# --sparse=auto    (по умолчанию в RHEL10, в других дистрибутивах не проверялось) если источник является sparse, то файл назначения тоже будет sparse
 +
#                  в этом режиме эффективность sparse может значительно снизиться и файл будет занимать значительно больше места чем исходный
 
# --sparse=never    файл назначения будет не sparse
 
# --sparse=never    файл назначения будет не sparse
 
# --sparse=always  файл назначения будет sparse
 
# --sparse=always  файл назначения будет sparse
Строка 25: Строка 26:
  
 
# rsync имеет опцию --sparse, но она полноценно не работает
 
# rsync имеет опцию --sparse, но она полноценно не работает
# при локальном копировании с диска на диск в папке назначения файлы могут занимать значительно больше места, хотя будут частично разряженными
+
# при локальном копировании с диска на диск в папке назначения файлы могут занимать в 1.5-2 раза больше места на диске, хотя будут частично разряженными
# при копировании через сеть опция --sparse может совсем не работать
+
# опции --inplace и --whole-file не решают проблему
 +
# при копировании через сеть опция --sparse может совсем не работать (не проверял)
 
# также есть мнение, что при копировании через сеть могут передаваться пустые участки, что значительно увеличивает трафик и время копирования (не проверял)
 
# также есть мнение, что при копировании через сеть могут передаваться пустые участки, что значительно увеличивает трафик и время копирования (не проверял)
# использование опций --inplace и --whole-file совместно с опцией --sparse не решают проблему
 
  
 
# к сожалению dar исключен из репозитория RHEL10
 
# к сожалению dar исключен из репозитория RHEL10

Текущая версия на 17:55, 5 октября 2025

Ссылки по теме

Если файл содержит большие фрагменты заполненные нулями, то они могут быть вырезаны и место занимаемое файлом частично освободится, при этом логический размер не изменится.

Как найти sparse файлы

find /path/to/dir/ -type f -printf "%S %s %p\n" | awk '$1 < 1 { print $0 }'

Как работать с sparse файлами

# вырезание пустот (преобразование обычного файла в sparse файл), при этом изменяется дата модификации файла
fallocate -d </path/to/file>

# утилита копирования cp
# --sparse=auto     (по умолчанию в RHEL10, в других дистрибутивах не проверялось) если источник является sparse, то файл назначения тоже будет sparse
#                   в этом режиме эффективность sparse может значительно снизиться и файл будет занимать значительно больше места чем исходный
# --sparse=never    файл назначения будет не sparse
# --sparse=always   файл назначения будет sparse
# пример конвертации в sparse
cp --sparse=always /path/to/file1 /path/to/file2

# rsync имеет опцию --sparse, но она полноценно не работает
# при локальном копировании с диска на диск в папке назначения файлы могут занимать в 1.5-2 раза больше места на диске, хотя будут частично разряженными
# опции --inplace и --whole-file не решают проблему
# при копировании через сеть опция --sparse может совсем не работать (не проверял)
# также есть мнение, что при копировании через сеть могут передаваться пустые участки, что значительно увеличивает трафик и время копирования (не проверял)

# к сожалению dar исключен из репозитория RHEL10

# актуальная версия tar поддерживает sparse
# пример архивации с конвертацией в sparse
tar --sparse -cJvf /path/to/file.tar.xz /path/to/file.dat

# если файл архива был создан с конвертацией в sparse, то при распаковке он будет восстановлен как sparse не зависимо от наличия опции --sparse
tar -xJvf /path/to/file.tar.xz

# (нужно проверить) возможно так все восстанавливаемые файлы будут конвертироваться в sparse
# даже если они не были sparse и архивировались без опции --sparse
tar --sparse -xJvf /path/to/file.tar.xz

# утилита du (disk usage)
du /path/to/file                   # объем занимаемый на диске, в том числе с учетом sparse
du --apparent-size /path/to/file   # логический размер файла, то что отображает ls -l --block-size=K

# утилита ls
ls -ls /path/to/file    # отдельно в первом столбце отображает размер занимаемый на диске в блоках, в том числе с учетом sparse