Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лекція 23 Структури даних UFS1 і UFS2

Поиск

В цьому розділі приведені описи структур даних файлових систем UFS1 і UFS2. Методи аналізу UFS наведено в розділі 1, а тут розглянуто структури даних і їх місцезнаходження в тестовій файловій системі. Структури даних UFS інколи містять декілька полів для зберігання одного значення в різних форматах. Скажімо, розмір блоку зберігається вираженим як у фрагментах, так і в байтах. Завдяки наявності різних форматів ОС не приходиться кожного разу заново перераховувати одні і ті ж параметри. Хоча деякі ОС можуть вимагати, аби в обох полях використовувалися еквівалентні значення, наявність дублюючих даних не є формально необхідним. Та все ж визначити, яким з форматів потрібно вважати основним, а який — похідним, нелегко. Я виділятиму один з форматів як основний, але цей вибір може не поширюватися на всі програми або ОС.

 

Суперблок UFS1

У файловій системі UFS суперблок містить основні дані, що відносяться до категорії файлової системи, але в UFS1i UFS2 використовуються різні структури даних. Суперблок UFS1 знаходиться в секторі 16, а для його зберігання виділяється 2048 байт, але білшість даних, що зберігаються, необов'язкові або заповнений нулями. Далі я описуватиму лише обов'язкові дані, але в наступній таблиці присутні всі необов'язкові поля. В таблиці 23.1 перераховані поля суперблоку UFS1, використовуваного в FREEBSD, NETBSD і OPENBSD.

 

Таблиця 23.1 – Структура даних суперблоку UFS1

 

Діапазон Опис Необхідність
0-7 Не використовується Немає
8-11 Зсув резервного суперблоку в групах циліндрів відносно «бази» Так
12-15 Зсув дескриптора в групах циліндрів відносно «бази» Так
16-19 Зсув таблиці індексних вузлів в групах циліндрів відносно «бази» Так
20-23 Зсув першого блоку даних в групах циліндрів відносно «бази» Немає
24-27 Додаткове зрушення (дельта) для організації розкиду в групах циліндрів Так
28-31 Маска для обчислення зсуву (цикл) в групах циліндрів Так
32-24 Час останнього запису Немає
36-39 Кількість фрагментів у файловій системі Так
40-43 Кількість фрагментів, в яких можуть зберігатися дані файлів Немає
44-47 Кількість груп циліндрів у файловій системі Так
48-51 Розмір блоку в байтах Так
52-55 Розмір фрагмента в байтах Так
56-59 Розмір блоку у фрагментах Немає
60-63 Мінімальний відсоток вільних блоків Немає
64-67 Тривалість обертання до наступного блоку (у мілісекундах) Немає
68-71 Частота обертання диска Немає
72-75 Маска, використовувана при обчисленні адреси блоку Немає
76-79 Маска, використовувана при обчисленні адреси фрагменту Немає
80-83 Зрушення, використовуване при обчисленні байтової адреси блоку Немає
84-87 Зрушення, використовуване при обчисленні байтової адреси фрагменту Немає
88-91 Максимальна кількість суміжних блоків, що виділяються Немає
92-95 Максимальна кількість блоків в одній групі циліндрів Немає
100-103 Кількість біт для перетворення між адресами фрагмента і сектору Немає
104-107 Розмір суперблоку Немає
108-111 Зсув зведення груп циліндрів (не використовується) Немає
112-115 Розмір зведення груп циліндрів (не використовується) Немає
116-119 Кількість непрямих адрес на фрагмент Немає
120-123 Кількість індексних вузлів на блок в таблиці індексних вузлів Немає
124-127 Кількість секторів на фрагмент Немає
128-131 Метод оптимізації Немає
132-135 Кількість секторів на доріжку Немає
136-139 Коефіцієнт чергування секторів жорсткого диска Немає
140-143 Зрушення доріжки жорсткого диска Немає
144-151 Ідентифікатор файлової системи Немає
152-155 Адреса фрагмента для зведення груп циліндрів Немає
156-159 Розмір зведення груп циліндрів в байтах Немає
160-163 Розмір дескриптора групи циліндрів в байтах Немає
164-167 Кількість доріжок в циліндрі Немає
168-171 Кількість секторів в циліндрі Немає
172-175 Кількість секторів в циліндрі Немає
176-179 Кількість циліндрів у файловій системі Немає
180-183 Кількість циліндрів в групі Немає
184-187 Кількість індексних вузлів в групі циліндрів Так
188-191 Кількість фрагментів в групі циліндрів Так
192-195 Кількість каталогів Немає
196-199 Кількість вільних блоків Немає
200-203 Кількість вільних індексних вузлів Немає
204-207 Кількість вільних фрагментів Немає
208-208 Прапор модифікації суперблоку Немає
209-209 Ознака «чистоти» файлової системи у момент монтування Немає
210-210 Прапор монтування системи в режимі «лише для читання» (1, якщо система доступна лише для читання) Немає
212-723 Остання точка монтування Немає
724-727 Остання група циліндрів, в якій проводився пошук Немає
728-1115 Не використовується Немає
1116-1195 Масив адрес індексних вузлів Немає
1196-1199 Передбачуваний середній розмір файлу Немає
1200-1203 Передбачувана кількість файлів в каталозі Немає
1204-1311 Не використовується Немає
1312-1315 Останнім часом запуску fsck Немає
1316-1319 Розмір масиву зведення кластерів в дескрипторах груп Немає
1320-1323 Максимальна довжина внутрішнього символічного заслання Так
1324-1327 Формат індексних вузлів Так
1328-1335 Максимальний розмір файлу Немає
1336-1343 Маска для обчислення зсуву в блоці Немає
1344-1351 Маска для обчислення зсуву у фрагменті Немає
1352-1355 Стан файлової системи Немає
1356-1359 Формат позиційних таблиць Немає
1360-1363 Кількість ротаційних позицій Немає
1364-1367 Заголовок списку ротаційних блоків Немає
1368-1371 Блоки для кожної ротації Немає
1372-1375 Сигнатура (0x011954) Так

 

