Я уже сбился со счета, сколько раз видел в почте, форуме, комментариях блога, соцсетях и вообще где угодно примерно такую картинку с вопросом «Где остальные гигабайты?».
Тут большинство из вас снисходительно усмехнется над дремучей неопытностью вопрошающего. Если вы почувствовали себя гуру, сколько сможете перечислить причин, по которым такое измерение неправильно? Две, три, четыре? Если это все, читайте дальше!
[+] Сегодня в большой программе
- Почему неправильно суммировать размер из свойств папок в корне диска
- Скрытые и системные файлы
- Папки, в которые нет доступа
- Теневые копии
- Жесткие ссылки
- Зарезервированное пространство
- Альтернативные потоки данных NTFS
- MFT и прочие метаданные
- Индексы
- Вредоносные программы
- Как правильно измерить занятое место на диске
- Графический интерфейс (свойства диска)
- Командная строка (fsutil)
- Отчет о занятом и свободном пространстве
- Служебные файлы NTFS
- Теневые копии
- Структура папок (без учета файлов)
- Файлы
- Практический пример использования отчета fsutil
- Как найти пропавшие гигабайты
- Литература
- Дискуссия
Почему неправильно суммировать размер из свойств папок в корне диска
Картинка выше дает много очевидной и неочевидной информации. Начнем с лежащих на поверхности моментов.
Скрытые и системные файлы
В корне диска находятся файлы подкачки, гибернации, своп для современных приложений, а также разные скрытые папки, созданные системой и/или приложениями. Их отсутствие сразу бросается в глаза. Вот полный расклад в моей системе:
На первой картинке оказался не учтен размер всех файлов и большинства скрытых папок. Большинства, потому что…
Папки, в которые нет доступа
Даже если вы выделите скрытые элементы, у вас все равно не будет полного доступа в ряд папок. А нет рук – нет печенья.
Проводник запущен с правами обычного пользователя 1, поэтому он не может попасть в папки, куда пропуск имеет только администратор. Например, для входа в профили других учетных записей нужно одобрить запрос UAC.
В некоторые папки проводник не пускает, даже не предлагая получить постоянный доступ (ибо нечего пользователю там делать).
Альтернативные файловые менеджеры легко запустить от имени администратора, и они даже могут показать размер заветной папки. Но свойства-то все равно отображает проводник!
Теневые копии
Формально — это частный случай отсутствия прав на доступ в папку. В отдельный пункт я выделил их потому, что нередко именно в папке System Volume Information сосредоточен немалый объем невидимых данных. Запуск Total Commander или FAR с полными правами позволяет увидеть в отдельном столбце размер папки (см. картинку выше).
В отсутствие сторонних файловых менеджеров объем теневых копий можно посмотреть от имени администратора командой
vssadmin list shadows
Эту команду вы еще раз увидите ниже.
Жесткие ссылки
Папке WinSxS в блоге посвящено столько материалов, что я просто сошлюсь на ключевой момент: Как определить реальный размер папки WinSxS в Windows.
Картина в свойствах папки Windows может очень сильно искажаться из-за жестких ссылок.
Зарезервированное пространство
В Windows 10 начиная с версии 1903 используется новая технология, в рамках которой система может резервировать около 7GB. Подробнее читайте в статье FAQ | Зарезервированное пространство (Reserved Storage) в Windows 10.
Альтернативные потоки данных NTFS
На практике это редко становится проблемой с точки зрения потерь дискового пространства, но де-факто альтернативные потоки не учитываются при подсчете размера в свойствах папки. Впрочем, потоки маленького размера хранятся целиком в MFT.
MFT и прочие метаданные
Первым файлом на томе NTFS является MFT — основная таблица файлов. В ней содержатся сведения обо всех файлах тома — размер, время, дата создания/изменения и т.д. Во всех поддерживаемых Windows размер MFT покажет анализ встроенного дефрагментатора.
Основная таблица файлов (MFT): Размер MFT = 566,00 МБ Число записей MFT = 579583 Использование MFT = 100% Общее число фрагментов MFT = 4
В файле $MFT содержится MFT, причем сама MFT содержит сведения о файле $MFT.2 Прочие метаданные тоже представляют собой файлы, необходимые для нормальной работы NTFS. Имена всех файлов метаданных начинаются с $.
Например, файл $Secure – это база данных дескрипторов безопасности для всех файлов и папок. Попросту говоря, это – разрешения NTFS, с помощью которых контролируются права доступа к объектам файловой системы.
Вы можете посмотреть размер файлов метаданных с помощью утилиты contig Марка Руссиновича (о встроенных средствах чуть ниже). Она умеет дефрагментировать отдельные файлы, но в контексте сегодняшнего обсуждения интересны ее аналитические возможности.
contig $Secure -a -v
Файл $Secure состоит из нескольких потоков, для каждого из которых выводится размер в байтах.
C:\Windows\System32>contig $Secure -a -v Contig v1.7 - Makes files contiguous Copyright (C) 1998-2012 Mark Russinovich Sysinternals - www.sysinternals.com ------------------------ Processing C:\$Secure::$ATTRIBUTE_LIST: Scanning file... [Cluster] Runlength [0] MFT Resident File size: 424 bytes C:\$Secure::$ATTRIBUTE_LIST is in 1 fragment ------------------------ Processing C:\$Secure:$SDS:$DATA: Scanning file... [Cluster] Runlength [0] 640 [640] 491 [1131] 262 [1393] 1 File size: 5707820 bytes C:\$Secure:$SDS:$DATA is in 2 fragments ------------------------ Processing C:\$Secure:$SDH:$INDEX_ALLOCATION: Scanning file... [Cluster] Runlength [0] 128 File size: 524288 bytes C:\$Secure:$SDH:$INDEX_ALLOCATION is in 1 fragment ------------------------ Processing C:\$Secure:$SII:$INDEX_ALLOCATION: Scanning file... [Cluster] Runlength [0] 128 File size: 524288 bytes C:\$Secure:$SII:$INDEX_ALLOCATION is in 1 fragment ------------------------ Summary: Number of files processed : 4 Average fragmentation : 1.25 frags/file
Аналогично утилита может проанализировать другие файлы метаданных. К ним мы еще вернемся.
Индексы
Выполнив проверку диска, вы можете увидеть в отчете примерно такой блок, в котором третья строчка посвящена индексам:
7732366847 КБ всего на диске. 634883688 КБ в 100761 файлах. 68316 КБ в 41522 индексах. 413163 КБ используется системой. 65536 КБ занято под файл журнала. 97001680 КБ свободно на диске.
MFT представляет собой базу данных обо всех файлах тома, обращения к которой осуществляются с помощью сегментов файловых записей (File Record Segment, FRS). У каждой папки есть индексы, в которые занесены сведения об именах содержащихся в папке файлов и FRS этих файлов.3
Индексы нужны для сопоставления имен файлов с номерами их FRS. Другими словами, без индексов нам бы пришлось искать файлы не по именам, а по номерам FRS.
Вы можете посмотреть, сколько места занимают индексы той или иной папки, натравив на нее упомянутую выше утилиту contig:
contig -a -v C:\Windows\System32
В результатах будут примерно такие сведения:
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.
fsutil volume allocationreport C:
Давайте разберем основные составляющие отчета.
Отчет о занятом и свободном пространстве
Отчет о выделении: Всего кластеров : 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
Ресурсы распределены между следующими файлами: Системные файлы : Число: 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.
Теневые копии
System Volume Information : Всего выделено: 10 411 479 040 байт. Файлы : Число: 27. Всего выделено: 10 411 438 080 байт. Папки : Число: 11. Всего выделено: 40 960 байт.
Точки восстановления у меня занимают чуть менее 10GB.
Структура папок (без учета файлов)
Папки пользователей : Число: 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.
Файлы
Файлы пользователей : Число: 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, но сейчас ее там нет. Попытки удалить папку успехом не увенчались, несмотря на пляски с бубном вокруг разрешений.
Руководствуясь принципом «доверяй, но проверяй», я попросил предоставить мне два отчета – о теневых копиях и пространстве на диске.
vssadmin list shadowstorage fsutil volume allocationreport d:
Действительно, файлы в проблемной папке были невидимы для VSS, а fsutil их показывала. Фрагмент отчетов:
Сопоставление хранилища теневой копии Для тома: (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.
Общий подход
Вкратце, подход такой:
- Убедитесь, что вы учли скрытые файлы и папки в корне диска (подкачка, гибернация, Windows.old)
- Запустите с правами администратора встроенную утилиту очистки диска (cleanmgr), чтобы исключить самые распространенные причины потерь дискового пространства (корзина, временные файлы, WinSxS, Windows.old)
- Определите папки, занимающие больше всего места (утилита Scanner или аналоги)
Теперь в эту методику можно добавить утилиту fsutil, помогающую проанализировать служебные файлы NTFS.
Особые случаи (утилиты dfp и diskusage)
Специальное примечание о доступности утилит. Утилита dfp появилась в Windows 8, была в 8.1 и входила в состав в Windows 10 Pro сборка 10240. Но в какой-то момент Microsoft убрала ее без объяснения причин, поэтому в чистой установке актуальной Windows 10 ее уже нет. Однако в случае апгрейда старой ОС утилита переходит в новую по наследству и отлично работает. Вы также можете скачать утилиту в архиве. Утилита diskusage входит в состав Windows с версии 20H2. Ей посвящен отдельный рассказ.
Огромное преимущество утилит типа Scanner в их наглядности, и никакие консольные средства этот козырь не бьют. Но бывают ситуации, в которых приходится опираться только на встроенные средства (сторонние могут быть недоступны или запрещены). Поэтому важно знать арсенал Windows и уметь применять его на практике.
Аббревиатура DFP означает disk footprint, т.е. след системы на диске.
Исходя из возможностей и синтаксиса, dfp вряд ли рассчитана на обычных пользователей. Ее целевой аудиторией являются ИТ-специалисты и инженеры поддержки.
Однако утилита любопытная, поэтому давайте разберем пару примеров. Предупреждаю, что получение результатов может занимать несколько минут даже на SSD.
Поиск самых больших папок
Команда такая:
dfp /b /top 25 /elapsed /study {largest} C:\
В результате вы получите список из 25 самых больших папок диска С, отсортированных по размеру в гигабайтах, и время, ушедшее на выполнение команды. Мой расклад:
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 тоже немаленькая, и ее можно подвергнуть анализу аналогичной командой (меняется только путь).
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 предлагает альтернативу ручному поиску сторонними утилитами — сравнение снимков диска. Давайте слегка изменим уже знакомую команду и проведем эксперимент.
::Найти 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
Я сэкономлю место на странице и ограничусь только первыми двумя строчками отчета
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 я оставляю вам в качестве домашнего задания.
Литература
В процессе написания статьи я использовал следующие материалы.
- NTFS Misreports Free Space (части 1, 2, 3)
- How NTFS Works (TechNet)
- The Four Stages of NTFS File Growth (части 1, 2)
- NTFS Metafiles
- NTFS Master File Table (MFT), NTFS System Files (ntfs.com)
- About the Master File Table zone reservation in Windows Vista and Windows Server 2008 [и новее]
- NTFS $I30 Index Attributes: Evidence of Deleted and Overwritten Files
- NTFS INDX Parsing
Дискуссия
В прошлый раз я обещал продолжить тему потоков данных NTFS, и сегодняшний разговор затронул целый набор метаданных файловой системы. Вообще, эта статья валялась в черновиках года три, а к ее публикации подтолкнул выход Windows 10, поскольку новая ОС продолжила тенденцию к снижению занимаемого места на диске. Рассказы о нововведениях вы прочтете в ближайших материалах блога.
В комментариях напишите:
- с какими необычными случаями исчезновения дискового пространства вы сталкивались
- что интересного вы нашли на диске и сколько места высвободили, прочитав эту статью
Пожалуйста, не публикуйте громоздкие отчеты консольных утилит в комментариях. Для этого есть PasteBin.
Можно и с правами администратора, но на практике это редкость↩
Классическая дилемма «курица-яйцо», причем уже вторая, связанная с NTFS.↩
С точки зрения NTFS, никаких файлов в папке не содержится. Там только записи со сведениями о файлах.↩
Даниил Коркин
Спасибо за статью, почерпнул для себя много нового.
Антон Дровосеков
dfp.exe только в профессиональных редакциях Windows, к сожалению. Судя по всему, утилита хорошая, но не для большинства домашних пользователей.
Vadim Sterkin
Вижу ее в 8.1 для одного языка
Антон Дровосеков
Windows 10 SL (не инсайдерская) — нет
Юрий П.
Microsoft Windows 10 Pro Version 10.0.10240.16545
Файл dfp.exe найти не удалось.
Антон Дровосеков
Давно интересовал вопрос: есть папка c:\ProgramData\Microsoft\Click2Run. Это папка возникает при установке Office 2016 редакции C2R. При обновлении офиса размер папки растёт (что естественно, т.к. туда выкачиваются полные дистрибутивы обновлённого офиса). Но размер папки на диске меньше размера папки простым подсчётом размеров файлов. Не нашёл в ней ни reparsepoints (атрибуты файлов), ни хардлинков (сторонней утилитой), ни compressed-файлов (опять же атрибуты файлов). Есть пара симлинков конфигурационных файлов, но они совсем маленькие, и не должны никак значимо влиять. Может быть, я что-то упускаю из вида?
http://rghost.ru/86HBVgJlB/image.png
P.S. Прочитал про дельта-компрессию, очень похоже, но там ведь тоже ставится атрибут compressed.
Vadim Sterkin
Разреженные файлы?
Олег
Не один я заметил этот странный факт.
Нет, атрибута «разреженный» не стоит:
скриншот тут
Антон Дровосеков
Также заметил, что разница в размерах набегает при неоднократном обновлении офиса, при первом обновлении вроде бы такой разницы нет.
Действительно ли верна информация про атрибут compressed у файлов с дельта-компрессией? В том блоге ( http://blogs.technet.com/b/askcore/archive/2014/03/27/what-s-new-in-windows-servicing-reduction-of-windows-footprint-part-2.aspx ) как-то уж особо разделяются ntfs-компрессия и дельта-компрессия.
Надо будет дождаться обновления, и проверить CBS.log (если это там будет отображено, конечно)
Vadim Sterkin
А как вы будете отличать обычное сжатие от дельты? :) Плюс, там про 8.1, но об этом в следующей статье.
Антон Дровосеков
Дождался обновления офиса на ноутбуке жены. Да, там разреженные файлы. Не совсем понятно, зачем они там именно в таком виде, но глубже копать уже не стану.
скриншот
Vadim Sterkin
Антон, спасибо за отчет. Причины такого поведения сможет объяснить только продуктовая группа.
У меня CTR только 2013, и такой проблемы пока не вижу.
Антон Дровосеков
FYI: в Office 2016 C2R (он же ритейл) в версии 16.0.6001.1041 начала работать автоматическая уборка в ProgramData\Microsoft\ClickToRun.
Filin Filinov
Для измерения места есть способ куда проще — в Диспечере задач завершите работу Проводник Windows и выбрав в меню «Файл» запуск новой задачи вводим explorer и ставим галку запуск от имени администратора. После чего всё прекрасно открывается без запросов и показывает верные данные в Свойствах.
Помогает и в других случаях обойти uac (например, для открытия zip)
Vadim Sterkin
Оки-доки, теперь можете спокойно и вдумчиво прочесть статью.
Евгений
Герлах-то трудяга :) За 10 лет версию обновил с 2.6 до 2.13.
Михаил Акулёнок
Всё это хорошо, а что вы скажете по этому поводу.
http://s017.radikal.ru/i402/1510/21/c62e5d7cb1d6.png
Сколько всё же места занимает папка на диске?
Vadim Sterkin
32.5MB, это на картинке написано. Если вы ждали другого ответа, то стоило формулировать вопрос иначе.
Михаил Акулёнок
как папка может на диске занимать 30 метров если там пол терабайта полностью скачанных и вполне просматриваемых видеофайлов
Vadim Sterkin
Михаил, так проверьте показания проводника другими средствами — я вам показал два консольных.
Михаил Акулёнок
/Вадим Отчеты утилит перенесены в http://pastebin.com/5U3wuHKx
Но как возможно экономия в 99% если все файлы открываются читаются и содержимое соответствует размеру
Vadim Sterkin
Гм… то есть мою просьбу не вываливать в комментарии отчеты консольных утилит вы не видели? Ок, я поухаживаю за вами, но только один раз.
Отвечая на ваш вопрос, у вас очень много разреженных файлов, в этом и причина разницы между размером и размером на диске.
Михаил Акулёнок
Да, не видел. Но как и писал с файлами всё в порядке (соответствует размер содержимому). Может это из-за дедупликации?
Vadim Sterkin
Она завершает статью.
O_o Откуда мне знать, что у вас там накручено… В общем, создайте тему в http://forum.oszone.net Там всегда есть кто-то, обладающий временем и желанием гадать и вытаскивать из авторов вопросов дополнительные сведения.
Антон Дровосеков
Тут-то всё просто, на диске 32 Мб, по мере заполнения файлов данными объём занимаемого места будет расти. Торрент-клиенты чаще всего создают разреженные файлы, уже упоминались выше.
Владимир Сафонов
Vadim Sterkin! К любой системной папке можно получить полный доступ через: Свойства / Безопасность / Дополнительно / Владелец / Изменить / Выбрать свою учётную запись и Заменить владельца подконтейнеров и объектов / Применить и везде Ок
До: http://savepic.net/7425348.htm
После: http://savepic.net/7407940.htm
Vadim Sterkin
Владимир, я пишу статьи, чтобы люди повышали уровень знаний и брали на вооружение грамотные приемы. А вы мне показываете, как ловко стали владельцем SVI. Ок, теперь любой процесс от вашего имени туда воткнет что угодно. Гуд лак!
Владимир Сафонов
Что ещё надо сделать:
Сервис / Параметры папок / Вид / Снять галочку с Использовать мастер общего доступа и поставить точку Показывать скрытые папки и диски.
Александр Сухоруков
Разница между ёмкостями (объёмами), выраженными в кило = 10^3 = 1000 и выраженными в киби = 2^10 = 1024, возрастает с ростом веса приставки. МЭК рекомендует использовать двоичные приставки, но на практике они пока не применяются, возможно, из-за неблагозвучности — кибибайт, мебибайт, йобибайт и т. п.
Точнее, например, ubuntu использует, а windows нет. Оттого и разница, и путаница.
Сергей
После прочтения статьи возник такой вопрос: почему программа dfp с ключом
не работает в PowerShell, а в cmd работает?
Да и не только она, мне несколько раз приходилось встречаться с тем, что консольные команды в PS не работают, но в cmd — всё в порядке. Понятно, что вопрос не совсем по теме и касается PowerShell, но тем не менее, хотелось бы выяснить, в чём дело.
Filin Filinov
Добавляйте расширение .exe к имени команды:
SC.exe QUERY LANMANSERVER
или используйте следующий синтаксис:
PS C:\> CMD /C "SC QUERY LANMANSERVER"
и всё будет путём.
Или вообще просто набрать в окне PowerShell «cmd» и дальше работать с обычной командной строкой в том же синеньком окне. Для обратного перехода в режим собственно PowerShell — набираем «PowerShell».
Сергей
Да, я именно так и делал — в PS набирал cmd и возвращался назад командой exit. А добавление .exe к имени команды ровным счетом ничего не меняет. Хотелось бы напрямую выполнять команду без прокладки в виде CMD
Vadim Sterkin
Сергей, вы не сообщаете, как вы запускаете команды, попробуйте так:
Сергей
Я запускаю команду в окне консоли PS. Если запустить так, как вы предложили, то PS не принимает строку как команду.
Вот иллюстрация: http://s017.radikal.ru/i401/1510/ea/fa9366e02b5e.jpg
Vadim Sterkin
Да, наверное, и не должна была так в лоб :) Как насчет
Если никак, создайте тему в http://forum.oszone.net/forum-102.html, но я решительно не понимаю, что вам мешает просто вызвать cmd в консоли пошика.
Сергей
да, я уже ответил чуть выше другому комментатору, что, конечно, я могу через cmd сделать, но хотелось бы обходиться без лишней прокладки в виде cmd, кроме того, хотелось бы знать причину, почему это работает (не работает) именно так.
Vadim Sterkin
1. Вы не ответили мне по поводу iex
2. Вы так и не объяснили, как именно запускаете свою команду, с которой начали вопрос
3. Чтобы обходиться без прокладок, в пошике должна быть реализована нбх функциональность
Думаю, пора заканчивать оффтоп и повторения своих хотелок и переходить к конкретике в форуме.
Ilya Pirogov
А мне WinDirStat нравится. Всё просто и понятно. Никаких заморочек с консолью и альтернативными файловыми менеджерами. Это же шиндовс, а не Фряха какая то. Не хочется заморачиваться.
Alexiz Kadev
Попробовал запустить в десятке в командной строке запущенной от Администратора команду : dfp /b /top 25 /elapsed /study {largest} C:\
Результат удивил: Error = 0x80070005 (т.е. вроде Access Denied). Но вот куда запрещён доступ — непонятно. В журнала Windows ничего дополнительного не обнаружил по данной ошибке. Если запустить с ключом /log много интересных ошибок вида: Error | 0x80070005 | FileFootprint::GetHardlinkList [330]
Константин
Самый веселый случай «исчезновения» места на диске относится ко временам, когда диск на 2Гб считался нормой, а на 4 — роскошью. Мой знакомый закончил работу над документом и попытался сохранить его, но получил сообщение об отсутствии свободного места на диске. Экспресс-исследование показало, что остатки свободного места захватила папка Windows.
Правда MS оказался в том случае не виноват. Сыновья создали в недрах C:\Windows\…\…\ каталог, открыли к нему доступ по локалке и использовали как NAS :), но перестарались.
Иногда смотрю в Total Commander по Alt+Shift+Enter на размеры папок системного диска, так что top25 из dfp никаких откровений не принес.
Димедрол Валерьянович
Народ, если кто-то ищет пропавшее место на винте, юзайте TreeSize. Помимо нее вам больше НИЧЕГО не понадобится. Все представлено в графиках и в дереве каталогов с указанием размера каждой папки на винте.
Сам ее юзаю на клиентских ПК, не раз выручала.
niks255
Согласен. Прекрасная программка.
Alex Boyarovich
Пошуршал я тут утилитками по винчестеру, и что я вам скажу. Microsoft Стоило бы надавать по рукам, за то, что творится внутри их же собственной системы. Вот не понять мне, почему даже внутри компании не могут договориться о том, что куда размещать.
2 GB С:\ProgramData\Microsoft\Packages\Products\RM-1077\ — понятно, образ, для восстановления моего телефона, и я даже не против его хранить. Но точно не в этом каталоге. Нормальный пользователь никогда не поймет, куда утекают его гигабайтики… Хорошо хоть пакеты можно очистить средствами самой утилиты.
1.1 GB C:\ProgramData\Microsoft\VisualStudioSecondaryInstaller\14.0\installers\ еще гигабайт с копейками, зачем хранить инсталяторы.. А нужно ли хранить?
6.0 GB c:\ProgramData\Package Cache\ — Тоже инсталяторы пакетов, тоже от студии. Да блин. И судя по номерам пакетов остались от старых версий.
7.4 GB c:\Windows\Installer\ — И снова инсталяторы…. Серьезно нужно столько всего хранить?
1 GB c:\Users\\AppData\Local\Packages\ — У меня удалено большинство У меня удалено большиснтво аппв из стора, суда по именам каталогов хранится куча мусора от приложениий которые удалены, или заченены чем-то (Zune…. например)
Может я что-то не понимаю, но это не нормально.
Не нормально как минимум хранить мусор от приложений из стора которые не установлены.
Не нормально хранить пакеты инсталятора студии. В интернете нарывался на упоминание, что они нужны для удаления студии корректного. Я бы описал это как «нам лень делать хорошо, вот есть костыль»
Vadim Sterkin
Алекс, в MSI все сделано правильно. После установки вы получаете полностью управляемое состояние приложения с возможностью удаления, восстановления, в т.ч. централизованными средствами.
Вопрос в том, насколько эти пакеты в ProgramData необходимы для восстановления работоспособности ПО или его компонентов. Все что лежит в %windir%\Installer — необходимо и достаточно для удаления. Другими словами, вам надо переместить в другое расположение пакеты из ProgramData > попробовать восстановить приложение > сообщить результат. Думаю, без них восстановление не пройдет.
Anton Rozhin
Отличная статья и прилетела вовремя. Не далее как вчера в конце рабочего дня я вдруг увидел сообщение на сервере о нехватке свободного места на сервере. Открыв свойства диска С, обнаружил, что места осталось 0 байт. Подобная проблема однажды была, когда установленный на сервере Eset забил все свободное место логом ошибок.
В этот раз я знал, что лога как и самого Eset’a там уже нет, но мне нужно было срочно хотя бы немного свободного пространства, т.к. пользователи уже не могли продолжать работу на сервере из-за нехватки места. Я решил удалить один из профилей ранее удаленного пользователя, так должно было освободиться несколько гигабайт. Удаляя профиль, я посматривал, как в процессе освобождается место, но оно заполнялось почти с той же скоростью, с какой освобождалось. Первая мысль, конечно — вирус. Пришлось отключить сервер и искать, куда же уходит свободное место. Загрузившись с LiveCD и проверив свободное место, обнаружил, что папка Windows стала более 130 Гб. При этом в живой системе ее объем не превышал 30, вероятно, что свойства папки Windows на запущенной системе были показаны неверно и даже Total Commander, запущенный с правами администратора показывал неверные данные. В общем, обнаружил я файл spooler.xml неприличного размера, удалил его, перезагрузил систему. И все же отключил ведение лога ошибок Диспетчера печати.
Vadim Sterkin
Да вроде как вы и без статьи справились, но dfp могла помочь отловить проблемный файл.
Anton Rozhin
dfp появилась с win 8, а проблема на стареньком сервере win 2008 (и даже не r2). Действительно я справился и без статьи, но с ней у меня получилось бы быстрее. Стоило бы ее прочитать сразу при получении оповещения на почту. Как минимум быстренько определил бы размеры папок теневых копий и скорее всего быстрее и точнее определил бы размер папки Windows.
В любом случае, чтение Ваших статей всегда познавательно.
Александр [Маздайщик]
Отчёт утилиты dfp: http://pastebin.com/pSYEStyM — что это? Это имена файлов кириллицей. Утилита просто замечательная (мне она реально очень понравилась), но почему-то имена файлов, отличные от ASCII, она не выводит. Вариант обхода: добавить ключ /xml имяфайла.xml.
ОС Windows 10 x64 не инсайдерская.
Николай
Вадим, можно вопрос. Почему файл размером 1 байт на диске занимает 4,0 КБ — понятно, из-за неиспользуемой части кластера.
http://itmages.ru/image/view/3152721/6531884a
А как объяснить, что файл размером 536 байт на диске занимает 0 байт? Причем, именно размер 536 байт является критическим. 537 байт уже займет на диске 4,0 КБ. Весь находится в MFT? Разве в данном случае занимаемое место на диске не отображается?
http://itmages.ru/image/view/3152726/b15aec98
Vadim Sterkin
Именно, ему не выделяются дополнительные кластеры.По теме также https://www.outsidethebox.ms/14318/#_Toc343199592
Fyodor Seleznyov
Не могу найти около 40 ГБ
http://s017.radikal.ru/i430/1512/97/95f0109ed517.png
http://s019.radikal.ru/i622/1512/b9/0e5165d520dd.png
http://s017.radikal.ru/i429/1512/88/036c250ed475.png
Vadim Sterkin
Федор, т.е. скриншоты свойств объектов из корня диска — это все, что вы вынесли из этой статьи? Гм… ну, ок.
Fyodor Seleznyov
я проделал все что написано в этой статье, в итоге переустановил windows, но проблема начала повторятся, уже пропали 15 ГБ.
на скриншоте показывает, что занято 170 ГБ, но если вручную просуммировать каждую папку, то получится 155.
http://s018.radikal.ru/i511/1512/35/53ded9318c20.png
Vadim Sterkin
Федор, мне жаль, что за три недели вы не продвинулись дальше суммирования папок, при том что в статье подробно разбирается бессмысленность этого действия. Советую вам обратиться на OSZone, лучше сразу в ХВЗ.
Fyodor Seleznyov
ну так если потерянный ГБ никак не относятся ко всему, что написано в статье? было свободно к примеру 80 ГБ, через пару дней уже 65, причем в системе ничего не менялось, проверены теневые копии, метаданные и тд, куда по вашему они делись? антивирусом так же все проверил, я просто ни разу с таким не сталкивался.
Vadim Sterkin
Я не могу это определить на основе предоставленной вами информации. А вы должны быть способны это определить на основе предоставленной мной информации, поскольку в статье даже рассматривается методика как раз для такого случая.
Не способны? Обращайтесь в форум, там из вас будут вытягивать информацию клещами. А я не буду, потому что мне жаль своего времени, даже на такие ответы.
Тогда тем более непонятно, чего вы хотите от меня.
Дмитрий Брызгалов
Вадим, а все таки, в каких редакциях присутствует\отсутствует DFP? У меня Windows 10 pro, но CMD как не знала про эту утилиту, так и не знает.
Vadim Sterkin
Дмитрий, это тайна, разгадку которой не знают даже в Microsoft :)
Дмитрий Брызгалов
А доустановить утилиту как-то можно?
Vadim Sterkin
Наверное, можно, перенести файлы dfp* из System32, но смысла в этом я особого не вижу.
Костя К
dfp /b /top 25 /elapsed /study {largest} C:\
на виндовс 10 отказывается работать. «команда не найдена». Пробовал под админом и простым.
Vadim Sterkin
Не вы первый, не вы последний (см. комментарии).
Костя К
выполнить батником? Лучше если добавить это в статью,так как все больше людей ставят 10 виндовс и всё больше будут спрашивать.
Vadim Sterkin
В статье есть примечание, что утилиты нет в ряде сборок. В первой десятке комментариев об этом тоже говорится. Прямо над вашим комментарием тоже. При чем тут батник…
Евгений Урусов
Спасибо за весьма интересную статью, Вадим. Наткнулся на нее в поисках ответа на вопрос — есть ли какой нибудь способ определить реальный размер папки с учетом жестких ссылок внутри папки. К сожалению, вопрос так и не прояснился. Поясню: допустим есть папка d:\test\ в ней — папки folder1 и folder2 в папке folder1 лежит файл file1.dat размером 100Мб. я создаю hardlink на этот файл в папке folder2, после чего в свойствах папки d:\test\ отображается, что она занимает 200Мб, хотя реально, как мы понимаем, она занимает на диске те же 100Мб. Есть ли какой нибудь простой способ посмотреть «правильный» размер в даннном случае?
Евгений Урусов
Извините, вопрос снимается! Far Manager хоть и показывает по F3 «неправильный» размер, но если вызвать Quick View на папке (Ctrl-Q), то он показывает в числе прочего Allocated Size — реальный занимаемый размер на диске. И мало того, даже проценты от всего «неправильного» объема отображает (точно 50% пишет!)
Vadim Sterkin
Евгений, годится, но учет может вестись не только по жестким ссылкам :) Точнее будет с sysinternals du (без ключа -u жесткие ссылки не учитываются): Disk Usage
Подробнее в https://vk.com/wall-81672804_2831
Сергей Золотарёв
Так никто и н ответил… Вадим, поделитесь секретом))
Vadim Sterkin
В случае, если назначены квоты диска :)