Вы просматриваете: Главная > Без рубрики > Как правильно измерить занятое место на диске и найти потерянные гигабайты

Как правильно измерить занятое место на диске и найти потерянные гигабайты

Вадим Стеркин

Я уже сбился со счета, сколько раз видел в почте, форуме, комментариях блога, соцсетях и вообще где угодно примерно такую картинку с вопросом «Где остальные гигабайты?».

Как правильно измерить дисковое пространство
Увеличить рисунок

Тут большинство из вас снисходительно усмехнется над дремучей неопытностью вопрошающего. Если вы почувствовали себя гуру, сколько сможете перечислить причин, по которым такое измерение неправильно? Две, три, четыре? Если это все, читайте дальше!

[+] Сегодня в большой программе

Почему неправильно суммировать размер из свойств папок в корне диска

Картинка выше дает много очевидной и неочевидной информации. Начнем с лежащих на поверхности моментов.

Скрытые и системные файлы

В корне диска находятся файлы подкачки, гибернации, своп для современных приложений, а также разные скрытые папки, созданные системой и/или приложениями. Их отсутствие сразу бросается в глаза. Вот полный расклад в моей системе:

Как правильно измерить дисковое пространство

На первой картинке оказался не учтен размер всех файлов и большинства скрытых папок. Большинства, потому что…

Папки, в которые нет доступа

Даже если вы выделите скрытые элементы, у вас все равно не будет полного доступа в ряд папок. А нет рук – нет печенья.

Проводник запущен с правами обычного пользователя

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

Как правильно измерить дисковое пространство

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

Как правильно измерить дисковое пространство

Альтернативные файловые менеджеры легко запустить от имени администратора, и они даже могут показать размер заветной папки. Но свойства-то все равно отображает проводник!

Как правильно измерить дисковое пространство

Теневые копии

Формально — это частный случай отсутствия прав на доступ в папку. В отдельный пункт я выделил их потому, что нередко именно в папке System Volume Information сосредоточен немалый объем невидимых данных. Запуск Total Commander или FAR с полными правами позволяет увидеть в отдельном столбце размер папки (см. картинку выше).

В отсутствие сторонних файловых менеджеров объем теневых копий можно посмотреть от имени администратора командой

1
vssadmin list shadows

Эту команду вы еще раз увидите ниже.

Жесткие ссылки

Папке WinSxS в блоге посвящено столько материалов, что я просто сошлюсь на ключевой момент: Как определить реальный размер папки WinSxS в Windows.

Как правильно измерить дисковое пространство

Картина в свойствах папки Windows может очень сильно искажаться из-за жестких ссылок.

Альтернативные потоки данных NTFS

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

MFT и прочие метаданные

Первым файлом на томе NTFS является MFT — основная таблица файлов. В ней содержатся сведения обо всех файлах тома — размер, время, дата создания/изменения и т.д. Во всех поддерживаемых Windows размер MFT покажет анализ встроенного дефрагментатора.

1
2
3
4
5
Основная таблица файлов (MFT):
                Размер MFT                    = 566,00 МБ
                Число записей MFT            = 579583
                Использование MFT                   = 100%
                Общее число фрагментов MFT         = 4

В файле $MFT содержится MFT, причем сама MFT содержит сведения о файле $MFT.

Прочие метаданные тоже представляют собой файлы, необходимые для нормальной работы NTFS. Имена всех файлов метаданных начинаются с $.

Например, файл $Secure – это база данных дескрипторов безопасности для всех файлов и папок. Попросту говоря, это – разрешения NTFS, с помощью которых контролируются права доступа к объектам файловой системы.

Вы можете посмотреть размер файлов метаданных с помощью утилиты contigМарка Руссиновича (о встроенных средствах чуть ниже). Она умеет дефрагментировать отдельные файлы, но в контексте сегодняшнего обсуждения интересны ее аналитические возможности.

1
contig $Secure -a -v

Файл $Secure состоит из нескольких потоков, для каждого из которых выводится размер в байтах.