На початку суперблоку зберігаються зсуви, що визначають місцезнаходження структур даних всередині кожної групи циліндрів. Також тут зберігаються параметри дельти і циклу, використовувані для обчислення базової адреси кожної групи циліндрів в UFS1. Стандартна загальна кількість блоків, фрагментів і груп циліндрів, інколи в декількох форматах. Кількість індексних вузлів і фрагментів в групі циліндрів зберігається пізніше в суперблоці.

В байті 128 знаходиться поле методу оптимізації виділення блоків. В даний час для нього визначено два значення. Якщо поле рівне 0, ОС прагне заощадити час при виділенні нових блоків; це може привести до неефективного використання простору і фрагментації в міру заповнення файлової системи. Якщо поле дорівнює 1, ОС прагне оптимізувати витрати дискового простору при виділенні нових блоків і знайти ідеальне місцезнаходження. З іншого боку, це може уповільнити створення нових файлів. Знання методу оптимізації може виявитися корисним під час відновлення файлів.

Починаючи з байту 208, в суперблоці розташований набір прапорів. Перший прапор встановлюється при модифікації суперблоку і скидається при монтуванні. Прапор в байті 209 обнуляється, якщо файлова система пройшла перевірку на «чистоту» при монтуванні. Прапор в байті 210 встановлюється рівним, якщо файлова система була змонтована лише для читання. Нарешті, байт 211 може містити будь-які прапори з набору, представленого в таблиці. 23.2.

 

Таблиця 23.2 – Прапори поля загальних прапорів в суперблоці

 

Прапор Опис Необхідність
0x01 Прапор зміни — встановлюється при монтуванні файлової системи Немає
0x02 Використовуються м’які залежності Немає
0x04 При наступному монтуванні потрібна перевірка цілісності даних Немає
0x08 Каталоги індексуються із застосуванням хеш-дерева або В-дерева Немає
0x10 Використовуються списки ACL Немає
0x20 Використовується механізм TrustedBSD Mandatory Access Control Немає
0x80 Прапори були переміщені (використовується UFS2 в «старому» полі) Немає

 

