Я пробегаю по всем записям (рассматриваю каждые 1024 байт). Выбираю только нормальные файлы (не используемые, пустые, части другой записи и не являющиеся файловыми записями не рассматриваю). В итоге получаю количество файлов меньшее (примерно на 30%) чем я вижу в свойствах корневой директории.
Размер диска: 100Мб
Размер кластера: 4К
Размер сектора: 512Б
Файлов (размером 100Б): 23 102
Директорий: 4622
Что делать?
Re: NTFS. Бол. кол-во файлов. Некоторые записи не прочиталис
BLo>Я пробегаю по всем записям (рассматриваю каждые 1024 байт). Выбираю только нормальные файлы (не используемые, пустые, части другой записи и не являющиеся файловыми записями не рассматриваю). В итоге получаю количество файлов меньшее (примерно на 30%) чем я вижу в свойствах корневой директории. BLo>Что делать?
Дело в hardlink.
Vista очень активно ими пользуется
Как только Vista вышла я написал программку (наверняка есть аналогичные), которая выводит все линки http://files.rsdn.ru/24534/VistaLink.txt
Она показала, что:
— файлов с более чем одним именем 7532
— из них образовано 15231 имен
Т.е. у подавляющего большинства файлов с несколькими именами имен всего 2, но есть по 3 и даже по 4 имени (более 10 файлов)
например это один файл (одна запись), но 4 имени
— "/Windows/system/vga.drv"
— "/Windows/winsxs/x86_microsoft-windows-ntvdm-system_31bf3856ad364e35_6.0.5308.17_neutral_07be7a2f97970810/vga.drv"
— "/Windows/winsxs/x86_microsoft-windows-ntvdm-system32_31bf3856ad364e35_6.0.5308.17_neutral_e121faddb09013b3/vga.drv"
— "/Windows/System32/vga.drv"
В MFT записи есть 16 битовое поле по смещению 0x12 — количество имен у файла.
Только следует помнить о парных именах. Для вашей задачи их надо считать за 1 имя.
Узнать есть или нет парные имена можно только перечислением всех имен в файле.
Re[2]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
Том в целостности?
Если да, то попробуйте запустить мою программу на ваш том и если результат совпадет с ожидаемыми, то обсудим дальше. http://files.rsdn.ru/24534/infntfs.rar
запускать после распаковки так:
infntfs x:
где x — буква исследуемого тома.
Извините, что бинарник, а не сорсы.
Re[4]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
Здравствуйте, MShura, Вы писали:
MS>Том в целостности? MS>Если да, то попробуйте запустить мою программу на ваш том и если результат совпадет с ожидаемыми, то обсудим дальше. MS>http://files.rsdn.ru/24534/infntfs.rar
Я думаю, что том в целостности, иначе как проверить на НЕ целостность я не знаю.
Вот что показала мне Ваша программа. Количество файлов и директорий совпадает с тем что я вижу в свойствах корневой
директории. Почему же у меня не совпадает?
C:\>infntfs n:
Trying to initialize NTFS
NTFS is initialized successfully
--------------------------------------
NTFS volume information:
Version : 3.01
Label : ""
Bytes per cluster : 4096 bytes
Bytes per sector : 512 bytes
Total clusters : 0x000063ff (25599)
Used clusters : 0x00005b03 (23299) 91%
Serial number : 5a23bfc6-ac5a23fa
Volume state : clean
Root is : not compressed
--------------------------------------
MFTRecords : 64960 (0xfdc0)
TotalFiles : 23124 (0x5a54)
UserFiles : 23102 (0x5a3e)
UserFileNames : 23102 (0x5a3e)
TotalDirs : 4627 (0x1213)
UserDirs : 4622 (0x120e)
Re[5]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
BLo>Вот что показала мне Ваша программа. Количество файлов и директорий совпадает с тем что я вижу в свойствах корневой BLo>директории. Почему же у меня не совпадает?
1) Просканировано 64960 записей
2) Среди них у 23124 + 4627 выставлен флаг 'InUse' (бит 1 16 битного поля по смещению 0x16)
и ссылка на родительскую запись 0
3) Среди (2) у 23124 нет флага 'Dir' (бит 2 16 битного поля по смещению 0x16)
4) Среди (2) у 4627 есть флаг 'Dir'
5) Среди (3) у 23102 нет флага 'System' (бит 4 16 битного поля по смещению 0x16)
6) Среди (4) у 4622 нет флага 'System'
7) Среди (5) 23102 уникальных имен (парное имя считается за 1)
Для директорий драйвер ntfs не позволяет сделать hardlink (Можно получить циклические ссыли).
Если их сделать сторонними утилитами, то поведение ntfs.sys разное под разными OS. http://www.rsdn.ru/forum/message/1891058.1.aspx
Здравствуйте, MShura, Вы писали:
BLo>>Вот что показала мне Ваша программа. Количество файлов и директорий совпадает с тем что я вижу в свойствах корневой BLo>>директории. Почему же у меня не совпадает?
MS>
BLo>Я надеюсь что Вы просто забыли сказать, что к этим записям относятся только имеющие сигнатуру 'FILE'. Если нет, то почему?
infntfs помимо проверки сигнатуры также проверяла mft bitmap (в случае целостного тома 'InUse' совпадает с bitmap).
Да помимо 'FILE' у записей может быть 'BAAD' или 'HOLE' или даже 'CHKD'.
Сомневаюсь, что в Вашем случае это так.
Это чрезвычайно редкие случаи.
Re[8]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
Здравствуйте, MShura, Вы писали:
MS>infntfs помимо проверки сигнатуры также проверяла mft bitmap (в случае целостного тома 'InUse' совпадает с bitmap).
Объясните подробнее 'также проверяла mft bitmap (в случае целостного тома 'InUse' совпадает с bitmap)'.
Re[9]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
BLo>Объясните подробнее 'также проверяла mft bitmap (в случае целостного тома 'InUse' совпадает с bitmap)'.
Узнать занята запись или нет можно проанализировав её флаг 'InUse'.
Однако чтобы найти свободную запись не обязательно читать все записи в поисках записи без флага 'InUse'.
Для этих целей есть mft bitmap, биты которого дублируют флаг 'InUse' записей.
Их несоответствие — ошибка в файловой системе, которую chkdsk исправляет, считая флаг 'InUse' первичным, а битмап вторичным признаком.
Re: NTFS. Бол. кол-во файлов. Некоторые записи не прочиталис
Здравствуйте, BLo, Вы писали:
BLo>Я пробегаю по всем записям (рассматриваю каждые 1024 байт). Выбираю только нормальные файлы (не используемые, пустые, части другой записи и не являющиеся файловыми записями не рассматриваю). В итоге получаю количество файлов меньшее (примерно на 30%) чем я вижу в свойствах корневой директории.
BLo>Размер диска: 100Мб BLo>Размер кластера: 4К BLo>Размер сектора: 512Б BLo>Файлов (размером 100Б): 23 102 BLo>Директорий: 4622
BLo>Что делать?