Предотвращение крайней фрагментации сжатых образов системы в NTFS


8

Объяснение проблемы

Я храню образы дисков Windows, созданные с помощью wbadmin, на диске NTFS, и я обнаружил, что сжатие, а затем сжатие NTFS обеспечивает сохранение пространства в 1,5–2 раза, при этом обеспечивая полную доступность для восстановления.

Но в процессе сжатия файл становится безумно фрагментированным, обычно более 100 000 фрагментов для образа системного диска.

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

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

Вопрос

Есть ли хороший (быстрый) способ дефрагментировать файл изображения, но сохранить его сжатым (или сжать, не вызывая чрезмерной фрагментации)? Может быть, какая-то утилита для быстрой дефрагментации файла на непрерывное свободное пространство или какая-то утилита (или метод) для создания не фрагментированного сжатого файла из существующего несжатого?

Замечания на основе комментариев / ответов:

  1. Внешние (для ядра Windows) инструменты сжатия не подходят в моем случае. Они не могут распаковать файл «на лету» (для распаковки файла 10 Гб мне нужно 10 Гб свободного места, что не всегда под рукой; также, это занимает много времени); они не доступны, когда система загружается с DVD для восстановления (это именно то, когда мне нужно изображение доступно). Пожалуйста, прекратите предлагать их, если они не создадут транзитивно сжатый файл на NTFS, например compact.exe.
  2. Сжатие NTFS не так уж плохо для системных образов. Это довольно хорошо, за исключением фрагментации. Кроме того, распаковка не занимает много времени ЦП, тем не менее, уменьшая узкие места ввода-вывода, что в соответствующих случаях повышает производительность (не фрагментированный сжатый файл со значительным соотношением).
  3. Утилиты дефрагментации дефрагментируют файлы, не обращая внимания на их сжатие. Единственная проблема - это количество фрагментов, что приводит к сбою дефрагментации, независимо от того, сжатый файл или нет. Если количество фрагментов невелико (около 10000 уже в порядке), сжатый файл будет дефрагментирован и останется сжатым и неповрежденным.
  4. Степень сжатия NTFS может быть хорошей, в зависимости от файлов. Системные изображения обычно сжимаются не более чем на 70% от их исходного размера.

    Пара скриншотов для тех, кто не верит, но, конечно, вы можете сделать свои собственные тесты.

  5. Я действительно делал восстановление из NTFS-сжатых образов, как фрагментированных, так и не фрагментированных, это работает, пожалуйста, либо доверяйте мне, либо просто проверьте это сами. rem: как я обнаружил около года назад, он не работает в Windows 8.1. Это работает в Windows 7, 8 и 10.

Ожидаемый ответ:

рабочий метод или программа для Windows:

  1. сжать файл (со сжатием NTFS и сохранить его доступным для восстановления Windows) без создания большого количества фрагментов (возможно, в другой раздел или создать сжатую копию; на жестком диске он должен быть как минимум в 3 раза быстрее, чем compact+ defrag),

    или

  2. быстро (по крайней мере, в 3 раза быстрее, чем дефрагментация Windows на жестком диске) дефрагментировать разрушенно фрагментированный файл, например, содержащий более 100K фрагментов (после дефрагментации он должен оставаться сжатым).


Мне кажется странным, что NTFS сжимает так много (так как реальные тесты показывают снижение только на 2-5%). Кроме того, NTFS имеет некоторые меры предосторожности в отношении фрагментации файлов (например, ведение журнала). Насколько большие файлы (до и после)? Кроме того, с картинки кажется, что Defraggler не может дефрагментировать сжатые файлы.
Доктор Рейхард

1
1. Вы можете сделать изображение Windows самостоятельно и сжать его. Он действительно легко сжимается как минимум в 1,5 раза (60-70% или оригинальный размер). 2. Да, дефрагментатор и другие дефрагментаторы МОГУТ дефрагментировать сжатые файлы. Это реальный опыт.
LogicDaemon

Кроме того, степень сжатия не по теме, но здесь представлены реальные образы реально установленных Windows 7 Professional (в основном 32-разрядных, 3 или 4 64-разрядных) систем со стандартным набором программного обеспечения: i.imgur.com/C4XnUUl .png
LogicDaemon

@DoktoroReichard это зависит от содержимого файлов. Текстовые файлы и разреженные файлы будут иметь очень хорошую степень сжатия. Обычно я избегаю файлов, которые уже сжаты, таких как zip-файлы, изображения, аудио / видео файлы ... и после сжатия я часто нахожусь в уменьшенном размере на 10-20%
phuclv

Ответы:


4

Как избежать фрагментации

Секрет в том, чтобы не записывать несжатые файлы на диск для начала.

Действительно, после сжатия уже существующего большого файла он будет ужасно фрагментирован из-за природы алгоритма сжатия на месте NTFS.