Поле в байтах 1234-1237 ідентифікує тип індексного вузла, який використовується для зберігання метаданих файлу. Поле дорівнює 2 для індексних вузлів 4.4BSD або 0x0fffffff для індексних вузлів 4.2BSD. Останні дані суперблоку не є обов'язковими; вони можуть містити, а можуть і не містити дійсні дані.

Розглянемо систему OpenBSD. Суперблок знаходиться в секторі 16, а для його зберігання виділено 4 сектори, тому команда dd має вигляд, представлений в лістингу 23.1.

 

Лістинг 23.1 – Команда dd

# dd if=openbsdl.dd bs=512 skip=16 count=4 | xxd

0000000: 0000 0000 0000 0000 1000 0000 1800 0000.................

0000016: 2000 0000 1001 0000 2000 0000 f0ff ffff...............

0000032: dc9d 0f41 1027 0000 ff24 0000 0200 0000...A.'...$.......

0000048: 0020 0000 0004 0000 0800 0000 0500 0000................

0000064: 0000 0000 3с00 0000 00e0 ffff 00fc ffff....<............

0000080: 0d00 0000 0a00 0000 0700 0000 0008 0000.................

0000096: 0300 0000 0100 0000 0008 0000 00fe ffff.................

0000112: 0900 0000 0008 0000 4000 0000 0200 0000........@........

0000128: 0000 0000 3f00 0000 0100 0000 0000 0000....?............

0000144: 2c9d 0f41 8f5a 19a2 1001 0000 0004 0000...A.Z...........

0000160: 0008 0000 1000 0000 3f00 0000 f003 0000........?........

0000176: 1400 0000 1000 0000 8007 0000 801f 0000.................

0000192: 0400 0000 fe03 0000 e50e 0000 1000 0000.................

0000208: 0001 0000 2f6d 6e74 0000 0000 0000 0000..../mnt.........

0000224: 0000 0000 0000 0000 0000 0000 0000 0000.................

[…]

0000832: 0000 0000 0000 0000 0000 0000 00e6 d2d0.................

0000848: 0038 d3d0 003c d3d0 0100 0000 0000 0000.8...<...........

[…]

0001184: 0000 0000 0000 0000 0000 0000 0040 0000..............@..

0001200: 4000 0000 0000 0000 0000 0000 0040 0000 @................

[…]

0001312: 0000 0000 0700 0000 3с00 0000 0200 0000........<........

0001328: ff7f 0101 0840 0000 fflf 0000 0000 0000.....@...........

0001344: ff03 0000 0000 0000 0000 0000 0100 0000.................

0001360: 0100 0000 6005 0000 6205 0000 5419 0100....’...b...T....

0001376: 0000 0101 0101 0101 0101 0101 0101 0101.................

 

Дана файлова система працює на платформі IA32, тому в ній використовується формат з прямим порядком байтів. Якби файлова система відносилась до платформи із зворотним порядком байтів (скажімо, Sparc), то байти в кожному числовому полі слід було б переставити.

З вмісту байтів 8-11 видно, що резервні суперблоки зберігаються із зсувом 16 фрагментів (0x10) від базової адреси кожної групи циліндрів. Байти 12-15 показують, що дескриптор групи зберігається із зсувом 24 фрагменти (0x18) від базової адреси, а байти 16-19 — що таблиця індексних вузлів зміщена на 32 фрагменти (0x20).

Аби обчислити базову адресу для групи циліндрів UFS1, слід почати з байтів 24-27, в яких зберігається дельта 32 (0x20). Таким чином, в групі 0 база відповідає фрагменту 0, а в групі 1 — фрагменту 32. Маска циклу в байтах 28-31 рівна 0xfffffff0; це означає, що в номері групи нас цікавлять тільки 4 останніх біта. Отже, через кожних 16 груп відбувається повернення до початку, і зсув бази знову стає рівним 0. В даному прикладі в групи 15 зсув бази відповідає фрагменту 480, а в групи 16 воно повертається до фрагмента 0.

