Jump to content

Разреженный файл

Разреженный файл: пустые байты не нужно сохранять и вместо этого могут быть представлены метаданными .

В информатике разреженный файл — это тип компьютерного файла , который пытается более эффективно использовать пространство файловой системы , когда сам файл частично пуст. Это достигается путем записи краткой информации ( метаданных ) , представляющей пустые блоки, на носитель данных вместо фактического «пустого» пространства, составляющего блок, что позволяет потреблять меньше места для хранения. Полный блок записывается на носитель в реальном размере только в том случае, если блок содержит «реальные» (непустые) данные.

Чаще всего разреженные файлы создаются, когда блоки файла никогда не записываются. Это типично для файлов с произвольным доступом, таких как базы данных. Некоторые операционные системы и утилиты идут еще дальше, «разрежая» файлы при их записи или копировании: если блок содержит только нулевые байты, он не записывается в хранилище, а помечается как пустой.

При чтении разреженных файлов файловая система прозрачно преобразует метаданные, представляющие пустые блоки, в «настоящие» блоки, заполненные нулевыми байтами во время выполнения. Приложение не знает об этом преобразовании.

Большинство современных файловых систем поддерживают разреженные файлы, включая большинство вариантов Unix и NTFS . [1] от Apple HFS+ не обеспечивает поддержку разреженных файлов, но в OS X уровень виртуальной файловой системы поддерживает их хранение в любой поддерживаемой файловой системе, включая HFS+. [ нужна ссылка ] Apple File System (APFS) также их поддерживает. [2] Разреженные файлы обычно используются для образов дисков , снимков баз данных , файлов журналов и в научных приложениях.

Преимущества

[ редактировать ]

Преимущество разреженных файлов заключается в том, что пространство для хранения выделяется только тогда, когда это действительно необходимо: емкость хранилища сохраняется, и иногда можно создавать большие файлы, даже если на носителе недостаточно свободного места для исходного файла. Это также сокращает время первой записи, поскольку системе не нужно выделять блоки для «пропущенного» пространства. Если первоначальное распределение требует записи всех нулей в пространство, это также избавляет систему от необходимости дважды записывать «пропущенное» пространство.

Например, для образа виртуальной машины с максимальным размером 100 ГБ, в который фактически записано 2 ГБ файлов, потребуются полные 100 ГБ при резервном копировании в предварительно выделенном хранилище, но только 2 ГБ для разреженного файла. Если файловая система поддерживает перфорацию, а гостевая операционная система выдает команды TRIM , удаление файлов на гостевой системе соответственно уменьшит необходимое пространство.

Недостатки

[ редактировать ]

Недостатком является то, что разреженные файлы могут стать фрагментированными ; отчеты о свободном пространстве файловой системы могут вводить в заблуждение; заполнение файловых систем, содержащих разреженные файлы, может иметь неожиданные последствия (например, ошибки переполнения диска или превышения квоты при простой перезаписи существующей части файла, который оказался разреженным); а копирование разреженного файла с помощью программы , которая их явно не поддерживает, может скопировать весь несжатый размер файла, включая нулевые разделы, которые не выделены на носителе, теряя преимущества разреженного свойства в файле. Разреженные файлы также не полностью поддерживаются всеми программами и приложениями для резервного копирования. Однако реализация VFS обходит стороной [ нужна ссылка ] предыдущие два недостатка. Загрузка исполняемых файлов в 32-битной Windows (exe или dll), которые являются разреженными, занимает гораздо больше времени, поскольку файл не может быть отображен в памяти в ограниченном адресном пространстве размером 4 ГБ и не кэшируется, поскольку не существует кодового пути для кэширования 32-битных разреженных исполняемых файлов ( Windows на 64-битных архитектурах может отображать разреженные исполняемые файлы). [ нужна ссылка ] В NTFS разреженные файлы (вернее, их ненулевые области) сжать невозможно. NTFS реализует разреженность как особый вид сжатия, поэтому файл может быть либо разреженным, либо сжатым.

Разреженные файлы в Unix

[ редактировать ]

Разреженные файлы обычно обрабатываются прозрачно для пользователя. Но в некоторых ситуациях различия между обычным файлом и разреженным файлом становятся очевидными.

Создание

[ редактировать ]

