WikiDer > Редкий файл

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

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

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

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

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

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

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

Недостатки

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

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

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

Творчество

В Unix команда

 дд из=разреженный файл bs=5 млн искать=1 считать=0

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

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

 truncate -s 5M <имя файла>

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

 fallocate -d <имя файла>

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

Обнаружение

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

 ls -ls разреженный файл

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

 du - размер блока=1 разреженный файл ls -l разреженный файл

Копирование

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

cp sparse-file новый файл

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

cp --sparse = всегда file1 file1_sparsed

Некоторые реализации cp, например FreeBSDcp, не поддерживают - разреженный вариант и всегда будет расширять разреженные файлы. Частично жизнеспособной альтернативой для этих систем является использование rsync со своим - разреженный вариант[4] вместо cp. к несчастью - разреженный нельзя сочетать с --на месте.[5][6]

Через стандартный ввод

cp --sparse=всегда / proc / self / fd / 0 новый разреженный файл <некоторый файл

Смотрите также

Рекомендации

  1. ^ Джампаоло, Доминик (1999). Практическое проектирование файловой системы с файловой системой Be (PDF). Издательство Morgan Kaufmann. ISBN 9781558604971.
  2. ^ «Руководство по файловой системе Apple». Сайт разработчика Apple. Apple Inc.. Получено 27 апреля 2017.
  3. ^ Джим Мейеринг (1995-12-21). "GNU coreutils / cp: принять новую опцию, --sparse = {never, auto, always}, чтобы управлять созданием разреженных файлов". Получено 2016-06-17.
  4. ^ Триджелл, Эндрю (1996-06-29). "rsync: жесткие ссылки, улучшенная обработка разреженных данных, FERROR и FINFO". Получено 2016-06-17.
  5. ^ Триджелл, Эндрю (2016-06-30). "справочная страница rsync". Получено 2017-01-19.
  6. ^ Дэвисон, Уэйн (2005-08-30). "rsync: отклонить попытки объединить --sparse с --inplace". Получено 2017-01-19.

внешняя ссылка