У байтах 32-35 зберігається час останнього запису у вигляді кількості секунд з 1 січня 1970 р. (GMT). Байти 36-39 показують, що система містить 10000 фрагментів (0x2710), а байти 44-47 — що в ній існує всього дві групи циліндрів. Розмір кожного блоку задається в байтах 48-51; ми бачимо, що він рівний 8192 байтам (0x2000). Розмір фрагмента в байтах 52-55 дорівнює 1024 байтам (0x0400). Для запобігання частому діленню цих двох чисел кількість фрагментів в блоці зберігається в байтах 56-59; у нашому випадку воно дорівнює 8.

По вмісту байтів 104-107 ми визначаємо, що суперблок займає 2048 байт (0x0800). Байти 152-155 задають місцезнаходження зведення груп циліндрів; у даній файловій системі вона знаходиться у фрагменті 272. Розмір зведення визначається байтами 156-159 і дорівнює 1024 байтам, або одному фрагменту. Кількість індексних вузлів в групі циліндрів (байти 184-187) в цій файловій системі дорівнює 1920 (0x0780). Кількість фрагментів в групі циліндрів (байти 188-191) дорівнює 8064 (0х1f80).

Поле прапорів починається з байта 208. Його перший байт дорівнює 0; це означає, що суперблок був змінений після останньої модифікації. Згідно байту 209, в системі використовуються м'які залежності, а прапори в байтах 210 і 211 знаходяться в стані за умовчанням. У байті 212 починається рядок останньої точки монтування; тестова файлова система востаннє вмонтовувалася в каталог /mnt/. Останні поля можна обробити самостійно. Вивід програми fsstat для цього образу був раніше наведений.

Суперблок UFS2

У суперблоці UFS2 зберігається та ж базова інформація, що і у версії UFS1, але з нього виключено багато невживаних полів, що дещо спростило структуру блоку. Деякі з 32-розрядних полів, що збереглися, були замінені 64-розрядними версіями. Суперблок UFS2 зазвичай знаходиться в секторі 128. Поля версії, використовуваної в FREEBSD і NETBSD, перераховані в таблиці. 23.3.

 

Таблиця 23.3 – Структура даних суперблоку UFS2

 

