У меня стало заканчиваться место на диске, и я первым делом проверил размеры VHDX-файлов своих виртуальных машин, где используются динамически расширяемые диски. На самой ненужной ВМ с экспериментальной Windows 10 размер файла составлял 51GB, что примерно соответствовало занятому пространству в гостевой ОС.
👉 Пошаговые инструкции по устранению препятствий к сжатию системного раздела
Я выполнил в ВМ очистку диска, удалив 25GB Windows.old и прочего мусора, что сократило занятое пространство до 22GB. Затем я выключил ВМ, в ее настройках перешел к редактированию диска и выбрал сжатие.
Но по завершении операции размер файла сократился всего на 3GB.
Тогда я отключил в гостевой ОС файл подкачки, перезагрузился, выполнил в командной строке
defrag c: /u /v
и повторил сжатие. На сей раз оно достигло результата, уменьшив размер VHDX до ожидаемых 23GB.
На хосте можно применять такой же подход, отключив наряду с подкачкой еще и гибернацию, когда не получается толком сжать (shrink) раздел в оснастке управления дисками или diskpart.
Зачастую ОС позволяет сжать лишь около половины раздела, а то и меньше, потому что не может подвинуть системные файлы. Описанный выше метод занимает не так много времени, и лучше начать с него, чем быстро накосячить сторонним (и никогда не подводившим) инструментом, а потом всю ночь метаться в поисках решения :)
В этом контексте остается вопрос дефрагментации физического SSD. Казалось бы, он изъезжен в блоге вдоль и поперек. Ан нет! Но об этом в следующий раз ;)
В комментариях напишите, сталкивались ли вы с тем, что невозможно сжать раздел средствами ОС до нужного размера, как решали задачу, случались ли косяки.
Для тех, кто не осилил пять абзацев, добавлю шестой :)
Проблема: невозможно сжать раздел с ОС (уменьшить его размер) до желаемого значения в оснастке управления дисками. Это не про сжатие NTFS или ZIP.
Решение
- Отключите:
- гибернацию (
powercfg /h off
) - файл подкачки
- защиту системы (и включите обратно)
- Перезагрузитесь.
- В командной строке от имени администратора выполните
defrag c: /u /v
Upd. По разным каналам читатели советуют такие варианты решения задачи для виртуальных дисков Hyper-V и VirtualBox. Впрочем, два первых для Hyper-V могут споткнуться о системные файлы, которые нельзя переместить (для чего я и задействовал дефраг).
- Командлет PowerShell Move-VM с параметром -IncludeStorage (Денис Дягилев)
- Утилита sdelete с ключом -z (Дмитрий Кирушев)
- Руководство по сжатию виртуальных дисков в VirtualBox на англ. (Александр Белоглинцев)
Какой тип диска вы используете для экспериментальных ВМ?
- Динамически расширяемый (59%, голосов: 177)
- Не пользуюсь ВМ / Другое (17%, голосов: 52)
- Фиксированный, и поменьше (15%, голосов: 46)
- Фиксированный, и побольше (6%, голосов: 18)
- Не знаю (2%, голосов: 5)
Проголосовало: 298 [архив опросов]
Nikolay Kolesnik
Именно так всегда и сжимал вхд. Удаление мусора, удаление файла подкачки, дефрагментация, (это можно сделать и на хосте, смонтировав диск), затем сжатие в консоли
Павел ЁжЫГ
Что-то арифметика не сходится :-\
Vadim Sterkin
Что не сходится-то?
Дано: в госте занято 50; размер VHDX — 51.
Cleanmgr, Compact: 22; 48 (51-3)
ФП, дефраг: 22; 23
AndrewTishkin
Однако за время пути.
Собака могла подрасти!
Vadim Sterkin
И это тоже (ОС логов написала или скачала обновлений), но отключённый ФП должен компенсировать такой рост.
Александр Белоглинцев
В VirtualBox порядок сжатия примерно такой
https://www.howtogeek.com/312883/how-to-shrink-a-virtualbox-virtual-machine-and-free-up-disk-space/
Angelin Dobrodnov
Сжимать разделы не приходилось, как и расширять. Оснастку управления дисками использую только для инициализации, первоначальной разбивки(создание раздела) и форматирования диска.
Все операции с дисковыми накопителями провожу только в DOS средствами загрузочного диска ADD. Никаких проблем, в том числе с системным разделом(диском) не возникало.
P.S. Дефрагментации SSD- быть!
Vadim Sterkin
Насчёт «в DOS» — это вряд ли. А так, для управления разделами для Windows лучше использовать системные средства, нежели что-то стороннее, например, на Linux.
Angelin Dobrodnov
Загрузочный диск ADD на Linux или WinPE и создается. Возможно, что чистого DOS и нет.
Andrew D
ADD — линуксовая рабочая среда. Если мы конечно говорим о версии ADD, пригодной для работы с разделами современных ОС.
Хотя лично я для операций переразметки без сноса данных MiniTool PartitionWizard использую (только то, что нельзя сделать средствами ОС — точнее почти всё, например, подвинуть системный раздел и перед ним создать раздел SWAP на HDD, или перетащить живую систему с MBR-загрузки в едином NTFS-разделе на UEFI загрузку с несколькими разделами в GPT). Просто потому что оно быстрое, стабильное, и все нужные функции есть в бесплатной версии. И да, пока ни разу не подводило, спасибо бесперебойнику, + даже когда кажется что повисло и нет прогресса — лучше пойти сделать чаю и что-то сожрать, чем необдуманные действия и прерывание процесса.
Дмитрий Кирушев
Можно было не устраивать танцев с бубном (выключение/дефрагментация), а запустить в гостевой машине sdelete от sysinternals. Выбрав опцию «затереть нулями неиспользуемое место». После этого сжатие отработало бы точно так же эффективно.
https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete
Vadim Sterkin
Да, мне в твиттере указали на sdelete, но есть несколько моментов:
1. Утилита не входит в состав ОС, в отличие от средств в статье.
2. Для меня неочевидно, что она подвинет файл подкачки, сидящий посредине тома.
3. Скорость решения задачи методом из статьи против sdelete. Она быстро работает? В конце не задумывается?
4. Универсальность подхода. На физическом диске тоже sdelete применяете, если надо сжать том?
Павел Шарапов
1. Утилита входит в комплект Windows Sysinternals.
2. Не подвинет, она заполнит нулями все свободное пространство на диске.
3. Не помню, давно не пользовался. Использую TRIM для автоматического освобождения места.
4. Бесполезно, утилита написана специально для виртуальных машин, см пункт 2.
Vadim Sterkin
Спасибо. Вот к чему я и подводил — в заметке минимумом букв описан универсальный способ для физических и виртуальных дисков на основе встроенных инструментов. Я бы не сказал, что это — пляски с бубном.
Но да, я потом добавлю предложения из комментариев.
Павел Шарапов
У вас под одним словом «сжатие» описаны два разных процесса:
1. Укорачивание файлов виртуальной машины.
2. Уменьшение размера раздела.
Я что-то не видел утилит, которые умеют выполнять их оба.
Vadim Sterkin
Утилит, может, и нет, но подход с отключением системных файлов и дефрагом решает обе задачи.
Павел Шарапов
Хм, vhdx оказывается не может уменьшиться, если есть большие куски незанятого пространства между файлами. Тогда да, удаление page-файла действительно поможет.
Алексей Каманин
В похожей ситуации использовал defrag /x
Vadim Sterkin
Кстати, да. Я, честно говоря, забыл про этот ключ. Могло быть быстрее. Но в стандартную операцию дефрага консолидация свободного пространства и так входит, из отчета defrag c: /u /v
Vadim Sterkin
Добавил в заметку три варианта от читателей для виртуальных дисков (два из комментариев, один был доставлен в Telegram).
Alexey Kotov
Недавно DISM’ом раздел физического диска «сжимал» :) Задача была клонировать систему на клиентской машине с крайне тупого 250-гигового жесткого диска на 120-гиговый SSD. Системный раздел, естественно, на весь диск… При том, что занято процентов 20. И, конечно же, Винда записала системные файлы куда-то в конец. Отключать подкачки и т.п. поленился. Дай, думаю, сделаю /Capture-Image с теневой копии, и разверну на SSD. Получилось, и даже без простоя пользователя. В принципе, нечто подобное можно провернуть и с виртуалкой.
Vadim Sterkin
Так WIM — файловый формат, его удобно применять для миграции на меньший диск.
А встроенный бэкап не позволит такой финт, надо заранее сжимать исходный раздел, чтобы он стал меньше целевого во избежание отлупа при восстановлении. Собственно, вторая часть заметки про это :)
Павел Шарапов
По поводу пункта 3, в VirtualBox можно включить сжатие виртуального носителя с помощью TRIM, добавив параметры discard и nonrotational: https://superuser.com/questions/646559/virtualbox-and-ssds-trim-command-support