Анализ занятого места на диске из командной строки

В предновогодних инсайдерских сборках Windows 10 20277 и 21277 появилась консольная утилита diskusage для анализа дискового пространства. Сегодня я разберу некоторые нюансы работы новой утилиты и поделюсь с вами результатами ее испытаний в сравнении с утилитой dfp.

Предвосхищая вопрос, diskusage работает и в предыдущих версиях Windows 10, если перекинуть в них исполняемый файл и MUI-ресурсы (проверялось на 20H2).

Параметры командной строки и примеры команд

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

diskusage

Если путь не указан, по умолчанию утилита рекурсивно сканирует начиная с текущей папки. Отмечу, что я практически всегда использовал ключи /humanReadable /skipReparse помимо прочих. Первый отображает размеры в GB/MB нежели только в байтах, а второй я разберу ниже.

В справке не хватает примеров, но я восполню пробел этой статьей. Парочка для затравки:

  • Показать 25 самых больших папок на диске C, а также сведения о размере системных файлов и зарезервированном пространстве.1diskusage C:\ /TopDirectory=25 /systemAndReserve /humanReadable /skipReparse
  • Показать 30 самых больших файлов в папке Загрузки наряду с датой их создания.1diskusage "%userprofile%\Downloads\" /TopFile=30 /displayFlag=0x080 /humanReadable /skipReparse

Преимущества и особенности diskusage

Отмечу несколько нюансов diskusage в сравнении с dfp, которая давно исключена из поставки Windows, хотя до сих пор прекрасно работает и входит в мой арсенал.

Определение размера системных файлов и зарезервированного пространства

Ключ /systemAndReserve. Сведения отображаются в конце вывода. Логично добавлять этот ключ к первоначальному сканированию системного диска. Я убрал лишнее из результатов команды.

1234diskusage C:\ /TopDirectory=25 /systemAndReserve /humanReadable /skipReparseSizeOnDisk        Files  Directory path20В 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. Это сильно расходится со сводкой в Параметрах, но картина проясняется при изучении подробностей.

diskusage

Судя по всему, значение складывается из размера зарезервированного пространства и теневых копий (точек восстановления). Объем зарезервированного пространства и так можно посмотреть из консоли с fsutil, см. статью по ссылке↑ А к теневым копиям я еще вернусь.

Переход по символическим ссылкам и соединениям

Утилита подсчитывает размер папок, в которые ведут символические ссылки и соединения. Это – поведение по умолчанию, а выключается оно ключом /skipReparse. На мой взгляд, стоило сделать наоборот. У меня при первом тестовом запуске diskusage полезла в теневые копии по ссылке, что сделало анализ бесполезным :)

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

Подсчет размера только одной жесткой ссылки

Утилита dfp ведет себя так же. Однако diskusage умеет считать и размер всех жестких ссылок с ключом /allLinks. Большой практической ценности это не несет, но для исследований бывает полезно. Ниже я разверну этот тезис на примере.

Анализ файлов

Ключ /TopFile. Он позволяет выявить самые большие файлы. Утилита dfp выводит сведения только на уровне папок.

Фильтры по именам и размерам

Ключи /nameFilter для имен и /minSizeOnDisk/minFileSize для размеров папок. Другими словами, можно выводить папки и/или файлы, размер которых превышает заданный порог.

Топ-5 файлов размером более 10GB:

1diskusage E:\Movies /minSizeOnDisk=10000000000 /TopFile=5 /humanReadable /skipReparse

Топ-5 файлов mp4:

1diskusage 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 года, но лучше поздно, чем никогда.

www.outsidethebox.ms