Діапазон Опис Необхідність
0-7 Не використовується Немає
8-11 Зсув резервного суперблоку в групах циліндрів відносно «бази» Так
12-15 Зсув дескриптора в групах циліндрів відносно «бази» Так
16-19 Зсув таблиці індексних вузлів в групах циліндрів відносно «бази» Так
20-23 Зсув першого блоку даних в групах циліндрів відносно «бази» Немає
24-43 Не використовується Немає
44-47 Кількість груп циліндрів у файловій системі Так
48-51 Розмір блоку в байтах Так
52-55 Розмір фрагмента в байтах Так
60-63 Мінімальний відсоток вільних блоків Немає
64-71 Не використовується Немає
72-75 Маска, використовувана при обчисленні адреси блоку Немає
76-79 Маска, використовувана при обчисленні адреси фрагмента Немає
80-83 Зрушення, використовуване при обчисленні байтової адреси блоку Немає
84-87 Зрушення, використовуване при обчисленні байтової адреси фрагмента Немає
88-91 Максимальна кількість суміжних блоків, що виділяються Немає
92-95 Максимальна кількість блоків в одній групі циліндрів Немає
96-99 Кількість біт для перетворення між адресами блоку і фрагмента Немає
100-103 Кількість біт для перетворення між адресами фрагмента і сектора Немає
104-107 Розмір суперблоку Немає
108-115 Не використовується Немає
116-119 Кількість непрямих адрес на фрагмент Немає
120-123 Кількість індексних вузлів на блок в таблиці індексних вузлів Немає
124-127 Не використовується Немає
128-131 Метод оптимізації Немає
132-143 Не використовується Немає
144-151 Ідентифікатор файлової системи Немає
152-155 Не використовується Немає
156-159 Розмір зведення груп циліндрів в байтах Немає
160-163 Розмір дескриптора групи циліндрів в байтах Немає
164-183 Не використовується Немає
184-187 Кількість індексних вузлів в групі циліндрів Так
188-191 Кількість фрагментів в групі циліндрів Так
192-207 Не використовується Немає
208-208 Прапор модифікації суперблоку Немає
209-209 Ознака «чистоти» файлової системи у момент монтування Немає
210-210 Прапор монтування системи в режимі «лише для читання» (1, якщо система доступна лише для читання) Немає
211-211 Не використовується Немає
212-679 Остання точка монтування Немає
680-711 Ім'я тому Немає
712-719 UID системи Немає
720-723 Не використовується Немає
724-727 Остання група циліндрів, в якій проводився пошук Немає
728-999 Не використовується Немає
1000-1007 Місцезнаходження суперблоку Немає
1008-1015 Кількість каталогів Немає
1016-1023 Кількість вільних блоків Немає
1024-1031 Кількість вільних індексних вузлів Немає
1032-1039 Кількість вільних фрагментів Немає
1040-1047 Кількість вільних кластерів Немає
1048-1071 Не використовується Немає
1072-1079 Час останнього запису Немає
1080-1087 Кількість фрагментів у файловій системі Так
1088-1095 Кількість фрагментів, в яких можуть зберігатися дані файлів Немає
1096-1103 Адреса зведення груп циліндрів (фрагмент) Немає
1104-1111 Кількість блоків, що звільняються Немає
1112-1115 Кількість індексних вузлів, що звільняються Немає
1116-1195 Масив адрес індексних вузлів Немає
1196-1199 Передбачуваний середній розмір файлу Немає
1200-1203 Передбачувана кількість файлів в каталозі Немає
1204-1311 Не використовується Немає
1312-1315 Прапори (див. таблицю 2.2) Немає
1316-1319 Розмір масиву зведення кластерів в дескрипторах груп Немає
1320-1323 Максимальна довжина внутрішнього символічного посилання Так
1324-1327 Формат індексних вузлів Так
1328-1335 Максимальний розмір файлу Немає
1336-1343 Маска для обчислення зсуву в блоці Немає
1344-1351 Маска для обчислення зсуву у фрагменті Немає
1352-1355 Стан файлової системи Немає
1356-1371 Не використовується Немає
1372-1375 Сигнатура (0x19540119) Так

 

Деякі поля перемістилися на інші місця. З цікавих змін можна відзначити лише те, що точка монтування стала коротша, а в суперблоці з'явилося поле для імені тому. Поле прапорів тепер займає 4 байти замість одного, але в ньому використовуються ті ж прапори, які були перераховані в таблиці 23.2. Також звернемо увагу на сигнатуру, що змінилася, — по ній UFS1 можна відрізнити від UFS2.

В лістингу 23.2 наводимо вміст суперблоку UFS2 для системи FREEBSD 5:

 

Лістинг 23.2 – Вміст суперблоку UFS2

# dd if=freebsd5.dd skip=128 count=4 | xxd