Вместо этого вы можете полностью избежать этого недостатка, заставляя ОС сжимать содержимое файла на лету перед записью его на диск. Таким образом, сжатые файлы будут записаны на диск как любые обычные файлы - без непреднамеренных пробелов. Для этого вам нужно создать сжатую папку. (Точно так же, как вы помечаете файлы для сжатия, вы можете пометить папки для сжатия.) После этого все файлы, записанные в эту папку, будут сжаты на лету (т.е. записаны как потоки сжатых блоков). Файлы, сжатые таким образом, могут все еще быть несколько фрагментированными, но это будет далеко от беспорядка, который создает сжатие NTFS на месте.

пример

NTFS сжал системный образ размером 232 МБ до 125 МБ

  • Сжатие на месте создало колоссальные 2680 фрагментов!
  • Сжатие на лету создало 19 фрагментов.

дефрагментация

Это правда, что сжатые файлы NTFS могут создавать проблемы для некоторых инструментов дефрагментации. Например, инструмент, который я обычно использую, не может эффективно с ними работать - он замедляется до сканирования. Не беспокойтесь, старый верный Contig от Sysinternals выполняет работу по дефрагментации сжатых файлов NTFS быстро и без усилий!


2

Читая статью в Википедии о сжатии NTFS :

Файлы сжимаются в 16-кластерные блоки. С кластерами 4 КБ файлы сжимаются в блоки по 64 КБ. Если при сжатии данных уменьшается 64 КБ до 60 КБ или менее, NTFS рассматривает ненужные страницы 4 КБ как пустые разреженные кластеры файлов - они не записываются.

Это обеспечивает разумное время произвольного доступа - ОС просто должна следовать цепочке фрагментов.

Однако большие сжимаемые файлы становятся сильно фрагментированными, так как каждый фрагмент <64 КБ становится фрагментом.

Обо всем по порядку. WBAdmin по сути является утилитой резервного копирования, которая может полностью восстановить систему. Таким образом, ожидается, что его выходной файл большой (> 4 Гб). Как видно из цитаты, большие файлы быстро фрагментируются. Это связано с тем, как NTFS сжимает: не по файлам, а по секторам.

Хорошей аналогией является разделение торта на несколько коробок, некоторые из которых не пустые. Это исходный файл. Компрессионная часть сжимает кусочки торта, оставляя пространство в коробках. Поскольку кусочки торта не вместе, из-за созданного пространства кусочки, которые составляют торт, становятся фрагментированными.

Я по-прежнему скептически отношусь к тому, что NTFS выдает такую ​​степень сжатия. В соответствии с тестом, проведенным MaximumCompression для нескольких файлов, NTFS получает наименьшую оценку в степени сжатия - 40%. По личному опыту могу сказать, что он намного ниже, на самом деле настолько низок, что никогда не удосужился его использовать и не видел его эффектов.

Лучший способ избежать фрагментации - перестать полагаться на NTFS. Большинство дефрагментаторов не смогут развернуть или переместить сжатые файлы. Если каким-то образом они это сделают, NTFS не сможет развернуть файлы, или если он сможет, так как процесс дефрагментации заполнит оставшееся пространство после сжатия (4 КБ), расширение будет фрагментировать файлы, так как файл не сможет быть написано в до смежных кластеров.

Это, как говорится, и если вам не нужно постоянно читать файл, используйте некоторые из форматов, рекомендованных в приведенной выше ссылке. 7z и rar довольно эффективны (то есть они сжимаются с высокими соотношениями в достойное время). Если вам нужно пространство, а не время, выберите алгоритм типа PAQ (хотя вы будете тратить очень много времени на сжатие и распаковку файлов). Есть также быстрые алгоритмы.

Если вам нужно постоянно читать файл, не сжимайте его вообще. NTFS просто чертовски грязная.


Этот (см. В Википедии) источник на самом деле содержит хорошую, хотя и техническую, информацию обо всем процессе.
Доктор Рейхард

Степень сжатия не по теме, но здесь представлены реальные образы реально установленных Windows 7 Professional (в основном 32-разрядных, 3 или 4 64-разрядных) систем со стандартным набором программного обеспечения: i.imgur.com/C4XnUUl.png С компрессией я действительно экономлю дисковое пространство. И потом я могу дефрагментировать файлы, но это занимает слишком много времени.
LogicDaemon

И по поводу «избежания» сжатия NTFS: я делаю это годами, и это работает почти безупречно, за исключением фрагментации. Он действительно не должен использоваться для часто используемых файлов из-за проблем с производительностью, но большинство исполняемых файлов и текста сжимаются очень хорошо. Кроме того, последовательно записанные файлы, такие как журналы, не фрагментируются так сильно, все еще сжимаясь. И, конечно же, сжатые образы системы прекрасно восстанавливаются, что делается много раз, и вам не нужно явно «расширять» их, это, очевидно, выполняется автоматически с помощью блочного блока памяти драйвера NTFS.
LogicDaemon

1
Я не могу спорить с результатами (и для протокола, я действительно изложил фактические результаты теста, которые были похожи на ваши, и мой личный опыт, который, кажется, датирован). Ссылка, которую я дал в комментарии, содержит информацию о том, почему невозможно избежать проблемы фрагментации. Также в статье Википедии говорится, что при загрузке Windows еще не загрузила библиотеку сжатия для NTFS, также не уверена в процессе восстановления. Это может обеспечить понимание.
Доктор Рейхард