Посмотреть результат команды

Аналогично утилита может проанализировать другие файлы метаданных. К ним мы еще вернемся.

Индексы

Выполнив проверку диска, вы можете увидеть в отчете примерно такой блок, в котором третья строчка посвящена индексам:

1
2
3
4
5
6
7732366847 КБ всего на диске.
 634883688 КБ в 100761 файлах.
     68316 КБ в 41522 индексах.
    413163 КБ используется системой.
     65536 КБ занято под файл журнала.
  97001680 КБ свободно на диске.

MFT представляет собой базу данных обо всех файлах тома, обращения к которой осуществляются с помощью сегментов файловых записей (File Record Segment, FRS). У каждой папки есть индексы, в которые занесены сведения об именах содержащихся в папке файлов и FRS этих файлов.

Индексы нужны для сопоставления имен файлов с номерами их FRS. Другими словами, без индексов нам бы пришлось искать файлы не по именам, а по номерам FRS.

Вы можете посмотреть, сколько места занимают индексы той или иной папки, натравив на нее упомянутую выше утилиту contig:

1
contig -a -v C:\Windows\System32

В результатах будут примерно такие сведения:

1
2
3
4
5
Processing C:\Windows\System32:
Scanning file...
[Cluster] Runlength
  [0] 192
File size: 786432 bytes

Таким образом, индексы всех файлов в папке System32 занимают 786kb. У меня в ней 24 416 файлов, т.е. получается в среднем 32 байта индексов на файл.

Вредоносные программы

Некоторые вирусы прячутся от пользователя путем установки атрибута «Скрытый» на свои папки и файлы, но это слабая маскировка. Намного лучше прячутся руткиты, которые никаким файловым менеджером не увидеть.


Как видите, получился внушительный список причин, по которым для поиска пропавших гигабайтов не имеет смысла выделять все объекты в корне диска.

Как правильно измерить занятое место на диске

Давайте теперь посмотрим на правильные методы.

Графический интерфейс (свойства диска)

Корректный способ показан на самой первой картинке статьи — надо перейти в Компьютер и открыть свойства диска.

Как правильно измерить дисковое пространство

Именно этот способ я рекомендовал во всех статьях об очистке папки WinSxS (и все равно в комментарии приходили товарищи, пытавшиеся оценить экономию от очистки по свойствам папки в проводнике).

Для подсчета занятого и свободного места на диске Windows использует метаданные NTFS. Используя функцию FSCTL_GET_VOLUME_BITMAP, система считывает из файла $Bitmap поток $Bitmap:$Data и считает нули и единицы: 1 – занятый кластер, 0 – свободный кластер. Количество единиц умножается на размер кластера.

В графическом интерфейсе есть даже лучшая альтернатива — оснастка управления дисками (diskmgmt.msc). Вопрос на засыпку: в каком случае свойства диска покажут неправильный расклад в отличие от оснастки?

Командная строка (fsutil)

Начиная с Windows 8, в системе наконец-то появился консольный инструмент для быстрой оценки занятого места на диске и выявления основных проблемных мест. Новую возможность добавили в старую добрую утилиту fsutil.

1
fsutil volume allocationreport C:

Давайте разберем основные составляющие отчета.

Отчет о занятом и свободном пространстве

1
2
3
4
5
Отчет о выделении:
Всего кластеров              : 52 807 765 (216 300 605 440 байт)
Свободных кластеров               : 16 556 009 (67 813 412 864 bytes)
Зарезервировано кластеров           : 23 376 (95 748 096 байт)
Всего выделено             : 148 487 192 576 байт

Эти цифры вы видите в свойствах диска, причем утилита и раньше умела показывать эти сведения, хотя и без кластеров:

fsutil volume diskfree c:

Служебные файлы NTFS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Ресурсы распределены между следующими файлами:
Системные файлы                : Число: 28. Всего выделено: 771 792 896 bytes.
    $Mft                    : ИД файла 0x0001000000000000. Всего выделено: 593 571 840 байт.
    $MftMirr                : ИД файла 0x0001000000000001. Всего выделено: 4 096 байт.
    $LogFile                : ИД файла 0x0002000000000002. Всего выделено: 67 108 864 байт.
    $Volume                 : ИД файла 0x0003000000000003. Всего выделено: 0 байт.
    $AttrDef                : ИД файла 0x0004000000000004. Всего выделено: 4 096 байт.
    Root folder             : ИД файла 0x0005000000000005. Всего выделено: 16 384 байт.
    $Bitmap                 : ИД файла 0x0006000000000006. Всего выделено: 6 602 752 байт.
    $Boot                   : ИД файла 0x0007000000000007. Всего выделено: 8 192 байт.
    $BadClus                : ИД файла 0x0008000000000008. Всего выделено: 0 байт.
    $Secure                 : ИД файла 0x0009000000000009. Всего выделено: 6 758 400 байт.
    $UpCase                 : ИД файла 0x000a00000000000a. Всего выделено: 131 072 байт.
    $Extend                 : ИД файла 0x000b00000000000b. Всего выделено: 0 байт.
    $ObjId                  : ИД файла 0x0001000000000019. Всего выделено: 2 883 584 байт.
    $Quota                  : ИД файла 0x0001000000000018. Всего выделено: 0 байт.
    $Reparse                : ИД файла 0x000100000000001a. Всего выделено: 8 650 752 байт.
    $UsnJrnl                : ИД файла 0x00020000000132b5. Всего выделено: 35 651 584 байт.
    $RmMetadata             : ИД файла 0x000100000000001b. Всего выделено: 0 байт.
    $Repair                 : ИД файла 0x000100000000001c. Всего выделено: 28 311 552 байт.
    $Txf                    : ИД файла 0x000100000000001e. Всего выделено: 0 байт.
    $TxfLog                 : ИД файла 0x000100000000001d. Всего выделено: 4 096 байт.
    $Tops                   : ИД файла 0x000100000000001f. Всего выделено: 1 048 576 байт.
    $TxfLog.blf             : ИД файла 0x0001000000000020. Всего выделено: 65 536 байт.
    Другие системные файлы      : Число: 4. Всего выделено: 0 байт.
    Другие системные файлы в папке $TxfLog:
        Число               : 2
        Всего выделено     : 20 971 520 байт.

Вы видите полный список файлов с метаданными NTFS, которые в сумме у меня занимают 736MB, в том числе 566MB принадлежит MFT.

Теневые копии

1
2
3
System Volume Information   : Всего выделено: 10 411 479 040 байт.
    Файлы                   : Число: 27. Всего выделено: 10 411 438 080 байт.
    Папки                 : Число: 11. Всего выделено: 40 960 байт.

Точки восстановления у меня занимают чуть менее 10GB.

Структура папок (без учета файлов)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Папки пользователей                  : Число: 64 397. Всего выделено: 217 948 160 байт.
    Потоки по умолчанию         : 14 666
        Выделено           : 14 661
        Всего выделено     : 217 776 128 байт.
    Именованные потоки           : 1 217
        Выделено           : 39
        Всего выделено     : 159 744 байт.
    Локальные потоки метаданных  : 262 805
        Выделено           : 2
        Всего выделено     : 12 288 байт.
В этих папках:
    Сжато              : 159
        Всего выделено     : 0 байт
        Общий размер          : 0 байт.
        Экономия             : 0,00 %
    Разрежено                  : 0
        Всего выделено     : 0 байт
        Общий размер          : 0 байт.
        Экономия             : 0,00 %
    Зашифровано               : 0
        Всего выделено     : 0 байт
    С именованными потоками      : 1 217
        Сжато          : 0
        Разрежено              : 0
        Зашифровано           : 0
    Без выделения      : 49 728

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

Файлы

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Файлы пользователей                  : Число: 319 985. Всего выделено: 137 085 972 480 байт.
    Потоки по умолчанию         : 319 985
        Выделено           : 222 761
        Всего выделено     : 136 967 561 216 байт.
    Именованные потоки           : 32 885
        Выделено           : 21 696
        Всего выделено     : 116 510 720 байт.
    Локальные потоки метаданных  : 1 100 469
        Выделено           : 464
        Всего выделено     : 1 900 544 байт.
В этих файлах:
    Сжато              : 299
        Всего выделено     : 115 773 440 байт
        Общий размер          : 444 522 981 байт.
        Экономия             : 73,96 %
    Разрежено                  : 63 776
        Всего выделено     : 1 050 411 008 байт
        Общий размер          : 13 371 085 313 байт.
        Экономия             : 92,14 %
    Зашифровано               : 0
        Всего выделено     : 0 байт
    С именованными потоками      : 30 441
        Сжато          : 0
        Разрежено              : 0
        Зашифровано           : 0
    Без выделения      : 95 556

Здесь полный расклад по всем файлам диска, причем отдельно есть сведения о:

  • сжатых файлах и экономии от сжатия NTFS
  • файлах с именованными потоками, т.е. альтернативными потоками данных NTFS

Практический пример использования отчета fsutil

На форум обратился человек, у которого антивирус обнаружил кучу вирусов в папке D:\System Volume Information размером 22GB. По его словам, на диске D когда-то была установлена Windows, но сейчас ее там нет. Попытки удалить папку успехом не увенчались, несмотря на пляски с бубном вокруг разрешений.

Руководствуясь принципом «доверяй, но проверяй», я попросил предоставить мне два отчета – о теневых копиях и пространстве на диске.

1
2
vssadmin list shadowstorage
fsutil volume allocationreport d:

Действительно, файлы в проблемной папке были невидимы для VSS, а fsutil их показывала. Фрагмент отчетов:

1
2
3
4
5
6
7
8
9
Сопоставление хранилища теневой копии
   Для тома: (D:)\\?\Volume{13965358-a2a4-11e4-971c-806e6f6e6963}\
   Том хранилища теневой копии: (D:)\\?\Volume{13965358-a2a4-11e4-971c-806e6f6e6
963}\
   Использованный объем хранилища теневой копии: 0 байт (0%)
======
System Volume Information   : всего выделено: 27647373312 байт.
    Число файлов: 19432. Всего выделено: 27642359808 байт.
    Число папок: 212. Всего выделено: 5013504 байт.

Так я убедился, что человеку не привиделись десятки гигабайт в папке SVI, а сама она никак не связана с текущими теневыми копиями. Дальнейшее было делом техники – по моему совету участник форума без проблем удалил папку из Total Commander, запущенного от имени SYSTEM.

Как найти пропавшие гигабайты

В блоге давно уже есть статья Куда пропадает место на системном разделе, на которую ссылаются многостраничные темы осевых форумов OSZone, посвященные этому вопросу. Я, кстати, не так давно обновлял в ней структуру и подачу информации, поэтому написанное там по большому счету применимо ко всем поддерживаемым ОС Windows.

Общий подход

Вкратце, подход такой:

  1. Убедитесь, что вы учли скрытые файлы и папки в корне диска (подкачка, гибернация, Windows.old)
  2. Запустите с правами администратора встроенную утилиту очистки диска (cleanmgr), чтобы исключить самые распространенные причины потерь дискового пространства (корзина, временные файлы, WinSxS, Windows.old)
  3. Определите папки, занимающие больше всего места (утилита Scanner илианалоги)
    Как правильно измерить дисковое пространство

Теперь в эту методику можно добавить утилиту fsutil, помогающую проанализировать служебные файлы NTFS.

Особые случаи (dfp.exe)

Огромное преимущество утилит типа Scanner в их наглядности, и никакие консольные средства этот козырь не бьют. Но бывают ситуации, в которых приходится опираться только на встроенные средства (сторонние могут быть недоступны или запрещены). Поэтому важно знать арсенал Windows и уметь применять его на практике.

Начиная с Windows 8, в ОС появилась консольная утилита dfp.exe для анализа дискового пространства.

Аббревиатура DFP означает disk footprint, т.е. след системы на диске.

Исходя из возможностей и синтаксиса, dfp вряд ли рассчитана на обычных пользователей. Ее целевой аудиторией являются ИТ-специалисты и инженеры поддержки.

Однако утилита любопытная, поэтому давайте разберем пару примеров. Предупреждаю, что получение результатов может занимать несколько минут даже на SSD.

Поиск самых больших папок

Команда такая:

1
dfp /b /top 25 /elapsed /study {largest} C:\

В результате вы получите список из 25 самых больших папок диска С, отсортированных по размеру в гигабайтах, и время, ушедшее на выполнение команды. Мой расклад:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Size On Disk    Files  Folders Path
      139.0G   394316    64294 C:\
       52.7G   113797    12411 C:\Users
       52.6G   112675    11826 C:\Users\Vadim
       35.5G   139904    25513 C:\Windows
       23.1G     4830      313 C:\Windows\Installer
       13.3G    66889     9406 C:\Users\Vadim\AppData
       13.0G    62962     8274 C:\Users\Vadim\AppData\Local
       12.9G    19645      697 C:\Users\Vadim\SkyDrive
       10.4G       28       10 C:\System Volume Information
       10.0G     2040      215 C:\$Windows.~WS
       10.0G     2040      214 C:\$Windows.~WS\Sources
        9.9G    10359      260 C:\Users\Vadim\SkyDrive\Photos
        8.8G    12281      112 C:\Users\Vadim\Pictures
        8.4G    11592      702 C:\Users\Vadim\AppData\Local\Yandex
        8.4G    11588      700 C:\Users\Vadim\AppData\Local\Yandex\YandexBrowser
        7.9G    11262      607 C:\Users\Vadim\AppData\Local\Yandex\YandexBrowser\User Data
        7.6G     9403      457 C:\Users\Vadim\AppData\Local\Yandex\YandexBrowser\User Data\Default
        7.4G     8036      216 C:\Users\Vadim\SkyDrive\Photos\Fotki
        7.1G     3883      632 C:\Users\Vadim\Documents
        6.9G    26775     2696 C:\Program Files (x86)
        6.7G     3330       52 C:\Users\Vadim\AppData\Local\Yandex\YandexBrowser\User Data\Default\File System
        6.7G       18        5 C:\Users\Vadim\AppData\Local\Yandex\YandexBrowser\User Data\Default\File System\007
        6.7G       10        2 C:\Users\Vadim\AppData\Local\Yandex\YandexBrowser\User Data\Default\File System\007\p
        6.7G        2        0 C:\Users\Vadim\AppData\Local\Yandex\YandexBrowser\User Data\Default\File System\007\p\00
        6.4G     4402     1803 C:\ProgramData
Executed in 45.504 seconds

В первых строчках всегда будет капитанство – понятно, что корень диска, Users и Windows самые большие. Но дальше могут быть интересные находки (выделены выше). В частности, у меня обнаружились:

  • ненужные дистрибутивы Windows 10, использовавшиеся для обновления ($Windows.~WS)
  • старая папка SkyDrive (новая называется OneDrive)
  • неприлично большой профиль браузера Яндекс

