Вопрос о VCN в Index Entry атрибута $INDEX_ROOT на NTFS дисках с кластерами 64 Кb. В некоторых редких случаях VCN оказывается вне диапазона, указанного в атрибуте $INDEX_ALLOCATION. Например, в $INDEX_ALLOCATION указан диапазон VCN 0-2, а записи Index Entry ссылаются на VCN 0x30 и 0x110. Проблема, похоже, встречается только на дисках с кластером 64 Kb. В Интернете нашел только одно упоминание (http://forum.ntfs.com/discussion/1113/invalid-vcn-number-at-last-index-entry-64k-cluster-size), оставленное без ответов.
Ситуацию удалось воспроизвести. На первой картинке показан атрибут $INDEX_ROOT, в котором видно номера двух VCN дополнительных блоков индексов, на которые ссылаются записи Index Entry из $INDEX_ROOT: 0x30 и 0x110.
Но в атрибуте $INDEX_ALLOCATION того же каталога видим, что диапазон VCN только 0-2.
Не знаете ли, как интерпретировать такие номера VCN?
Размер буффера, номерами которых индексируется ссылки, указан в аттрибуте 0x90.
Полагаю, что у вас это будет 512 байт, а не 64К.
Выложите сырые данные MFT записи (чтобы видеть 0x90) и $INDEX_ALLOCATION (думаю не обязательно)
Re[2]: NTFS: VCN в Index Entry атрибута $INDEX_ROOT
Здравствуйте, MShura, Вы писали:
MS>Размер буффера, номерами которых индексируется ссылки, указан в аттрибуте 0x90. MS>Полагаю, что у вас это будет 512 байт, а не 64К. MS>Выложите сырые данные MFT записи (чтобы видеть 0x90) и $INDEX_ALLOCATION (думаю не обязательно)
Спасибо. Вот MFT запись целиком:
Re[3]: NTFS: VCN в Index Entry атрибута $INDEX_ROOT
MS>>Размер буффера, номерами которых индексируется ссылки, указан в аттрибуте 0x90. MS>>Полагаю, что у вас это будет 512 байт, а не 64К. MS>>Выложите сырые данные MFT записи (чтобы видеть 0x90) и $INDEX_ALLOCATION (думаю не обязательно)
C>Спасибо. Вот MFT запись целиком:
В 0x90 прописано, что размер буффера-индекса (вкратце индекс) 0x1000.
Если размер индекса меньше кластара файловой системы, то нумерация идет в блоках 512 байт.
Собственно число 8 в 0x90 (не могу указать абсолютный адрес) и есть факт того, что в одном индексе 8 блоков
В общем индексация в данном случае идет по блокам 512 байт
Сам 0xa0 занимает 0x30000 байт, что есть 0x180 блоков по 512 байт
Итого ссылка 0x30 — прочитать индекс 0x1000 байт по смещению 0x30 * 0x200 = 0x6000 от начала 0xa0
ссылка 0x110 — прочитать индекс 0x1000 байт по смещению 0x110 * 0x200 = 0x22000 от начала 0xa0
P.S.
По-моему любой редактор, который показывает нормально hex, удобней приведенной программы.
Re[4]: NTFS: VCN в Index Entry атрибута $INDEX_ROOT
Здравствуйте, MShura, Вы писали:
MS>>>Размер буффера, номерами которых индексируется ссылки, указан в аттрибуте 0x90. MS>>>Полагаю, что у вас это будет 512 байт, а не 64К. MS>>>Выложите сырые данные MFT записи (чтобы видеть 0x90) и $INDEX_ALLOCATION (думаю не обязательно)
C>>Спасибо. Вот MFT запись целиком:
MS>В 0x90 прописано, что размер буффера-индекса (вкратце индекс) 0x1000. MS>Если размер индекса меньше кластара файловой системы, то нумерация идет в блоках 512 байт. MS>Собственно число 8 в 0x90 (не могу указать абсолютный адрес) и есть факт того, что в одном индексе 8 блоков
MS>В общем индексация в данном случае идет по блокам 512 байт MS>Сам 0xa0 занимает 0x30000 байт, что есть 0x180 блоков по 512 байт
MS>Итого ссылка 0x30 — прочитать индекс 0x1000 байт по смещению 0x30 * 0x200 = 0x6000 от начала 0xa0 MS>ссылка 0x110 — прочитать индекс 0x1000 байт по смещению 0x110 * 0x200 = 0x22000 от начала 0xa0