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

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

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

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

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

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

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

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

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

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

Обнаружение [ править ]

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

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

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

du --block-size = 1 разреженный файл ls -l разреженный файл

Копирование [ править ]

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

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

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

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

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

Через стандартный ввод [ править ]

cp --sparse = always / proc / self / fd / 0 новый разреженный файл <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. ^ Tridgell, Andrew (1996-06-29). «rsync: жесткие ссылки, улучшенная разреженная обработка, FERROR и FINFO» . Проверено 17 июня 2016 .
  5. ^ Tridgell, Andrew (2016-06-30). "Справочная страница rsync" . Проверено 19 января 2017 .
  6. ^ Дэвисон, Уэйн (2005-08-30). «rsync: отклонить попытки комбинировать --sparse с --inplace» . Проверено 19 января 2017 .

Внешние ссылки [ править ]

  • Редкие файлы NTFS для программистов
  • Создание разреженных файлов в Windows Server с помощью fsutil
  • Создание разреженных файлов в Solaris с помощью mkfile (1M)
  • Просмотр размера разреженного файла снимка базы данных
  • SEEK_HOLE или FIEMAP: обнаружение дыр в разреженных файлах
  • virtsync - это коммерческое решение проблем с rsync --sparseи --inplace.
  • SparseChecker - Утилита, позволяющая управлять разреженными файлами в файловой системе NTFS.
  • Phantom - программа для преобразования файлов в разреженные файлы для уменьшения дискового пространства
  • ArchLinux Wiki: разреженный файл