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

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

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

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

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

Содержание

  • 1 Преимущества
  • 2 Недостатки
  • 3 Разреженные файлы в Unix
    • 3.1 Создание
    • 3.2 Обнаружение
    • 3.3 Копирование
    • 3.4 Через стандартный ввод
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки

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

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

Например, для образа виртуальной машины с максимальным размером 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

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

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

truncate -s 5M 

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

fallocate -d 

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

Detection

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

ls -ls sparse-file

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

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

Копирование

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

cp sparse-file new-file

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

cp --sparse = always file1 file1_sparsed

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

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

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

См. Также

Ссылки

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

Внешние ссылки

Последняя правка сделана 2021-06-09 01:46:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте