У нас есть жесткий диск на 600 гигабайт, который почти заполнен. Он заполнен 18 501 765 файлами (в основном небольшими изображениями 19 КБ) и 7 142 132 папками. Также очень сложно узнать, куда именно ушло все пространство. Наши регулярные процедуры очистки не освобождают достаточно места, а это означает, что нам нужно посмотреть на этот диск в целом и определить, что там находится, а что можно переместить или удалить. Мы опробовали несколько приложений, и до сих пор они либо взорвались, либо просто работали в течение удивительного количества времени.
Космический Обсервер смог прочитать 18 501 765 файлов и 7 142 132 папки, практически не занимая памяти. Я уверен, что это в основном связано с тем, что он использует серверную часть SQL для хранения всех данных. К сожалению, это самый дорогой из всех продуктов - 259,95 долларов за сервер.
Во время исследования я пробовал несколько разных решений, как платных, так и бесплатных. Я сохранил список продуктов, которые пробовал, ниже для всеобщего сведения.
Обновление # 1: Сервер, который я пытаюсь проанализировать, имеет 2 ГБ ОЗУ, и большинство продуктов, которые я пробую, похоже, пытаются сохранить информацию о файле / папке в памяти. Это имеет тенденцию слишком быстро заканчиваться с 18 501 765 файлами и 7 142 132 папками.
Обновление # 2: Похоже, что разработчики WinDirStat достаточно вмешались, чтобы сказать нам, что он может компилироваться под 64-битной версией. Это дает ему больше памяти для работы, но я не уверен, что этого будет достаточно, если они не сохранятся на диске.
Предполагая, что ваша ОС - Windows ...
В любом случае, табулирование миллионов файлов всегда займет много времени и будет ограничиваться вводом-выводом самого диска. Я рекомендую TreeSize Professional. Или, может быть SpaceObServer. Вы также можете попробовать бесплатную версию TreeSize.
Определенно попробуй WinDirStat: он дает фантастическую визуализацию использования диска, отображая каждый файл в виде прямоугольника, нарисованного в масштабе, с цветовой кодировкой в зависимости от типа файла. Щелкните любой элемент в визуализации, и вы увидите его в дереве каталогов.
Стандартная 32-разрядная сборка ограничена 10 миллионами файлов и 2 ГБ ОЗУ, но исходный код будет успешно собран как 64-разрядное приложение. Тот факт, что рассматриваемый сервер имеет только 2 ГБ ОЗУ, может быть проблематичным в этом конкретном случае, но большинство серверов с таким большим количеством файлов будут иметь гораздо больше ОЗУ.
Редактировать №1: Я с сожалением обнаружил, что при тестировании на томе 4 ТБ, содержащем миллионы файлов, WinDirStat Portable вылетал после индексации около 6,5 миллионов файлов. Это может не сработать для исходного вопроса, если на диске содержится более 6 миллионов файлов.
Редактировать # 2: Полная версия WinDirStat вылетает при 10 миллионах файлов и использовании 1,9 ГБ
Редактировать № 3: Я связался с разработчиками WinDirStat и: (1) они согласны с тем, что это было вызвано ограничениями использования памяти архитектурой x86, и (2) упомянули, что его можно скомпилировать как 64-битный без ошибок. Скоро.
Изменить № 4: Тест 64-разрядной сборки WinDirStat прошел успешно. За 44 минуты он проиндексировал 11,4 миллиона файлов и потребил 2,7 ГБ оперативной памяти.
Я регулярно использую FolderSizes на нескольких дисках по 1 ТБ с несколькими миллионами файлов без проблем.
+1 для продуктов TreeSize, но ...
Ваше предложение о «недостаточно очищенном месте» заставляет меня задуматься: не закончилось ли у вас зарезервированное пространство NTFS MFT? Если файловая система захватывает больше пространства MFT, чем изначально выделено, оно не возвращается в обычное файловое пространство и не отображается в операциях дефрагментации.
http://support.microsoft.com/kb/174619
"Тома с небольшим количеством относительно больших файлов сначала исчерпывают незарезервированное пространство, тогда как тома с большим количеством относительно небольших файлов сначала исчерпывают пространство зоны MFT. В любом случае фрагментация MFT начинается, когда одна область или другое становится полным. Если незарезервированное пространство становится заполненным, пространство для пользовательских файлов и каталогов начинает выделяться из зоны MFT, конкурирующей с MFT за выделение. Если зона MFT заполняется, пространство для новых записей MFT выделяется из оставшейся части диск, снова конкурирующий с другими файлами ".
Шутки в сторону. Я сделал это с 5 или 6 миллионами файлов; не уверен, что именно вы ищете, но хороший язык сценариев съест это.
Обычно я не пользуюсь Windows, но знаю о существовании Cygwin. :-)
Если он работает достаточно хорошо, что-то вроде
du -m /your/path | sort -nr | head -n 50
или, возможно, в Cygwin
du C:\ | sort -nr | head -n 50
В любом случае, они должны распечатать вам 50 самых больших каталогов (размеры в мегабайтах).
Я обнаружил несколько проблем с Spacemonger и искал утилиту, которую можно было бы легко перенести или запустить с USB-накопителя - Космический сниффер оказался очень универсальным в этом отношении и с легкостью обрабатывал многотерабайтные тома.
du -s
можно использовать в крайнем случае, и будет работать столько, сколько необходимо.
В Windows я использую SpaceMonger (или старая бесплатная версия). В OSX я использую Дисковая инвентаризация X.
Посмотри на GetFoldersize
Что касается таблицы mft, я, кажется, припоминаю, что jkdefrag, исходная версия с открытым исходным кодом, давала очень точное представление диска, включая различную окраску для областей mft. Я думаю, что однажды использовал это для приблизительной оценки размера mft и фрагментации.
Также не заботится о chdsk.
Может попробовать?
http://www.freshney.org/xinorbis/
Другой возможный вариант
Я использовал Анализатор использования диска - Baobab в Linux с помощью функции удаленного сканирования на сервере Windows. Хотя я не знаю, каковы его пределы.
Fedora LiveCD содержит баобаб. Загрузите его на любом компьютере в вашей локальной сети.
Это все бесплатно - как в пиве, так и в речи. Также для коммерческого использования.