Спасибо, но это не тот ответ, который я хотел получить :) Я надеялся, что будет способ получить сжатый, но не фрагментированный файл, записав его последовательно или с помощью блоков такого же размера, как блок сжатия. Или есть действительно эффективная программа дефрагментации, которая может быстро дефрагментировать отдельные файлы, когда для этого достаточно свободного места.
LogicDaemon

0

Хотя это не совсем то, о чем спрашивал OP, у меня был хороший опыт работы со сторонним программным обеспечением под названием Paragon. NTFS, по определению, ужасно разрушает вашу файловую систему, когда вы сжимаете (а иногда даже пишете) файлы. Это распространяется на использование нескольких записей MFT, и ... Это плохо. Драйвер Microsoft NTFS даже не очищает это, когда файл подвергается дефрагментации. Следовательно, необходимы сторонние инструменты. Paragon позволяет вам загружать его как отдельную ОС (образ ISO) или устанавливать в другую ОС Windows с доступом к целевой файловой системе. Затем вы можете дефрагментировать как MFT, так и файлы. Насколько мне известно, это единственный способ исправить этот недостаток в NTFS, если не считать переформатирование тома.

(Я не имею никакого отношения к инструменту или его создателю, кроме того, что это единственное, что я нашел на самом деле работает)

Сегодня, спустя 2 года после того, как вопрос был задан, я бы предпочел дедупликацию - это может сэкономить до 90% дискового пространства, если образы «немного» отличаются. Нано-сервер W2016 внутри виртуальной машины работает очень хорошо, но я подозреваю, что даже FreeNAS или что-либо еще, использующее ZFS, справится с этим.


любой URL или более точное имя, чем просто "Paragon"? Гугл меня не понимает. Я знаю софтверную компанию Paragon, но ничего не знаю о ее продуктах, которые будут дефрагментировать файлы NTFS (есть инструмент дефрагментации MFT, но у меня нет проблем с MFT). И спасибо за предложение ZFS, я посмотрю на него, но опять же, мне нужно, чтобы он мог загружаться в поле для быстрого восстановления на месте.
LogicDaemon

-1

В последнее время Windows рассматривает ZIP-файлы как папки. ZIP-файлы могут быть более сжаты, чем NTFS-сжатые файлы, и не являются фрагментированными по своей природе, в отличие от NTFS.

Почему бы не протестировать один из ваших образов дисков, сжав их 7-zip в формате ZIP и посмотреть, можно ли его восстановить напрямую?

Если нет, поиграйте с параметрами сжатия 7-zip, чтобы максимизировать сжатие, используя лучший формат, например, 7z. Вы можете увеличить сжатие намного больше, чем NTFS, и, следовательно, освободить гораздо больше места на диске - хотя быстрее всего распаковать его на второй физический диск или оперативную память, предпочтительно на другой контроллер и кабель ввода-вывода.

FWIW, сжатие окупается для SSD-дисков, не являющихся песочницами, для системных дисков и для файлов, не относящихся к мультимедиа - меньше износа SSD, больше места и более быстрый ввод / вывод для несжатых файлов. См. Http://www.tomshardware.com/reviews/ssd-ntfs-compression,3073-9.html.

Видео, графика и другие сжатые файлы данных (например, .XLSX) уже очень сжаты, поэтому нет никакой пользы для сжатия NTFS. Ни для баз данных, ни для почты Outlook со случайными обновлениями. Но исполняемые файлы, txt, html и т. Д. Файлы получают большую выгоду.

Сжатие также всегда выгодно для небольших файлов, например, если сжатие <64K, только один фрагмент. Только хлопот будет восстановление, если есть проблемы с диском.


1
Чувак, ты ошибаешься во многих отношениях ... В основном, окна никогда не рассматривали ZIP-файлы как папки. Есть технические причины, по которым этого даже не произойдет (в основном, только последовательный доступ к содержимому файлов). Проводник, хотя он позволяет управлять почтовыми индексами аналогично папкам (но очень ограниченным образом, он даже не извлекает другие файлы, когда я открываю html из zip), не является Windows. И в вопросе я объяснил, почему отдельные утилиты, будь то Explorer или 7-Zip, не подходят (см. «Замечания, основанные на комментариях / ответах»)
LogicDaemon

Кстати, обратите внимание на «меньше износа на SSD»: если SSD не имеет достаточно большой кэш, это в 2 раза больше износа. Потому что при сохранении сжатого файла Windows сначала сохраняет несжатые кластеры, затем сжимает их и сохраняет сжатые (затем удаляет несжатые). Это то, что вызывает фрагментацию в предмете моего вопроса, в конце концов. SSD-диски Samsung по ссылке (сломанные, удалите "les" из хвоста) имеют достаточно большой кэш.
LogicDaemon

нет, Windows никогда не рассматривает zip и cab файлы как папки. Вы можете просматривать их содержимое (имена файлов / папок) прямо на моем компьютере, но вы не можете получить к ним прозрачный доступ, как образ диска или сжатый файл NTFS. Вы все еще должны извлечь файл из архива, где его можно просмотреть / отредактировать
phuclv
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.