Поддержка разреженных файлов ntfs что это
Чтобы определить, поддерживает ли файловая система разреженные файлы, вызовите функцию жетволумеинформатион и изучите файл поддержка битового флага _ _ разреженных _ файлов , возвращаемого с помощью параметра лпфилесистемфлагс .
Большинство приложений не знают о разреженных файлах и не создают разреженные файлы. Тот факт, что приложение считывает разреженный файл, является прозрачным для приложения. Приложение, осведомленное о разреженных файлах, должно определять, подходит ли его набор данных для хранения в разреженном файле. После этого приложение должно явным образом объявить файл как разреженный с помощью фсктл _ Set _ разреженный код элемента управления.
После того как приложение настроило разреженный файл, приложение может использовать код элемента управления фсктл _ Set _ Zero _ , чтобы установить в качестве региона файла нулевое значение. Кроме того, приложение может использовать _ _ выделенный _ запрос фсктл , управляющий кодом, чтобы ускорить поиск ненулевых данных в разреженном файле.
При выполнении операции записи (с функцией или операцией, отличной от фсктл _ набора _ нулевых _ данных), данные которых состоят из нуля и равны нулю, нули записываются на диск для всей длины записи. Чтобы обнулить диапазон файла и сохранить разреженность, используйте фсктл _ набор _ нулевых _ данных.
Приложение, поддерживающее разреженность, также может задавать разреженность существующего файла. Если приложение задает разреженный файл, он должен просканировать файл для регионов, содержащих нули, и использовать фсктл _ _ нулевые _ данные для сброса этих регионов, что может привести к отмене выделения места на физическом диске. Приложение, обновленное до уровня разреженного файла, должно выполнить это преобразование.
При выполнении операции чтения с обнуленной части разреженного файла операционная система может не считывать с жесткого диска. Вместо этого система распознает, что часть файла, которая должна быть считана, содержит нули и возвращает буфер, заполненный нулями без фактического считывания с диска.
Как и в случае с любым другим файлом, система может записывать данные или считывать их из любой места в разреженном файле. Ненулевые данные, записываемые в ранее нулевую часть файла, могут привести к выделению места на диске. Нули, записываемые на ненулевые данные (только с _ нулевым набором _ _ данных фсктл), могут привести к освобождению места на диске.
Приложение может поддерживать разреженность, записывая нули с фсктл _ набором _ _ данных.
Средства дефрагментации, обрабатывающие сжатые файлы в файловых системах NTFS, будут правильно работать с разреженными файлами на томах с файловой системой NTFS. Большие и сильно фрагментированные разреженные файлы могут превысить ограничение NTFS в экстентах диска до того, как будет использовано доступное пространство.
В NTFS есть поддержка разреженных файлов (sparse files). Это такие файлы, которые занимают меньше дискового пространства, чем их собственный размер. Данная технология не имеет отношения к встроенной в NTFS поддержке компрессии файлов, так как экономия места на диске в sparse-файлах основана на другом принципе. Никакого сжатия данных не осуществляется. Вместо этого, в файле высвобождаются области, занятые одними лишь нулями (0x00). Приложение, читающее разреженный файл, дойдя до области с нулями, прочитает нули, но реального чтения с диска не произойдёт.
Таким образом можно создавать файлы гигантского размера, состоящие из нулей, но на диске они могут занимать всего лишь несколько килобайт. Реальное дисковое пространство выделяется тогда, когда вместо 0x00 записываются какие-то другие данные. Разреженность поможет сэкономить дисковое пространство только в таких файлах, в которых есть действительно большие пустые области.
Демонстрировать работу с разреженными файлами я буду с помощью системной утилиты fsutil в командной строке.
Создадим с помощью утилиты пустой файл большого размера:
fsutil file createnew test.nul 10000000000
Присвоим файлу атрибут «sparse»:
fsutil sparse setflag test.nul
Сам по себе атрибут ещё не приводит к экономии дискового пространства. Нужно ещё разметить внутри файла область, которая будет освобождена. У нас весь файл пустой, так что область можно задать в размер файла.
fsutil sparse setrange test.nul 0 10000000000
Готово. Смотрим результат.
Как проделывать эти операции в своих программах с помощью API функций, можете посмотреть в исходном коде небольшой утилиты, которую я написал в 2006-м. Она тоже консольная, и тоже как fsutil умеет присваивать атрибут sparse и задавать диапазон освобождаемой области. Кроме того, моя программка может сама искать в файле пустые области больше некоторого заданного размера и освобождать их. Отпадает необходимость самому вычислять смещения.
В этой статье пойдет речь о разреженных файлах. Расскажем об их недостатках и достоинствах, какие файловые системы поддерживают такие файлы. А также, как создавать или преобразовать их из обычных. Статья для новичков.
Разреженные – это специальные файлы, которые с большей эффективностью используют файловую систему, они не позволяют ФС занимать свободное дисковое пространство носителя, когда разделы не заполнены. То есть, «пустое место» будет задействовано только при необходимости. Пустая информация в виде нулей, будет хранится в блоке метаданных ФС. Поэтому, разреженные файлы изначально занимают меньший объем носителя, чем их реальный объем.
Этот тип поддерживает большинство файловый систем: BTRFS, NILFS, ZFS, NTFS, ext2, ext3, ext4, XFS, JFS, ReiserFS, Reiser4, UFS, Rock Ridge, UDF, ReFS, APFS, F2FS.
Все эти ФС полностью поддерживают такой тип, но в тоже время не предоставляют прямой доступ к их функциям по средством своего стандартного интерфейса. Управлять их свойствами можно только через команды командной строки.
Разреженные файлы в NTFS
В NTFS есть поддержка разреженных файлов (sparse files). Это такие файлы, которые занимают меньше дискового пространства, чем их собственный размер. Данная технология не имеет отношения к встроенной в NTFS поддержке компрессии файлов, так как экономия места на диске в sparse-файлах основана на другом принципе. Никакого сжатия данных не осуществляется. Вместо этого, в файле высвобождаются области, занятые одними лишь нулями (0x00). Приложение, читающее разреженный файл, дойдя до области с нулями, прочитает нули, но реального чтения с диска не произойдёт.
Удаление запущенного .exe с помощью потоков NTFS
Про потоки NTFS на хабре писали уже не раз, я же покажу, как с их помощью преодолеть одно ограничение Windows по работе с процессами. Тут эта тема в одном посте уже поднималась, но как-то вскользь. Я же хочу обратить на неё внимание.
Вы наверное знаете, что .exe файл работающего процесса невозможно удалить, пока он работает. Можно перемещать файл, но только в пределах своего раздела. С помощью потоков NTFS всё таки можно удалить файл процесса во время его работы.
Преимущества и недостатки
Самым большим преимуществом разреженных файлов является то, что пользователь может создавать файлы большого размера, которые занимают очень мало места для хранения. Пространство для хранения выделяется автоматически по мере записи на него данных. Разреженные файлы большого объема создаются за относительно короткое время, поскольку файловой системе не требуется предварительно выделять дисковое пространство для записи нулей.
Преимущества ограничены лишь приложениями, которые их поддерживают. Если у программы нет возможности распознавать или использовать их, то она сохранит их в исходном – несжатом состоянии, что не даст никаких преимуществ. Также с ними нужно быть осторожными, поскольку разреженный файл размером всего несколько мегабайт может внезапно увеличиться до нескольких гигабайт, когда неподдерживающие приложения скопируют его в место назначения.
Еще один из недостатков — это то, что нельзя скопировать или создать такой файл, если его номинальный размер превышает доступный объем свободного пространства (или ограничения размера квоты, налагаемые на учетные записи пользователей). Например, если исходный размер (со всеми нулевыми байтами) составляет 500 МБ, а для учетной записи пользователя, используемой для его создания, существует предел квоты в 400 МБ. Это приведет к ошибке даже если фактическое дисковое пространство, занимаемое им, составляет всего 50 МБ на диске.
Что касается накопителей, на которых хранятся такие данные, то они также подвержены фрагментации, поскольку файловая система будет записывать данные в разреженные файлы по мере необходимости. Со временем это может привести к снижению производительности. Кроме того, некоторые утилиты для управления дисками могут неточно отображать объем доступного свободного места. Когда файловая система почти заполнена, это может привести к неожиданным результатам. Например, могут возникать ошибки «переполнения диска», когда данные копируются поверх существующей части, которая была помечена как разреженная.
Разреженные файлы в ApFS
По сути, данный набор команд подходит и для файловой системы apple – ApFS, так как Linux и MacOS используют в своей основе архитектуру ядра Unix, они обе предоставляют доступ к Unix-командам и оболочке Bash.
Запустите терминал и выполните любую из команд, которую я использовал в Linux.
В MacOS Catalina работает только первая команда, и размер нужно указывать в байтах, иначе в результате команда выведет ошибку.
sudo dd if=/dev/zero of=sparse_APFS bs=1 count=0 seek=1000000000
Файловая система ApFS при соблюдении определенных условий создает разреженные файлы по умолчанию, поэтому для увеличения любого файла можно использовать команду:
dd if=/dev/zero of=187.jpg bs=1 count=0 seek=500000000
Зададим размер, к примеру, 500Мб, в MacOS размер нужно указывать в байтах.
В свойствах можно увидеть, что его размер увеличился до 500 Mb.
Разница между сжатием и разреженными файлами
Все файловые системы, которые я назвал выше, также поддерживают стандартную функцию сжатия. Оба этих инструмента дают преимущество в виде экономии места на диске, но достигают этой цели по-разному. Основным недостатком использования сжатия является то, что это может снизить производительность системы при выполнении операции чтения\ записи. Так как будут использоваться дополнительные ресурсы для распаковки или сжатия данных. Но некоторые программные продукты не поддерживают сжатие.
Пасхальное яйцо в блокноте и калькуляторе
В блокноте есть ключ /.SETUP, он присутствует в программе ещё со времён Windows 98, возможно был и раньше. Когда выходит новая версия Windows, я всегда проверяю, сохранился ли в блокноте этот ключ. Недавно вышла Windows 7, проверил — никуда не делся!
Что делает этот ключ? Посмотрите сами.
Пуск => Выполнить => notepad.exe /.SETUP
Открывается блокнот. Если попробуете кликнуть по нему — не будет реагировать на нажатия. И за блокнотом начнут проступать значки рабочего стола. В Windows 7 не так — значки за блокнотом можно двигать мышкой, но через окно приложения они не видны.
В Windows XP можно было в панели задач нажать по блокноту второй кнопкой мыши, нажать «развернуть» и продолжать работать с блокнотом, правда у него появлялось два скроллбара и становилась неактивной кнопка «свернуть». В Windows 7 у меня так сделать не получилось.
Кроме того, ключ /.SETUP ещё был у Калькулятора (calc.exe /.SETUP). Запущенный с этим ключом калькулятор отказывался считать и показывал вместо цифр последовательность 0e,+1 (точно не помню, вроде эту, негде посмотреть в данный момент). В Windows 7 калькулятор, видимо, был переписан, и теперь он не реагирует на этот ключ.
Об особенностях разреженных файлов, их преимуществах и ограничениях мы расскажем более подробно в данном обзоре.
По умолчанию, разреженные файлы являются специальным форматом представления, в котором часть цифровой последовательности заменена сведениями о ней (сформирован перечень дыр), что в свою очередь позволяет гораздо эффективнее задействовать возможности файловой системы. Информация об отсутствующих последовательностях располагается напрямую в метаданных файловой системы, а не занятый высвободившийся объем запоминающего устройства будет использоваться для записи по мере надобности. Такой подход значительно сокращает объем исходного файла и экономит пространство накопителя.
Разреженные файлы распознаются многими основными файловыми системами, задействованными при работе в Windows, Linux и MacOS.
Как и многие типы файловой организации, разреженные файлы обладают отличительными особенностями, предлагающими пользователям как выгоду, так и отдельные неудобства. К приоритетным выгодам безусловно относится эффективное использование дискового пространства. Любой, даже очень большой, файл может занимать на диске минимальный объем. И только по мере записи дополнительных данных область для хранения будет дополнительно увеличиваться. Процесс создания разреженных файлов также выгодно отличается от обычных, ведь системе требуется существенно меньше времени по причине пропуска последовательности нулевых байт. Дополнительно, меньший объем записи меньше нагружает диск и увеличивает срок его безотказной службы.
Помимо преимуществ, есть и недостатки. Система выполняет дополнительные операции с метаданными при записи информации о пропуске нулевых последовательностей. Не все ФС поддерживают разреженные файлы, и при переносе файла в такую систему, объем его может значительно возрасти по сравнению с исходником. А при ограниченном объеме конечного носителя операция копирования может быть полностью заблокирована или привести к непредсказуемым последствиям, ошибкам, логическим конфликтам, в том числе частичной перезаписи выделенной разреженной области. Также принудительная фрагментация при записи может сказаться на производительности, особенно при частой записи.
Поэтому выбирать, использовать или нет, разреженные файлы пользователи должны исходя из персональных потребностей и существующих задач.
Для создания разреженных файлов требуется использовать возможности командной строки в ОС Windows или терминала в Linux и MacOS.
Все операции с разряженными файлами осуществляет инструмент ФС «fsutil». В Windows запустите командную строку с привилегиями администратора. На первом этапе перейдите в требуемую папку, а потом наберите команду следующего вида, опустив граничные кавычки, для создания простого файла: «fsutil file createnew sparse-file 1000000000».
Атрибуты «sparse-file» и «1000000000» соответственно означают наименование файла и объем (единица измерения – байт).
Затем задайте новому файлу формат «разреженный», для чего следом введите в консоли команду (также без кавычек): «fsutil sparse setflag sparse-file».
Примечание. Если возникла потребность сменить атрибут файла и удалить присвоенное значение «разреженный», то внесите изменения в его формат посредством набора команды «fsutil sparse setflag sparse-file 0» (кавычки не использовать).
Дополнительно. Пользователи всегда могут проверить состояние формата файла и его заданную характеристику при помощи команды «fsutil sparse queryflag sparse-file». Сведения об атрибуте будут непосредственно сразу указаны в следующей строке после запроса.
На следующем этапе необходимо произвести разметку дисковой области, высвобождаемой внутри, чтобы экономично использовать накопитель. Наберите в консоли команду (без кавычек): «fsutil sparse setrange sparse-file 0 1000000000».
Примечание. Цифровые значения означают смещение. Единица измерения – байт. В нашем примере диапазон от 0 до одного гигабайта. Можно указать как полный объем, так и задать превышающее установленное значение.
Проверить факт присвоения атрибута можно командой «fsutil file layout sparse-file» (ограничивающие кавычки не использовать).
Данный атрибут может быть применен для любого по выбору файла и требует только указания в команде соответствующего наименования с востребованным размером. В нашем примере в расшифровке свойств отображается утверждение, что расширенный файл емкостью один гигабайт потребляет пространства накопителя ноль байт.
Создать разреженный файл в данной ОС несколько легче и можно воспользоваться двумя разными инструментами. Откройте терминал и введите указание к действию с командами «dd» или «truncate». Форма команды для создания разреженного файла в первом случае будет иметь вид (не использовать кавычки): «dd if=/dev/zero of=file-sparse bs=1 count=0 seek=2G».
Примечание. Атрибут «file-sparse» означает наименование файла. Заключительная цифра – готовый объем. Единица измерения – по выбору пользователя (мы указали в гигабайтах).
Второй вариант создания разреженного файла предполагает следующий вид команды (без обрамляющих кавычек): «truncate –s1G file-sparse2».
Примечание. Порядок записи атрибутов, по сравнению с первым способом, изменен, после характеристики «s» сначала задан объем файла, а потом указано его наименование.
Каждый способ непосредственно сразу напрямую создает разреженный файл и не требует последовательного двух шагового исполнения разных команд, как в операционной системе Windows.
Если же требуется привести к разреженному формату представления другой простой файл, то в Linux следует использовать следующую команду (кавычки опустить): «cp --sparse=always ./025.jpg ./0251.jpg».
Примечание. В представленной команде замените значения «025.jpg» и «0251.jpg» именами простого обычного файла и нового разреженного соответственно.
Для увеличения исходного готового файла задействуйте команду (кавычки не учитывать): «dd if=/dev/zero of=025.jpg bs=1 count=0 seek=2G».
Примечание. В нашем примере значение «025.jpg» указывает на имя увеличиваемого файла, а параметр в конце команды «2G» устанавливает его новый объем в два гигабайта.
Чтобы убедиться, какой размер выделен, введите без кавычек команду с именем проверяемого файла (в нашем примере имя файла «025.jpg») следующего вида: «du -h --apparent-size 025.jpg».
Файловая система ApFS, эксклюзивно используемая Apple, также поддерживает разреженные файлы, управлять которыми пользователи могут посредством команд для операционной системы Linux, представленными в предыдущем разделе, с отдельными уточнениями.
Например, для MacOS Catalina возможно использование только команды на основе утилиты формата «dd» с обязательным указанием объема разреженного файла только в одной единице измерения – байт. В противном случае система просигнализирует об ошибке. Вид команды в терминале выглядит следующим образом (без кавычек): «sudo dd if=/dev/zero of=sparse_APFS bs=1 count=0 seek=1000000000».
Указание для увеличения объема файла также требует задавать новый размер в байтах. Так, для увеличения объема до 400Мб команда примет вид (исключить кавычки): «dd if=/dev/zero of=025.jpg bs=1 count=0 seek=400000000».
Лучший способ восстановить разреженные файлы, как и для всех основных типов существующих файлов, - это воспользоваться готовой резервной копией, предварительно ранее созданной и хранящейся отдельно в защищенном месте. Однако данный способ не гарантирует полную сохранность данных и стопроцентный возврат файлов в случае их утраты или повреждения. Поэтому всегда следует иметь дополнительный вариант, а именно, программу для восстановления данных. Следует лишь убедиться, что такое решение обеспечивает восстановление разреженных файлов, поддерживает различные операционные и файловые системы, обладает мощным алгоритмом, оснащено дополнительными инструментами, повышающими степень удачного исхода, выполнено в понятном и удобном интерфейсе. Общение на тематических площадках и советы профессиональных специалистов по восстановлению помогут выбрать в Интернете подходящее решение.
Полную версию статьи со всеми дополнительными видео уроками смотрите в источнике. А также зайдите на наш Youtube канал, там собраны более 400 обучающих видео.
Как создать разреженный файл в Linux
В Linux процесс создания таких типов данных немного проще, поскольку существует несколько команд для их создания. Этот набор подойдет для всех файловых систем Linux.
Здесь можно использовать команду dd, либо truncate.
Первая команда имеет следующий вид:
dd if=/dev/zero of=file-sparse bs=1 count=0 seek=2G
Где file-sparse – имя, и в конце указан его размер, можно задать в байтах, мегабайтах и т.д.
Вторая команда проще, она имеет такой вид:
truncate -s2G file-sparse
Где значение s – указывает размер, после которого идет имя.
По сравнению с Windows, в Linux при создании такого файла одной из команд, он будет «разреженным» по умолчанию.
Для преобразования обычного в разреженный, есть отдельная команда:
cp --sparse=always ./025.jpg ./0251.jpg
Где 025.jpg – первое имя обычного.
0251.jpg – и второе имя разреженного.
Microsoft закрыла доступ к исходному коду утилит Sysinternals
В 2006 году Microsoft купила компанию Sysinternals. Разработчики Марк Руссинович и Брюс Когсвелл написали большое количество полезных системных утилит для управления, диагностики, устранения неполадок и мониторинга среды Microsoft Windows.
Сайт Sysinternals стал частью Microsoft Technet, утилиты по-прежнему доступны для загрузки здесь и здесь. Но до покупки компании, на сайте можно было скачать исходные коды программ, а теперь исходные коды недоступны.
Майкрософт утверждает, что исходный код был убран по причине того, что его доступность может вызвать проблемы с поддержкой других компонентов Windows.
Исходники программ Sysinternals демонстрировали такие возможности, как сокрытие информации в реестре, перехват и подключение API-функций для мониторинга файловой системы и другие интересные вещи. Зачастую в программах использовались недокументированные функции Native API, для выполнения действий, невозможных при использовании стандартного WinAPI.
К счастью, кто-то выложил на торренты зеркало сайта Sysinternals от 18 июля 2006 года (дата покупки компании), которое содержит не только страницы сайта, но и все утилиты и исходный код.
Заключение
Перед использованием этого функционала в любых ОС вам крайне важно узнать все их преимущества и недостатки. Знание этих особенностей гарантировано позволит вам избежать потенциальных проблем в будущем.
Полную версию статьи со всеми дополнительными видео уроками смотрите в источнике. А также зайдите на наш Youtube канал, там собраны более 400 обучающих видео.
В данной теме я рассмотрю четыре вида метаданных, которые могут быть прикреплены к файлу или каталогу средствами файловой системы NTFS. Я опишу, в каких целях можно использовать тот или иной тип метаданных, приведу пример его применения в какой-либо технологии Microsoft или стороннем программном обеспечении.
Речь пойдёт о точках повторной обработки (reparse points), идентификаторах объектов (object id) и о других типах данных, которые может содержать файл помимо своего основного содержимого.
Создаем разреженный файл в Windows
Для этого в ОС Windows будем использовать командную строку. В поиске пишем cmd и запускаем ее от имени администратора.
В Windows для управления такими данными используют программу fsutil (утилита файловой системы). При выполнении create, по умолчанию файл создается самый обычный. Переходим в папку где нужно его создать и вводим:
fsutil file createnew sparse-file 1000000000
Где sparse-file – имя, а в конце указан его размер в байтах.
Чтобы присвоить файлу значение «разреженный» вводим:
fsutil sparse setflag sparse-file
Для удаления этого флага выполняется следующая команда:
fsutil sparse setflag sparse-file 0
И чтобы снова присвоить атрибут:
fsutil sparse setflag sparse-file
fsutil sparse queryflag sparse-file
Сам по себе атрибут ещё не приводит к экономии дискового пространства. Для этого нужно разметить пустую область, которая будет освобождена внутри.
Для пометки пустой области введите:
fsutil sparse setrange sparse-file 0 1000000000
В конце указывается смещение и длина, они задаются в байтах. В моем случае от нуля до 1Гб.
Для установки полностью разреженного файла указываем полный объем. Если нужно можно расширить файл указав здесь большее значение.
Для того чтобы убедиться, что файлу присвоен данный атрибут выполним layout
fsutil file layout sparse-file
Такой Атрибут можно задать любому файлу. Просто выполнив эту команду с его именем и задать нужный вам размер.
В свойствах созданного ранее файла можно увидеть, что при размере в 1Гб. файл занимает на диске 0 байт.
Данный набор команд подходит для всех файловых систем Windows, которые поддерживают данный тип данных (NTFS, ReFS и т.д.).
Как увеличить
Если вам нужно увеличить уже существующий файл воспользуйтесь первой командой, здесь замените имя и укажите нужный размер.
dd if=/dev/zero of=025.jpg bs=1 count=0 seek=2G
Это увеличит его размер до 2 Гб.
Для проверки размера выполним такую команду:
du -h --apparent-size 025.jpg
Читайте также: