В предновогодних инсайдерских сборках Windows 10 20277 и 21277 появилась консольная утилита diskusage для анализа дискового пространства. Сегодня я разберу некоторые нюансы работы новой утилиты и поделюсь с вами результатами ее испытаний в сравнении с утилитой dfp.
Предвосхищая вопрос, diskusage работает и в предыдущих версиях Windows 10, если перекинуть в них исполняемый файл и MUI-ресурсы (проверялось на 20H2).
Параметры командной строки и примеры команд
Утилита обладает развесистым списком ключей, причем в двух вариантах (для публикации я выбрал длинные, но понятные). Поскольку речь о предварительной версии, все может поменяться в будущем.

Если путь не указан, по умолчанию утилита рекурсивно сканирует начиная с текущей папки. Отмечу, что я практически всегда использовал ключи /humanReadable /skipReparse
помимо прочих. Первый отображает размеры в GB/MB нежели только в байтах, а второй я разберу ниже.
В справке не хватает примеров, но я восполню пробел этой статьей. Парочка для затравки:
- Показать 25 самых больших папок на диске C, а также сведения о размере системных файлов и зарезервированном пространстве.1
diskusage C:\ /TopDirectory=25 /systemAndReserve /humanReadable /skipReparse
- Показать 30 самых больших файлов в папке Загрузки наряду с датой их создания.1
diskusage "%userprofile%\Downloads\" /TopFile=30 /displayFlag=0x080 /humanReadable /skipReparse
Преимущества и особенности diskusage
Отмечу несколько нюансов diskusage в сравнении с dfp, которая давно исключена из поставки Windows, хотя до сих пор прекрасно работает и входит в мой арсенал.
Определение размера системных файлов и зарезервированного пространства
Ключ /systemAndReserve. Сведения отображаются в конце вывода. Логично добавлять этот ключ к первоначальному сканированию системного диска. Я убрал лишнее из результатов команды.
1234 | diskusage C:\ /TopDirectory=25 /systemAndReserve /humanReadable /skipReparse SizeOnDisk Files Directory path 20В 343В 066В 624 47 [System Files and Reserved Space] 152В 797В 986В 816/254В 588В 350В 464 60.0% of disk in use |
Утилита показывает 18.9GB. Это сильно расходится со сводкой в Параметрах, но картина проясняется при изучении подробностей.

Судя по всему, значение складывается из размера зарезервированного пространства и теневых копий (точек восстановления). Объем зарезервированного пространства и так можно посмотреть из консоли с fsutil, см. статью по ссылке↑ А к теневым копиям я еще вернусь.
Переход по символическим ссылкам и соединениям
Утилита подсчитывает размер папок, в которые ведут символические ссылки и соединения. Это – поведение по умолчанию, а выключается оно ключом /skipReparse. На мой взгляд, стоило сделать наоборот. У меня при первом тестовом запуске diskusage полезла в теневые копии по ссылке, что сделало анализ бесполезным :)
Не самая ценная фича для анализа отдельно взятого диска, но сценарии под нее найдутся, наверное.
Подсчет размера только одной жесткой ссылки
Утилита dfp ведет себя так же. Однако diskusage умеет считать и размер всех жестких ссылок с ключом /allLinks. Большой практической ценности это не несет, но для исследований бывает полезно. Ниже я разверну этот тезис на примере.
Анализ файлов
Ключ /TopFile. Он позволяет выявить самые большие файлы. Утилита dfp выводит сведения только на уровне папок.
Фильтры по именам и размерам
Ключи /nameFilter для имен и /minSizeOnDisk, /minFileSize для размеров папок. Другими словами, можно выводить папки и/или файлы, размер которых превышает заданный порог.
Топ-5 файлов размером более 10GB:
1 | diskusage E:\Movies /minSizeOnDisk=10000000000 /TopFile=5 /humanReadable /skipReparse |
Топ-5 файлов mp4:
1 | diskusage E:\Movies /nameFilter=*.mp4 /TopFile=5 /humanReadable /skipReparse |
Вывод столбцов с датами создания, изменения и доступа
Ключ /displayFlag. Пример в начале статьи.
Пожалуй, последние три пункта в списке наиболее полезны на практике. Из остального отмечу вывод в формате CSV и параметры запуска в… INI-файле, в 2021 году:)
Замечу, что в отличие от dfp, в новой утилите нет снимков, позволяющих быстро выявлять повторно засоряющиеся папки.
Скорость работы и результаты анализа
Практическое сравнение показало высокую скорость работы diskusage и более осмысленные результаты.
У меня подход к анализу с dfp простой — сначала я рекурсивно анализирую топ-25 из корня диска, потом выбираю папки из топа для более пристального изучения. Это обусловлено тем, что при первом запуске много капитанства – корень диска, папки Windows, Users и т.д.
На моем системном диске занято 150GB. Первичный анализ dfp занял 111 секунд.

Схожий анализ diskusage занял 39 секунд.

Сопоставляя результаты, можно увидеть ряд совпадений. Но очевидно, что у diskusage вывод топ-25 лучше конкретизирован. Однако в нем есть и странности.
Например, dfp четко показывает размер папки System Volume Information с теневыми копиями. А diskusage в ней ничего не видит, поэтому в топе ее нет. Точнее, не видит от имени администратора, но прозревает при запуске от имени системы.
Дальнейшие эксперименты подтвердили, что diskusage не способна оценивать дисковое пространство в папках, в которые у администратора нет доступа.
Это существенно снижает ценность анализа, но пока спишем на предварительную версию.
Подсчет размера папок с учетом и без учета жестких ссылок
Размер папки WinSxS долго волновал умы пользователей Windows :) Постоянные читатели блога помнят мою разъяснительную работу с анализом хранилища компонентов. Повторюсь, что DISM фактически показывает объем папки Windows без учета и с учетом жестких ссылок (строки выделены).

Утилита diskusage предлагает свой взгляд на этот вопрос. По умолчанию она считает размер только одного экземпляра жесткой ссылки, но с ключом /allLinks учитывает все экземпляры.
Ниже фрагмент вывода двух команд, анализирующих системный диск. В обоих случаях ключ /maxDepth=1 ограничивает глубину вывода одной папкой, т.е. показывает только папки в корне диска. Из результатов я убрал все кроме папки Windows.

Утилита оценивает объем жестких ссылок в папке Windows в 26.1-20.1=6GB, что близко к оценке DISM в 5.64GB. Заодно мы видим количество жестких ссылок — утилита насчитала 37 194, что тоже полезно для исследований. В принципе, можно скриптовать перебор файлов с fsutil, и я когда-то такое делал, но с diskusage явно проще.
Заключение
Я в курсе, что многие читатели предпочитают для анализа дискового пространства приложения с графическим интерфейсом — WinDirStat, Scanner и прочие. Но консольные утилиты очень удобны для удаленной диагностики, а встроенные — незаменимы в ограниченной корпоративной среде. В моей практике dfp вытеснила Scanner даже в домашних условиях.
Причина выпиливания dfp из Windows 10 так и осталась загадкой. Теперь Microsoft возвращает в состав ОС полезный диагностический инструмент. Правда, в стабильную версию он, видимо, попадет только осенью 2021 года, но лучше поздно, чем никогда.