0000000: 0000 0000 0000 0000 2800 0000 3000 0000........(...0...

0000016: 3800 0000 d801 0000 0000 0000 0000 0000 8...............

0000032: 0000 0000 0000 0000 0000 0000 0400 0000................

0000048: 0040 0000 0008 0000 0800 0000 0800 0000.@..............

0000064: 0000 0000 0000 0000 00c0 ffff 00f8 ffff................

0000080: 0e00 0000 0b00 0000 0800 0000 0008 0000................

0000096: 0300 0000 0200 0000 0008 0000 0000 0000................

0000112: 0000 0000 0008 0000 4000 0000 0000 0000........@.......

0000128: 0000 0000 0000 0000 0000 0000 0000 0000................

0000144: adb2 0f41 fd0l 4al7 0000 0000 0008 0000...A..J.........

0000160: 0008 0000 0000 0000 0000 0000 0003 0000................

0000176: 0000 0000 0000 0000 0005 0000 b813 0000................

0000192: 0000 0000 0000 0000 0000 0000 0000 0000................

0000208: 0000 0080 2f6d 6e74 0000 0000 0000 0000..../mnt........

[...]

0000672: 0000 0000 0000 0000 5546 5332 0000 0000........UFS2....

[...]

0000832: 0000 0000 0000 0000 1038 66c3 0030 66c3.........8f..0f.

0000848: 0038 66c3 0000 0000 0000 0000 0040 0000.8f..........@..

[...]

0000992: 0000 0000 0000 0000 0000 0100 0000 0000................

0001008: 0400 0000 0000 0000 f308 0100 0000 0000................

0001024: e213 0000 0000 0000 1800 0000 0000 0000................

[...]

0001072: bdb4 0f41 0000 0000 c04e 0000 0040 0000...A.....N......

0001088: d74b 0000 0000 0000 d800 0000 0040 0000.K..............

[...]

0001184: 0000 0000 0000 0000 0000 0000 0040 0000.............@..

0001200: 4000 0000 0000 0000 0000 0000 0000 0000 @...............

[...]

0001312: 0000 0000 0800 0000 7800 0000 0000 0000........x.......

0001328: ffff 0202 1080 0000 ff3f 0000 0000 0000.........?......

0001344: ff07 0000 0000 0000 0000 0000 0000 0000................

0001360: 0000 0000 0000 0000 0000 0000 1901 5419..............T.

0001376: 0000 0101 0101 0101 0101 0101 0101 0101................

 

З байтів 8-11, 12-15 і 16-19 видно, що суперблок зберігається із зсувом 40 фрагментів (0x28) від початку кожної групи циліндрів, дескриптор зміщений від початку на 48 фрагментів (0x30), а індексна таблиця — на 56 фрагментів (0x38). Байти 44-47 показують, що в системі існує чотири групи циліндрів.

Розмір блоку задається в байтах 48-51; ми бачимо, що він дорівнює 16 384 байтам (0x4000). Розмір фрагменту (байти 52-55) дорівнює 2048 байтам (0x0800). Байти 184-87 показують, що група циліндрів містить 1280 (0x0500) індексних вузлів, а байти 188-191 — що група містить 5048 фрагментів (0х13b8). Загальна кількість фрагментів задається в байтах 1080-1087. У тестовій файловій системі воно дорівнює всього 20160 байтам.

В лістингу 23.3 представлено результат виконання fsstat для образу UFS2:

 

Лістинг 23.3 – Результат виконання fsstat для образу UFS2

# fsstat -f freebsd freebsd5.dd

FILE SYSTEM INFORMATION

- - - - - - - - - - - - - - - - - - - -

File System Type: UFS 2

Last Written: Tue Aug 3 10:52:29 2008

Last Mount Point: /mnt

Volume Name: UFS2

System UID: 0

 

METADATA INFORMATION

- - - - - - - - - - - - - - - - - - - -

Inode Range: 0 – 5119

Root Directory: 2

Num of Avail Inodes: 5090

Num of Directories: 4

 

CONTENT INFORMATION

- - - - - - - - - - - - - - - - - - - -

Fragment Range: 0 - 20159

Block Size: 16384

Fragment Size: 2048

Num of Avail Full Blocks: 2291

Num of Avail Fragments: 24

Зведення груп циліндрів

Як у UFS1, так і в UFS2 присутні фрагменти, що містять структури даних зведення груп циліндрів. Ці структури збігаються в обох версіях UFS і містять статистичну інформацію про кожну групу циліндрів. Структури утворюють таблицю, кожен елемент якої відповідає одній групі. Адреса і розмір зведення задаються в суперблоці. У таблиці 23.4 перераховані поля записів таблиці.

 

Таблиця 23.4 – Структура даних записів зведення груп циліндрів

 

Діапазон Опис Необхідність
0-3 Кількість каталогів Немає
4-7 Кількість вільних блоків (повний набір фрагментів) Немає
8-11 Кількість вільних індексних вузлів Немає
12-15 Кількість вільних фрагментів (неповні блоки) Немає

 

Як буде показано в наступному розділі, ці дані також присутні в кожному дескрипторі групи циліндрів. Вони використовуються при виділенні нових індексних вузлів і блоків.

В тестовому образі файлової системи UFS1 зведення груп циліндрів розташовувалось в блоці 272 і займало 1024 байти. Вміст відповідного фрагменту виглядає так:

# dcat -f openbsd openbsd.dd 272 | xxd

0000000: 0200 0000 2f03 0000 7807 0000 0b00 0000..../...x.......

0000016: 0200 0000 cf00 0000 6d07 0000 0500 0000........m.......

У першому рядку виводиться запис групи 0. З неї видно, що група складається з двох каталогів з 815 (0x032f) вільних блоків. Байти 8-11 показують, що в групі є 1912 (0x0778) вільних індексних вузлів, а байти 12-15 — що в неповних блоках міститься 11 (0х0b) вільних фрагментів. Другий рядок містить дані другої групи.

Для образів UFS програма fsstat з пакету TSK виводить інформацію про групи циліндрів. Приклад вихідних даних fsstat для тестового образу наведений в лекції 22. Виведена в ній інформація про групи циліндрів береться з суперблоку, зведення груп циліндрів і дескрипторів груп.

Дескриптор групи UFS1

Структура даних дескриптора групи містить інформацію про конфігурацію групи циліндрів. В кожній групі циліндрів створюється одна структура даних. Її зсув по відношенню до базової адреси задається в суперблоці, а UFS1 і UFS2 використовують різні структури. В цьому розділі ми опишемо структури даних для UFS1.

Дескриптори груп в UFS1 зберігаються з розкидом, хоча відстань від базової адреси залишається постійною. Метод обчислення базової адреси описаний в попередньому розділі. Для зберігання дескриптора зазвичай виділяється повний блок, хоча і використовується він лише частково. Багато полів не є обов'язковими і використовуються лише для підвищення ефективності виділення ресурсів.

Поля дескрипторів груп у файловій системі UFS1 перераховані в таблиці 23.5.

 

Таблиця 23.5 – Структура даних дескриптора групи в UFS1

 

Діапазон Опис Необхідність
0-3 Не використовується Немає
4-7 Сигнатура (0x090255) Немає
8-11 Час останнього запису Немає
12-15 Номер групи Немає
16-17 Кількість циліндрів в групі Немає
18-19 Кількість індексних вузлів в групі Немає
20-23 Кількість фрагментів в групі Немає
24-27 Кількість каталогів Немає
28-31 Кількість вільних блоків Немає
32-35 Кількість вільних індексних вузлів Немає
36-39 Кількість вільних фрагментів (неповні блоки) Немає
40-43 Останній виділений блок Немає
44-47 Останній виділений фрагмент Немає
48-51 Останній виділений індексний вузол Немає
52-83 Зведення вільних фрагментів Немає
84-87 Кількість вільних блоків в кожному циліндрі (зсув в байтах) Немає
88-91 Таблиця позицій вільних блоків (зсув в байтах) Немає
92-95 Бітова карта індексних вузлів (зсув в байтах) Так
96-99 Бітова карта фрагментів (зсув в байтах) Немає
100-103 Наступний вільний простір в дескрипторі (зсув в байтах) Немає
104-107 Кількість вільних кластерів, тобто суміжних блоків (зсув в байтах) Немає
108-111 Бітова карта блоків (зсув в байтах) Немає
112-115 Кількість блоків в групі Немає
116-167 Не використовується Немає
168+ Бітові карти і так далі Так

 

Починаючи з байта 168, в дескрипторі зберігається всіляка інформація, що включає бітові карти і таблиці. Вдескрипторі групи зберігаються зсуви декількох бітових карт відносно початки блоку дескрипторів групи. В просторі за цими полями зберігається ряд інших таблиць, які в основному не містять необхідних даних і використовуються для підвищення ефективності виділення нових блоків. Наприклад, бітова карта блоків, також названа бітовою картою кластерів, є зменшений варіант бітової карти фрагментів. Кожен біт в ній відповідає одному блоку. Біт встановлюється рівним 1, якщо всі відповідні фрагменти блоку в бітовій карті фрагментів дорівнюють 1.

Аби проаналізувати дескриптор першої групи в нашій системі OpenBSD UFS1, необхідно визначити його місцезнаходження. Для першої групи базовий зсув відповідає фрагменту 0. З суперблоку відомо, що дескриптор групи зміщений від бази на 24 фрагменти, тому ми переглядаємо фрагмент 24 програмою dcat:

 

Лістинг 23.5 – Фрагмент 24

# dcat -f openbsd openbsd.dd 24

0000000: 0000 0000 5502 0900 c99d 0f41 0000 0000....U......A....

0000016: 1000 8007 801f 0000 0200 0000 2f03 0000............/...

0000032: 7807 0000 0b00 0000 8801 0000 1001 0000 x...............

0000048: 0700 0000 0000 0000 0000 0000 0000 0000................

0000064: 0000 0000 0100 0000 0000 0000 0000 0000................

0000080: 0100 0000 a800 0000 e800 0000 0801 0000................

0000096: f801 0000 8206 0000 e405 0000 0406 0000................

0000112: f003 0000 0000 0000 0000 0000 0000 0000................

[…]

Байти 4-7 містять сигнатуру, а в байті 24 починається інформація про кількість вільних індексних вузлів і блоків, яку ми вже бачили раніше в області зведення груп циліндрів. Також тут присутня службова інформація про виділення; з байтів 40-43 видно, що останній виділений блок мав адресу 392 (0x0188), а з байтів 44-47 — що останній виділений фрагмент (неповний блок) мав адресу 272 (0x0110). Останній виділений запис індексного вузла вказаний в байтах 48-51; ми бачимо, що це був індексний вузол 7.

Зсув бітової карти індексних вузлів зберігається в байтах 92-95; ми бачимо, що бітова карта зміщена на 264 байти (0x0108) від початку групи дескрипторів. Бітова карта фрагментів (байти 96-99) видалена на 504 байти (0x01f8) від початку дескриптора групи. Бітова карта блоків (байти 108-111) зберігається із зсувом 1540 байт (0x0604) від початку дескриптора.

Дескриптор групи UFS2

Дескриптор групи UFS2 містить ту ж базову інформацію, що і його аналог з UFS1, але деякі з його полів займають більше місця. Місцезнаходження дескриптора відносно початку групи циліндрів зберігається в суперблоці, але, на відміну від дескрипторів UFS1, додатковий розкид не використовується. Поля дескрипторів груп у файловій системі UFS2 перераховані в таблиці 23.6.

 

Таблиця 23.6 – Структура даних дескриптора групи в UFS2

 

Діапазон Опис Необхідність
0-3 Не використовується Немає
4-7 Сигнатура (0x090255) Немає
8-11 Не використовується Немає
12-15 Номер групи Немає
16-19 Не використовується Немає
20-23 Кількість фрагментів в групі Немає
24-27 Кількість каталогів Немає
28-31 Кількість вільних блоків Немає
32-35 Кількість вільних індексних вузлів Немає
36-39 Кількість вільних фрагментів (неповні блоки) Немає
40-43 Останній виділений блок Немає
44-47 Останній виділений фрагмент Немає
48-51 Останній виділений індексний вузол Немає
52-83 Зведення вільних фрагментів Немає
84-91 Не використовується Немає
96-99 Бітова карта фрагментів (зсув в байтах) Немає
100-103 Наступний вільний простір в дескрипторі (зсув в байтах) Немає
104-107 Кількість вільних кластерів, тобто суміжних блоків (зсув в байтах) Немає
108-111 Бітова карта блоків (зсув в байтах) Немає
112-115 Кількість блоків в групі Немає
116-119 Кількість індексних вузлів в групі Немає
120-123 Останній індексний вузол, що ініціалізував Немає
124-135 Не використовується Немає
136-143 Час останнього запису Немає
144-167 Не використовується Немає
168+ Бітові карти і так далі Так

 

В обох версіях дескрипторів необхідна інформація обмежується зміщеннями бітових карт індексних вузлів і фрагментів. Бітові карти знаходяться після байта 168, але всередині блоку, виділеного дескриптору групи.



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 318; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.233.198 (0.01 с.)