Папка ProgramData тоже немаленькая, и ее можно подвергнуть анализу аналогичной командой (меняется только путь).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
dfp /elapsed /b /top 25 /study {largest} C:\ProgramData
Size On Disk    Files  Folders Path
        6.4G     4402     1803 C:\ProgramData
        3.0G      298      152 C:\ProgramData\Package Cache
        2.7G     2682      994 C:\ProgramData\Microsoft
        1.6G       18        3 C:\ProgramData\Microsoft\Packages
        1.6G       16        1 C:\ProgramData\Microsoft\Packages\Products
        1.6G       16        0 C:\ProgramData\Microsoft\Packages\Products\RM-978
        1.1G        5        1 C:\ProgramData\Package Cache\{6FDE09DB-D711-593B-0823-D99D2A757227}v8.100.25984
        1.1G        5        0 C:\ProgramData\Package Cache\{6FDE09DB-D711-593B-0823-D99D2A757227}v8.100.25984\Installers
        1.1G       61        1 C:\ProgramData\Package Cache\{C1C83898-5A60-AE9D-A3AB-7534375CA453}v8.100.25984
        1.1G       61        0 C:\ProgramData\Package Cache\{C1C83898-5A60-AE9D-A3AB-7534375CA453}v8.100.25984\Installers
      562.1M      392      364 C:\ProgramData\Microsoft\Windows Defender
      410.7M       68       12 C:\ProgramData\Microsoft\Search
      410.7M       68       11 C:\ProgramData\Microsoft\Search\Data
      410.7M       68        8 C:\ProgramData\Microsoft\Search\Data\Applications
      410.7M       68        7 C:\ProgramData\Microsoft\Search\Data\Applications\Windows
      378.6M      840      287 C:\ProgramData\TechSmith
      317.4M       24        6 C:\ProgramData\Microsoft\Windows Defender\Definition Updates
      313.6M      826      282 C:\ProgramData\TechSmith\Camtasia Studio
      313.6M      826      281 C:\ProgramData\TechSmith\Camtasia Studio\Library 2.0
      301.0M        3        1 C:\ProgramData\Package Cache\{C477F452-4589-BFC1-304B-22C63960FC40}v8.100.25984
      301.0M        3        0 C:\ProgramData\Package Cache\{C477F452-4589-BFC1-304B-22C63960FC40}v8.100.25984\Installers
      197.0M      356      334 C:\ProgramData\Microsoft\Windows Defender\Scans
      160.7M        8        0 C:\ProgramData\Microsoft\Windows Defender\Definition Updates\Default
      130.1M        5        0 C:\ProgramData\Microsoft\Windows Defender\Definition Updates\{2A165C15-26BC-4F70-BC4A-3F3F106834E8}
      128.7M        5        0 C:\ProgramData\Microsoft\Windows Defender\Definition Updates\Backup
Executed in 1.205 seconds

Здесь интереснее, и я выделил папки, без которых вполне можно жить:

  • 1.6GB — папка, оставшаяся от восстановления ОС на смартфоне Lumia (фактически, там FFU-файл дистрибутива)
  • 1.1GB (дважды) — какие-то пакеты, на поверку оказавшиеся копиями установщиков ADK и SDK.
  • 379MB – копии установочных файлов ПО TechSmith

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

Поиск засоряемых местоположений

Иногда бывает так, что очистка диска помогает лишь на время, а потом свободное пространство снова начинает исчезать. В ранее опубликованной методике я рекомендую определить проблемные папки утилитой Scanner, чтобы потом хватать виновника за руку с помощью Process Monitor.

Утилита dfp предлагает альтернативу ручному поиску сторонними утилитами — сравнение снимков диска. Давайте слегка изменим уже знакомую команду и проведем эксперимент.

1
2
3
4
5
6
::Найти 25 самых больших папок и создать снимок
dfp /b /top 25 /elapsed /study {largest} /snap C:\temp\snap1.bin C:\
::Для эксперимента создать огромный файл размером 10GB.
fsutil file createnew C:\temp\file.txt 10737418240
::Создать новый отчет и сравнить со снимком
dfp.exe /b /top 25 /elapsed /prevsnap C:\temp\snap1.bin /study

Я сэкономлю место на странице и ограничусь только первыми двумя строчками отчета

1
2
3
Size On Disk  % Change    Files  Folders Path
       10.0G 605597.8%       19        2 c:\temp
        5.1M      0.8%       38        0 c:\Users\Vadim\AppData\Local\Microsoft\OneDrive\logs\Personal

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

Дальнейшее изучение dfp я оставляю вам в качестве домашнего задания.

Метки: , , ,


Оставить отзыв