NTFS. Бол. кол-во файлов. Некоторые записи не прочитались.
От: BLo Россия  
Дата: 23.09.08 06:11
Оценка:
Я пробегаю по всем записям (рассматриваю каждые 1024 байт). Выбираю только нормальные файлы (не используемые, пустые, части другой записи и не являющиеся файловыми записями не рассматриваю). В итоге получаю количество файлов меньшее (примерно на 30%) чем я вижу в свойствах корневой директории.

Размер диска: 100Мб
Размер кластера: 4К
Размер сектора: 512Б
Файлов (размером 100Б): 23 102
Директорий: 4622

Что делать?
Re: NTFS. Бол. кол-во файлов. Некоторые записи не прочиталис
От: MShura  
Дата: 23.09.08 11:50
Оценка:
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. Бол. кол-во файлов. Некоторые записи не прочита
От: BLo Россия  
Дата: 23.09.08 19:54
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Дело в hardlink.


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

Там нет файлов с количество ссылок больше 1(кроме парочки системных).

Как это обьяснить?
Re[3]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
От: MShura  
Дата: 24.09.08 10:43
Оценка:
BLo>Как это обьяснить?

Том в целостности?
Если да, то попробуйте запустить мою программу на ваш том и если результат совпадет с ожидаемыми, то обсудим дальше.
http://files.rsdn.ru/24534/infntfs.rar

запускать после распаковки так:
infntfs x:

где x — буква исследуемого тома.

Извините, что бинарник, а не сорсы.
Re[4]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
От: BLo Россия  
Дата: 25.09.08 07:37
Оценка:
Здравствуйте, 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. Бол. кол-во файлов. Некоторые записи не прочита
От: MShura  
Дата: 25.09.08 10:53
Оценка:
BLo>Вот что показала мне Ваша программа. Количество файлов и директорий совпадает с тем что я вижу в свойствах корневой
BLo>директории. Почему же у меня не совпадает?

MFTRecords         : 64960      (0xfdc0)
TotalFiles         : 23124      (0x5a54)
UserFiles          : 23102      (0x5a3e)
UserFileNames      : 23102      (0x5a3e)
TotalDirs          : 4627       (0x1213)
UserDirs           : 4622       (0x120e)


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
Дата: 10.05.06

Поэтому нет поля UserDirNames (поскольку у директории только одно имя, это поле равно UserDirs)

Т.е. за исключением количества имен всю информацию можно получить из заголовка MFT записи.

Начните проверку с количества просканированных записей.
Re[6]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
От: BLo Россия  
Дата: 25.09.08 11:55
Оценка:
Здравствуйте, MShura, Вы писали:

BLo>>Вот что показала мне Ваша программа. Количество файлов и директорий совпадает с тем что я вижу в свойствах корневой

BLo>>директории. Почему же у меня не совпадает?

MS>
MS>MFTRecords         : 64960      (0xfdc0)
MS>TotalFiles         : 23124      (0x5a54)
MS>UserFiles          : 23102      (0x5a3e)
MS>UserFileNames      : 23102      (0x5a3e)
MS>TotalDirs          : 4627       (0x1213)
MS>UserDirs           : 4622       (0x120e)
MS>


MS>1) Просканировано 64960 записей

MS>2) Среди них у 23124 + 4627 выставлен флаг 'InUse' (бит 1 16 битного поля по смещению 0x16)

Я надеюсь что Вы просто забыли сказать, что к этим записям относятся только имеющие сигнатуру 'FILE'. Если нет, то почему?
Re: NTFS. Бол. кол-во файлов. Некоторые записи не прочиталис
От: BLo Россия  
Дата: 25.09.08 12:57
Оценка:
Здравствуйте, BLo, Вы писали:

Может метод чтения с диска данных влиять на их коректоность?. Данные читаются sector aligned, парой вызовов SetFilePointer, ReadFile.

Есть ли иные методы чтения данных с диска.
Re[7]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
От: MShura  
Дата: 25.09.08 15:00
Оценка:
BLo>Я надеюсь что Вы просто забыли сказать, что к этим записям относятся только имеющие сигнатуру 'FILE'. Если нет, то почему?
infntfs помимо проверки сигнатуры также проверяла mft bitmap (в случае целостного тома 'InUse' совпадает с bitmap).

Да помимо 'FILE' у записей может быть 'BAAD' или 'HOLE' или даже 'CHKD'.
Сомневаюсь, что в Вашем случае это так.
Это чрезвычайно редкие случаи.
Re[8]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
От: BLo Россия  
Дата: 26.09.08 04:03
Оценка:
Здравствуйте, MShura, Вы писали:

MS>infntfs помимо проверки сигнатуры также проверяла mft bitmap (в случае целостного тома 'InUse' совпадает с bitmap).


Объясните подробнее 'также проверяла mft bitmap (в случае целостного тома 'InUse' совпадает с bitmap)'.
Re[9]: NTFS. Бол. кол-во файлов. Некоторые записи не прочита
От: MShura  
Дата: 29.09.08 12:44
Оценка:
BLo>Объясните подробнее 'также проверяла mft bitmap (в случае целостного тома 'InUse' совпадает с bitmap)'.

Узнать занята запись или нет можно проанализировав её флаг 'InUse'.
Однако чтобы найти свободную запись не обязательно читать все записи в поисках записи без флага 'InUse'.
Для этих целей есть mft bitmap, биты которого дублируют флаг 'InUse' записей.

Их несоответствие — ошибка в файловой системе, которую chkdsk исправляет, считая флаг 'InUse' первичным, а битмап вторичным признаком.
Re: NTFS. Бол. кол-во файлов. Некоторые записи не прочиталис
От: BLo Россия  
Дата: 30.09.08 15:09
Оценка:
Здравствуйте, BLo, Вы писали:

BLo>Я пробегаю по всем записям (рассматриваю каждые 1024 байт). Выбираю только нормальные файлы (не используемые, пустые, части другой записи и не являющиеся файловыми записями не рассматриваю). В итоге получаю количество файлов меньшее (примерно на 30%) чем я вижу в свойствах корневой директории.


BLo>Размер диска: 100Мб

BLo>Размер кластера: 4К
BLo>Размер сектора: 512Б
BLo>Файлов (размером 100Б): 23 102
BLo>Директорий: 4622

BLo>Что делать?


Все я разобрался. Все работает. Всем спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.