Команда Unix

dd of=sparse-file bs=5M seek=1 count=0

создаст файл размером пять мегабайт , но без данных, хранящихся на носителе (только метаданные ). ( ГНУ dd имеет такое поведение, потому что он вызывает ftruncate установить размер файла; другие реализации могут просто создать пустой файл.)

Аналогичным образом можно использовать команду truncate, если она доступна:

truncate -s 5M <filename>

В Linux существующий файл можно преобразовать в разреженный следующим образом:

fallocate -d <filename>

Не существует переносимого системного вызова для пробивания дыр; Linux предоставляет fallocate(FALLOC_FL_PUNCH_HOLE)и Солярис предоставляет fcntl(F_FREESP).

Обнаружение

[ редактировать ]

The -s вариант ls Команда показывает занятое пространство в блоках.

ls -ls sparse-file

Альтернативно, du команда печатает занятое пространство, а ls печатает видимый размер. В некоторых нестандартных версиях du, опция {{{1}}} печатает занятое пространство в байтах, а не в блоках, чтобы его можно было сравнить с ls выход:

du --block-size=1 sparse-file
ls -l sparse-file

Обратите внимание, что приведенное выше использование du имеет сокращенный формат синтаксиса опций «du -B 1 sf», который сам по себе эквивалентен самой короткой версии «du -b sf», как указано в руководстве du: [3] -b, --bytes эквивалентно --apparent-size --block-size=1.

Кроме того, инструмент filefrag от e2fsprogs Пакет можно использовать для отображения деталей распределения блоков файла.

filefrag -v sparse-file

Копирование

[ редактировать ]

Обычно версия GNU cp хорошо определяет, является ли файл разреженным, поэтому

cp sparse-file new-file

создает новый файл, который будет разреженным. Однако у GNU cp есть --sparse вариант. [4] Это особенно полезно, если файл, содержащий длинные нулевые блоки, сохранен неразреженным способом (т. е. нулевые блоки были записаны на носитель полностью). Сэкономить место для хранения можно, выполнив следующие действия:

cp --sparse=always file1 file1_sparsed

Некоторые реализации cp, например cp во FreeBSD , не поддерживают --sparse вариант и всегда будет расширять разреженные файлы. Частично жизнеспособной альтернативой в этих системах является использование rsync со своим собственным --sparse вариант [5] вместо КП. К сожалению --sparse нельзя совмещать с --inplace. [6] [7] Более новые версии rsync поддерживают --sparse в сочетании с --inplace. [8]

С помощью стандартного ввода разреженное копирование файлов достигается следующим образом:

cp --sparse=always /dev/fd/0 new-sparse-file < somefile

См. также

[ редактировать ]
  1. ^ Джампаоло, Доминик (1999). Практическое проектирование файловой системы с помощью файловой системы Be (PDF) . Издательство Морган Кауфманн . ISBN  9781558604971 .
  2. ^ «Руководство по файловой системе Apple» . Сайт разработчиков Apple . Apple Inc. Проверено 27 апреля 2017 г.
  3. ^ «Du(1) — страница руководства Linux» .
  4. ^ Мейеринг, Джим (21 декабря 1995 г.). «GNU coreutils/cp: принять новую опцию --sparse={never,auto,always}, чтобы контролировать создание разреженных файлов» . Проверено 17 июня 2016 г.
  5. ^ Триджелл, Эндрю (29 июня 1996 г.). «rsync: жесткие ссылки, улучшенная обработка разреженных данных, FERROR и FINFO» . Проверено 17 июня 2016 г.
  6. ^ Триджелл, Эндрю (30 июня 2016 г.). «Справочная страница rsync» . Проверено 19 января 2017 г.
  7. ^ Дэвисон, Уэйн (30 августа 2005 г.). «rsync: отклонять попытки объединить --sparse с --inplace» . Проверено 19 января 2017 г.
  8. ^ Дэвисон, Уэйн. «Поддержка --sparse в сочетании с --preallocate или --inplace» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 219f67dd80abf8721c9a5ade4eaf8415__1715386320
URL1:https://arc.ask3.ru/arc/aa/21/15/219f67dd80abf8721c9a5ade4eaf8415.html
Заголовок, (Title) документа по адресу, URL1:
Sparse file - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)