Объяснение проблемы
Я храню образы дисков Windows, созданные с помощью wbadmin, на диске NTFS, и я обнаружил, что сжатие, а затем сжатие NTFS обеспечивает сохранение пространства в 1,5–2 раза, при этом обеспечивая полную доступность для восстановления.
Но в процессе сжатия файл становится безумно фрагментированным, обычно более 100 000 фрагментов для образа системного диска.
При такой фрагментации дефрагментация занимает очень много времени (несколько часов на изображение). Некоторые дефрагментаторы даже не могут с этим справиться, они просто пропускают файл или вылетают.
Я думаю, что источником проблемы является то, что файл сжат кусками, которые сохраняются отдельно.
Вопрос
Есть ли хороший (быстрый) способ дефрагментировать файл изображения, но сохранить его сжатым (или сжать, не вызывая чрезмерной фрагментации)? Может быть, какая-то утилита для быстрой дефрагментации файла на непрерывное свободное пространство или какая-то утилита (или метод) для создания не фрагментированного сжатого файла из существующего несжатого?
Замечания на основе комментариев / ответов:
- Внешние (для ядра Windows) инструменты сжатия не подходят в моем случае. Они не могут распаковать файл «на лету» (для распаковки файла 10 Гб мне нужно 10 Гб свободного места, что не всегда под рукой; также, это занимает много времени); они не доступны, когда система загружается с DVD для восстановления (это именно то, когда мне нужно изображение доступно). Пожалуйста, прекратите предлагать их, если они не создадут транзитивно сжатый файл на NTFS, например
compact.exe
. - Сжатие NTFS не так уж плохо для системных образов. Это довольно хорошо, за исключением фрагментации. Кроме того, распаковка не занимает много времени ЦП, тем не менее, уменьшая узкие места ввода-вывода, что в соответствующих случаях повышает производительность (не фрагментированный сжатый файл со значительным соотношением).
- Утилиты дефрагментации дефрагментируют файлы, не обращая внимания на их сжатие. Единственная проблема - это количество фрагментов, что приводит к сбою дефрагментации, независимо от того, сжатый файл или нет. Если количество фрагментов невелико (около 10000 уже в порядке), сжатый файл будет дефрагментирован и останется сжатым и неповрежденным.
Степень сжатия NTFS может быть хорошей, в зависимости от файлов. Системные изображения обычно сжимаются не более чем на 70% от их исходного размера.
Пара скриншотов для тех, кто не верит, но, конечно, вы можете сделать свои собственные тесты.
Я действительно делал восстановление из NTFS-сжатых образов, как фрагментированных, так и не фрагментированных, это работает, пожалуйста, либо доверяйте мне, либо просто проверьте это сами. rem: как я обнаружил около года назад, он не работает в Windows 8.1. Это работает в Windows 7, 8 и 10.
Ожидаемый ответ:
рабочий метод или программа для Windows:
сжать файл (со сжатием NTFS и сохранить его доступным для восстановления Windows) без создания большого количества фрагментов (возможно, в другой раздел или создать сжатую копию; на жестком диске он должен быть как минимум в 3 раза быстрее, чем
compact
+defrag
),или
быстро (по крайней мере, в 3 раза быстрее, чем дефрагментация Windows на жестком диске) дефрагментировать разрушенно фрагментированный файл, например, содержащий более 100K фрагментов (после дефрагментации он должен оставаться сжатым).
источник
Ответы:
Как избежать фрагментации
Секрет в том, чтобы не записывать несжатые файлы на диск для начала.
Действительно, после сжатия уже существующего большого файла он будет ужасно фрагментирован из-за природы алгоритма сжатия на месте NTFS.
Вместо этого вы можете полностью избежать этого недостатка, заставляя ОС сжимать содержимое файла на лету перед записью его на диск. Таким образом, сжатые файлы будут записаны на диск как любые обычные файлы - без непреднамеренных пробелов. Для этого вам нужно создать сжатую папку. (Точно так же, как вы помечаете файлы для сжатия, вы можете пометить папки для сжатия.) После этого все файлы, записанные в эту папку, будут сжаты на лету (т.е. записаны как потоки сжатых блоков). Файлы, сжатые таким образом, могут все еще быть несколько фрагментированными, но это будет далеко от беспорядка, который создает сжатие NTFS на месте.
пример
NTFS сжал системный образ размером 232 МБ до 125 МБ
дефрагментация
Это правда, что сжатые файлы NTFS могут создавать проблемы для некоторых инструментов дефрагментации. Например, инструмент, который я обычно использую, не может эффективно с ними работать - он замедляется до сканирования. Не беспокойтесь, старый верный Contig от Sysinternals выполняет работу по дефрагментации сжатых файлов NTFS быстро и без усилий!
источник
Читая статью в Википедии о сжатии NTFS :
Обо всем по порядку. WBAdmin по сути является утилитой резервного копирования, которая может полностью восстановить систему. Таким образом, ожидается, что его выходной файл большой (> 4 Гб). Как видно из цитаты, большие файлы быстро фрагментируются. Это связано с тем, как NTFS сжимает: не по файлам, а по секторам.
Хорошей аналогией является разделение торта на несколько коробок, некоторые из которых не пустые. Это исходный файл. Компрессионная часть сжимает кусочки торта, оставляя пространство в коробках. Поскольку кусочки торта не вместе, из-за созданного пространства кусочки, которые составляют торт, становятся фрагментированными.
Я по-прежнему скептически отношусь к тому, что NTFS выдает такую степень сжатия. В соответствии с тестом, проведенным MaximumCompression для нескольких файлов, NTFS получает наименьшую оценку в степени сжатия - 40%. По личному опыту могу сказать, что он намного ниже, на самом деле настолько низок, что никогда не удосужился его использовать и не видел его эффектов.
Лучший способ избежать фрагментации - перестать полагаться на NTFS. Большинство дефрагментаторов не смогут развернуть или переместить сжатые файлы. Если каким-то образом они это сделают, NTFS не сможет развернуть файлы, или если он сможет, так как процесс дефрагментации заполнит оставшееся пространство после сжатия (4 КБ), расширение будет фрагментировать файлы, так как файл не сможет быть написано в до смежных кластеров.
Это, как говорится, и если вам не нужно постоянно читать файл, используйте некоторые из форматов, рекомендованных в приведенной выше ссылке. 7z и rar довольно эффективны (то есть они сжимаются с высокими соотношениями в достойное время). Если вам нужно пространство, а не время, выберите алгоритм типа PAQ (хотя вы будете тратить очень много времени на сжатие и распаковку файлов). Есть также быстрые алгоритмы.
Если вам нужно постоянно читать файл, не сжимайте его вообще. NTFS просто чертовски грязная.
источник
Хотя это не совсем то, о чем спрашивал OP, у меня был хороший опыт работы со сторонним программным обеспечением под названием Paragon. NTFS, по определению, ужасно разрушает вашу файловую систему, когда вы сжимаете (а иногда даже пишете) файлы. Это распространяется на использование нескольких записей MFT, и ... Это плохо. Драйвер Microsoft NTFS даже не очищает это, когда файл подвергается дефрагментации. Следовательно, необходимы сторонние инструменты. Paragon позволяет вам загружать его как отдельную ОС (образ ISO) или устанавливать в другую ОС Windows с доступом к целевой файловой системе. Затем вы можете дефрагментировать как MFT, так и файлы. Насколько мне известно, это единственный способ исправить этот недостаток в NTFS, если не считать переформатирование тома.
(Я не имею никакого отношения к инструменту или его создателю, кроме того, что это единственное, что я нашел на самом деле работает)
Сегодня, спустя 2 года после того, как вопрос был задан, я бы предпочел дедупликацию - это может сэкономить до 90% дискового пространства, если образы «немного» отличаются. Нано-сервер W2016 внутри виртуальной машины работает очень хорошо, но я подозреваю, что даже FreeNAS или что-либо еще, использующее ZFS, справится с этим.
источник
В последнее время 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, только один фрагмент. Только хлопот будет восстановление, если есть проблемы с диском.
источник