Юркин А.Ю.
Юркин А.Ю. ВТ-99а ФВТИ ДонНТУ
Дослiдницька частина випускної роботи магістра на тему: "Розробка та дослідження засобів доступу до ресурсів файлової системи Linux з боку Windows NT/2000"


1. Інформаційна взаємодія між програмними компонентами мережі з установленими різними ОС.

1.1 Взаємодія між різними ОС у межах одного комп’ютеру або між декількома комп'ютерами у локальній мережі.

В даний час усе частіше можна зустріти ПК із різноманітними операційними системами, установленими на різні розділи одного HDD чи на окремі HDD. Часто зустрічаєма конфігурація - Windows і Linux, наприклад, для вивчення користувачем альтернативної ОС. В операційній системі Linux маються штатні засоби для доступу до розділів DOS і Windows 95/98/ME, а також NT/2000/XP. Підтримуються файлові системи FAT 12/16/32 і NTFS. Однак в ОС Windows аналогічних засобів немає. Тому в рамках роботи і розробляється програмне забезпечення, що дозволяє одержати доступ до Linux-розділу і переглянути його дерево каталогів при роботі в середовищі ОС Windows. Це звільняє користувача від переривання роботи в Windows і завантаження ОС Linux. При розгляді цього питання також проводиться дослідження взаємодії комп'ютерів з різними ОС у локальній мережі (Рисунок 1.1.1).

Зараз уже досить часто в одній локальній мережі можна зустріти комп'ютери під керуванням Linux і Windows. Причини такого симбіозу можуть бути різними: наприклад, у організації не вистачило коштів на придбання ліцензійної ОС для всіх комп'ютерів, чи системного адміністратора просто привабили позитивні сторони Linux. Популярність операційних систем від Microsoft багато в чому визначаться клієнтським ПО для Windows. При цьому слід зазначити, що цей сектор програмного забезпечення розвинутий досить сильно. Безліч фірм приклали до цього серйозні зусилля і створили дійсно гарні, а головне, зручні у використанні програми, які без зусиль може освоїти навіть рядовий користувач.

Рис. 1.1.1 - Взаємодія систем Windows 2000/XP і Linux у локальній мережі та у межах одного комп'ютера

Популярність операційних систем від Microsoft багато в чому визначаться клієнтським ПО для Windows. При цьому слід зазначити, що цей сектор програмного забезпечення розвинутий досить сильно. Безліч фірм приклали до цього серйозні зусилля і створили дійсно гарні, а головне, зручні у використанні програми, які без зусиль може освоїти навіть рядовий користувач. Зате як сервер позиція Windows вже не так однозначна. Сервер під керуванням Unix/Linux традиційно відрізняється надійністю, стабільністю в роботі, безпекою і найчастіше меншими вимогами до системних ресурсів. Але в будь-якому випадку, просто підключивши комп'ютери з різними програмними платформами в мережу, ми не одержимо очікуваного результату. Уся проблема в тому, що у цих двох систем використовуються різні принципи організації мережних ресурсів, несумісні між собою.

1.2 Служба NFS.

У локальних мережах Unix/Linux використовується мережна файлова система (NFS, Network File System), що забезпечує збереження файлів у мережі. NFS - це розподілена файлова система. Вона забезпечує користувачам доступ до файлів, розташованим на віддалених комп'ютерах, і дозволяє працювати з цими файлами так само, як і з локальними. Наприклад, за допомогою команд операційної системи користувачі можуть створювати, видаляти, зчитувати, записувати і змінювати атрибути вилучених файлів і каталогів.

Пакет NFS містить набори команд і програм-демонів, призначених для роботи з NFS, Службою інформації про мережу (NIS, Network Information Service) і іншими службами. Незважаючи на те, що NFS і NIS установлюються спільно, як один пакет, вони незалежні друг від друга, і їхнє настроювання й адміністрування виконуються роздільно.

Служби NFS реалізовані за принципом клієнт-сервер. Комп'ютери, що надають свої файлові системи, каталоги й інші ресурси для віддаленого доступу називаються серверами. Сам процес надання доступу до файлових систем називається експортом. Комп'ютери і процеси, що працюють з ресурсами сервера, називаються клієнтами. Після того як файлова система, що експортована із сервера, буде змонтована на клієнті, цей клієнт одержить доступ до файлів сервера (доступ до експортованих каталогів можна дозволити деяким клієнтам і заборонити всім іншим).

NFS виконує наступні основні функції (Таблиця 1).

Таблиця 1.2.1 - Основні функції NFS.

Монтування

Виконується за допомогою програми-демона /usr/sbin/rpc.mountd на сервері і команди клієнта /usr/sbin/mount.

Віддалений доступ до файлів

Виконується за допомогою програм-демонів /usr/sbin/nfsd на сервері і /usr/sbin/biod на клієнті.

Підтримка віддаленого виконання

Запускається за допомогою програми-демона /usr/sbin/rpc.rexd на сервері і команди клієнта /usr/bin/on.

Віддалений доступ до статистичних даних про систему

Надається за допомогою програми-демона /usr/sbin/rpc.rstatd на сервері і команди клієнта /usr/bin/rup.

Створення списку віддалених користувачів

Забезпечується за допомогою програми-демона /usr/lib/netsvc/rusers/rpc.rusersd на сервері і команди клієнта /usr/bin/rusers.

Надання параметрів завантаження

Програма-демон сервера /usr/sbin/rpc.bootparamd передає на бездискові клієнти під керуванням операційної системи фірми Sun параметри їхнього завантаження.

Віддалена служба Wall

Забезпечується за допомогою програми-демона /usr/lib/netsvc/rwall/rpc.rwalld на сервері і команди клієнта /usr/sbin/rwall.

Служба розсилання

Посилає однобічний потік пакетів Виклику віддалених процедур (RPC) за допомогою програми-демона /usr/lib/netsvc/spray/rpc.sprayd на сервері і команди /usr/sbin/spray на клієнті.

Служба ідентифікації PC

Виконує ідентифікацію PC-NFS за допомогою програми-демона /usr/sbin/rpc.pcnfsd на сервері.

Комп'ютер може бути одночасно і сервером, і клієнтом NFS.

Сервер NFS називається сервером без збереження стану. Це означає, що сервер NFS не зберігає ніяких даних про транзакціях клієнтів. Усі транзакції NFS атомарні, кожній з них відповідає одна повна операція над файлом. Усі дані, необхідні для подальшої роботи, повинні зберігатися клієнтом NFS.

Служби NFS і NIS використовують шифрування, наприклад, по алгоритму DES - прийнятий у 1977 році в США Стандарт шифрування даних. DES являє собою надзвичайно складний алгоритм перетворення 64-розрядних блоків відкритого тексту в 64-розрядні блоки зашифрованого тексту з використанням 56-розрядного ключа. Завдяки складності алгоритму і великого розміру ключа, DES зламати практично неможливо.

Тому що Microsoft Windows на даний момент не вміє працювати стандартними засобами з мережною файловою системою Unix (NFS) і підтримка NFS найближчим часом не прогнозується, а про подібні програми сторонніх виробників нічого не відомо, те найбільш популярним способом є спроба навчити Unix “прикидатися”, ніби-то він - Windows NT.

1.3 Стек протоколів NetBIOS/SMB.

Взаємодія в мережі комп'ютерів під керуванням Windows побудовано на використанні протоколу SMB (Server Message Block) - блоках серверних повідомлень.

Стек протоколів NetBIOS/SMB є спільною розробкою фірм Microsoft і IBM, що разом працювали над мережними засобами для персональних комп'ютерів. Засоби NetBIOS з'явилися в 1984 році як мережне розширення стандартних функцій базової системи введення/виводу (BIOS) IBM PC для мережної програми PC Network фірми IBM, що на прикладному рівні використовувала для реалізації мережних сервісов протокол SMB (Server Message Block).

Протокол NetBIOS працює на трьох рівнях моделі взаємодії відкритих систем: мережному, транспортному і сеансовому (Рисунок 1.3.1). NetBIOS може забезпечити сервіс більш високого рівня, чим протоколи IPX і SPX, однак не має здатність до маршрутизації. Таким чином, NetBIOS не є мережним протоколом у строгому змісті цього слова. NetBIOS містить багато корисних мережних функцій, які можна віднести до мережного, транспортного і сеансового рівнів, однак з його допомогою неможлива маршрутизація пакетів, тому що в протоколі обміну кадрами NetBIOS не вводиться таке поняття як мережа. Це обмежує застосування протоколу NetBIOS локальними мережами, не розділеними на підмережі. NetBIOS підтримує як дейтаграмний обмін, так і обмін із установленням з'єднань.

Рис. 1.3.1 - Структура стека NetBIOS / SMB

Протокол SMB, що відповідає прикладному рівню і рівню представлення моделі OSI, регламентує взаємодію робочої станції із сервером. У функції SMB входять наступні операції:

  • Керування сесіями. Створення і розрив логічного каналу між робочою станцією і мережними ресурсами файлового сервера.
  • Файловий доступ. Робоча станція може звернутися до файл-сервера з запитами на створення і видалення каталогів, створення, відкриття і закриття файлів, читання і запис у файли, перейменування і видалення файлів, пошук файлів, одержання й установку файлових атрибутів, блокування записів.
  • Сервіс друку. Робоча станція може ставити файли в чергу для друку на сервері й одержувати інформацію про чергу друку.
  • Сервіс повідомлень. SMB підтримує просту передачу повідомлень з наступними функціями: послати просте повідомлення; послати широкомовне повідомлення; послати початок блоку повідомлень; послати текст блоку повідомлень; послати кінець блоку повідомлень; переслати ім'я користувача; скасувати пересилання; одержати ім'я машини.

Протокол SMB забезпечує виконання всіх необхідних задач по відкриттю і закриттю, читанню і запису, пошуку файлів, створенню і видаленню каталогів, постановці завдання на друк і видаленню його відтіля.

1.4 Пакет SAMBA.

Усі необхідні для цього дії реалізуються в Unix-подібних операційних системах за допомогою використання пакета SAMBA. Можливості його умовно можна розділити на дві категорії: надання ресурсів (під якими розуміється доступ до системи принтерів і файлам) для клієнтів Windows і доступ до ресурсів клієнтів. Тобто, комп'ютер під керуванням Linux може виступати як у ролі сервера, так і клієнта.

Що ж повинен забезпечити SAMBA для нормальної роботи в мережі Windows-машин?

По-перше, контроль доступу, що може бути реалізований або на рівні ресурсів (share level), коли якому-небудь ресурсу в мережі призначається пароль і відповідні правила використання (наприклад, “тільки для читання”), при цьому ім'я користувача не має абсолютно ніякого значення, або ж більш досконалу і гнучку організацію на рівні користувача, коли для кожного користувача створюється обліковий запис, де крім імені і пароля міститься вся необхідна інформація про права доступу до ресурсу. Перш ніж одержати доступ до необхідного ресурсу, кожен користувач проходить аутентифікацію, після чого йому і надаються права відповідно до облікових записів.

По-друге, необхідна емуляція прав доступу, обумовлених файловою системою. Уся справа в тому, що в розглянутих системах права доступу до файлів і каталогів на диску організовані по-різному. У Unix традиційно існує три категорії користувачів файлів: власник (owner), група (group) і інші (other). Кожному з цих суб'єктів можуть бути надані права на читання (read), запис (write) і виконання (execute). У Windows NT система доступу трохи гнучкіша, доступ надається декільком групам чи користувачам, причому відповідні права доступу визначаються роздільно для кожного суб'єкта. Тому повноцінно емулювати засобами SAMBA права доступу, закладені в NTFS, неможливо.

Мережа Windows-машин може бути організована як робоча група (workgroup), коли комп'ютери незалежні друг від друга і на кожному мається своя база паролів і логінов (login) зі своєю політикою безпеки, а також як домен NT. Уся база для аутентифікації користувачів і комп'ютерів керується головним контролером домена (PDC, Primary Domain Controler), тобто централізовано. Samba дозволяє обмежувати доступ на всіх цих рівнях і виконує функції “головного браузера” у контексті робочої групи чи контролера домена.

Для роботи Samba-сервера необхідно, щоб були запущені два демона: smbd, що забезпечує роботу служби друку і розподілу файлів для клієнтів Samba, і nmbd, що забезпечує роботу служби імен NetBIOS (він може використовуватися і для запиту інших демонів служб імен). Для доступу до клієнтів використовується протокол TCP/IP. Як правило, Samba установлюється разом з дистрибутивом Linux.

Єдиний конфігураційний файл Samba називається smb.conf і знаходиться в каталозі /еtc. Сервіс SAMBA зчитує його кожні 60 секунд, тому зміни, внесені в конфігурацію, не потребують перезавантаження, але не поширюються на вже встановлені з'єднання.

У Linux конфігураційні файли є звичайними текстовими (до того ж добре коментованими усередині), і для того щоб задіяти більшість параметрів, досить тільки розкоментувати відповідний рядок. Файл smb.conf - не виключення. Він складається з іменованих розділів, що починаються з імені розділа, поміщеного в квадратні дужки. Усередині кожного розділу знаходиться ряд параметрів у виді key=value. Файл конфігурації містить чотири спеціальних розділа: [global], [homes], [printers] і окремі ресурси (shares). Як випливає з назви, розділ [global] містить найбільш загальні характеристики, що будуть застосовуватися скрізь, але які потім можна перевизначити в секціях для окремих ресурсів. Деякі параметри цього розділу мають відношення і до настроювання клієнтської частини Samba.

Значення типових параметрів секції global:

workgroup = ім'я групи # назва робочої групи в мережі Windows

netbios name = ім'я сервера в мережі

server string = коментар, що видний у вікні властивостей перегляду мережі

guest ok = yes # дозвіл гостьового входу (guest ok = no - гостьовий вхід заборонений).

guest account = nobody # ім'я, під яким дозволен гостьовий вхід у систему

security = user # Рівень доступу: user - на рівні користувача, security = share - аутентифікація на основі імені і пароля.

При збереженні бази паролів на іншому SMB-сервері використовується значення security = server і password server = name_server_NT. У випадку, якщо сервер є членом домена, використовується значення security = domain, пароль для доступу вказується у файлі, визначеному за допомогою опції smb passwd file = /path/to/file.

При реєстрації можуть використовуватися шифровані (encrypted) і незашифровані (plain-text) паролі. Останні використовуються в “старих” Windows (Windows for Workgroups, Windows 95 (OSR2), усіх версіях Windows NT 3.x, Windows NT 4 (до Service Pack 3)). Для включення варіанта використання шифрованого пароля використовується опція encrypt password = yes. Варто звернути особливу увагу на цю опцію. У старих дистрибутивах Linux, що створювалися в епоху Windows 95 (і з більш старою версією Samba) за замовчуванням шифрування паролів відключене, а samba до версії 2.0 даного режиму взагалі не підтримує (ця опція і подібні їй - ті, що не стосуються доступу до конкретних ресурсів, - використовуються й у клієнті).

Для правильного відображення російських імен файлів потрібні наступні опції: client code page = 866 і character set = koi8-r. У локалізованих дистрибутивах цей рядок уже є, іноді її досить просто розкоментувати, але в більшості інших її треба дописати самому.

Опція interfaces = ***.***.***.***/** указує, у якій мережі (інтерфейсі) повинна працювати програма, якщо сервер підключений відразу до декількох мереж. При установці параметра bind interfaces only = yes сервер буде відповідати на запити тільки з цих мереж.

Параметр hosts allow = ***.***.***. ***.***.***. ***. визначає клієнтів, для яких дозволений доступ до сервісу.

У секції global можливе використання різних перемінних для більш гнучкого настроювання роботи сервера. Після установки з'єднання замість них підставляються реальні значення. Наприклад, у директиві log file = /var/log/samba/%m.log, параметр %m допомагає визначити окремий .log-файл для кожної клієнтської машини. От найбільш уживані перемінні, що використовуються в секції global:

%a -- архітектура ОС на клієнтській машині (можливі значення - Win95, Win NT, UNKNOWN і т.д.);

%m - NetBIOS-ім'я комп'ютера клієнта;

%L - NetBIOS-ім'я сервера SAMBA;

%v - версія SAMBA;

%I - IP-адреса комп'ютера клієнта;

%T - дата і час;

%u - ім'я користувача, що працює із сервісом;

%H - домашній каталог користувача %u.

Для більш гнучкого настроювання застосовується директива include, що використовує приведені вище перемінні.

Наприклад: include = /etc/samba/smb.conf. %m - тепер при запиті з комп'ютера sales при наявності файлу /etc/samba/smb.conf.sales конфігурація буде узята з цього файлу. Якщо окремого файлу для якоїсь машини не буде, то для роботи з нею задіється загальний файл.

Також мається цікава можливість створення віртуального сервера. Для цього використовується параметр netbios aliases: netbios aliases = sales accounting admin.

Для використання свого конфігураційного файлу для кожного віртуального сервера у файл повинна бути включена команда: include = /etc/samba/smb.conf. %L.

Включення параметрів preserve case і short preserve case змушують сервер зберігати всю інформацію, що вводиться, з урахуванням регістра символів (у Windows регістр не має значення, у всіх Unix - навпаки).

Розділ [homes] дозволяє користувачам підключатися до своїх робочих каталогів без явного їхнього опису. При запиті клієнтом свого каталогу, машина шукає відповідний опис у файлі і якщо не знаходить його, то переглядає наявність цього розділу. Якщо розділ існує, то проглядається файл паролів для пошуку робочого каталогу користувача, що направив запит, і при знаходженні робить його доступним для користувача.

Типовий опис даного розділу може бути представлений в такий спосіб:

[homes]

comment = Home Directories # коментар, що видний у вікні властивостей мережі

browseable = no # визначає, чи виводити ресурс у списку перегляду

writable = yes # дозволяє (no - забороняє) запис у домашній каталог

create mode = 0750 # права доступу для знову створених файлів

directory mode = 0775 # права доступу для знову створених каталогів

Установивши необхідну конфігурацію, можна створити облікові записи користувачів (за винятком гостьового входу з мінімальними правами nobody). Для ідентифікації користувачів SAMBA використовується файл /etc/samba/smbpasswd, у якому містяться імена і зашифровані паролі користувачів. Механізм шифрування в мережах Windows-машин не сумісний зі стандартними Unix-механізмами, тому для заповнення файлу паролів використовується окрема утиліта - smbpasswd.

Цікавий момент - при підключенні до SAMBA-сервера комп'ютера з Windows NT/2000/XP користувачу пропонується ввести логін і пароль, а якщо для доступу використовується комп'ютер з ОС Windows 9x/Me, те користувачу пропонується ввести тільки пароль, а логін формується автоматично на основі реєстраційного імені.

Можна також зіставити декількох користувачів Windows одному користувачу Linux/Unix. Для цього створюється файл зіставлення /etc/smbusers.map, у якому окремим рядком задається кожне зіставлення:

користувач_ Linux = user_win1 user_win2 . . . user_win.

Кожен принтер описується як дисковий ресурс:

[printers]

path = /var/spool/samba # указує на каталог, у якому містяться завдання на друк

browseable = yes

printable = yes

read only = yes

Конфігурування Samba - досить складна процедура, але з дистрибутивом поставляється інструмент адміністрування на основі Web, що називається swat (Samba Web Administration Tool). Swat запускається у виді сервісу чи за допомогою сервера Apache і призначений для редагування файлу smb.conf, а також для перевірки стану, запуску і зупинки демонів Samba, зміни паролів користувачів. Щоб він працював у виді сервісу, у файлі /etc/services повинен обов'язково бути присутнім рядок swat 901/tcp, а у файлі /etc/inetd.conf - swat stream tcp nowait.400 root /usr/local/samba/bin/swat swat (це якщо використовується мережний демон inetd (як правило в “старих” дистрибутивах); у сучасних дистрибутивах використовується більш захищений варіант - xinetd).

Клієнт Samba використовується для роботи і з мережними ресурсами Windows. Для того щоб довідатися, які ресурси доступні, необхідно ввести команду /usr/bin/smbclient -L host_name. Програма запросить пароль, у відповідь на що в більшості випадків досить натиснути Enter. Тепер, щоб підключиться до необхідного ресурсу, потрібно ввести ім'я комп'ютера і необхідний ресурс. Якщо команда введена правильно і такий мережний ресурс існує, з'являється запрошення на введення пароля. Потрібно ввести його чи натиснути Enter, якщо пароль не потрібний для доступу. З'являється запрошення samba-клієнта - smb: >. Надалі робота відбувається шляхом набору команд, за допомогою яких можна зробити всі необхідні операції по роботі з файлами (копіювання, створення, переміщення і т.д.). Для одержання довідки вводиться команда smb: > help.

Для виключення роботи з командним рядком було створено багато утиліт, що дозволяють працювати з Samba-ресурсами більш звичним шляхом, натискаючи кнопки в графічних оболонках. Найпопулярніша програма - gnomba. Вона поставляється не з усіма дистрибутивами, однак її можна знайти на більшості серверів з ПО для Linux. Ця утиліта дозволяє переглянути доступні мережні ресурси і при необхідності змонтувати в потрібний каталог, при цьому можливий варіант монтування з указівкою логіна і пароля для тих ресурсів, що цього вимагають. Можливий запуск файлового менеджера при монтуванні (за замовчуванням gmc), створення каталогів для монтуємих ресурсів, завдання опції автоматичного сканування при запуску програми (можливо з використанням протоколу SMB за замовчуванням) і сканування по IP-адресах (планується з використанням WINS-протоколу). З деяких причин у деяких дистрибутивах при скануванні за допомогою SMB-протоколу не виводяться мережні ресурси, тому краще використовувати другий метод, благо він діє безвідмовно, необхідно лише задати діапазон IP-адрес для сканування. Для того щоб відображалися правильно російські імена файлів, потрібно установити шрифти koi8-r у вкладці Опції > Вибір шрифту, а також перевірити рядки, що вказують кодування кирилиці у файлі smb.conf.

Якщо gnomba може тільки монтувати і розмонтовувати ресурси, то програма xsmbrowser дозволяє ще і заходити в них як у каталоги на локальному комп'ютері. При роботі даної програми всі команди по монтуванню і різним мережним запитам виводяться на консоль, що дозволяє добре розібратися в них. У KDE через Preferences > Information доступна утиліта Samba Status, що відображає всі підключення до/від локального комп'ютера, що одночасно є зручним засобом перегляду .log-файлів. Аналогічну інформацію представляє й утиліта komba.

За результатами тестів на однаковому обладнанні сервер Samba показує продуктивність приблизно на 25-30% вище, ніж комп'ютер під керуванням системи від Microsoft.

2. Особливості структури ФС Linux.

2.1 Походження файлових систем Linux.

Файлова система ext2fs (2nd extended filesystem) є розширеною версією файлової системи extend fs, що виникнула від minix. Подальшим розвитком ext2fs стала нова журналюєма файлова система ext3fs.

minix -> extend fs -> 2nd extended -> ext3fs.

ОС Unix і подібні їй системи мають схожі структури файлових систем (Рисунок 2.1.1).


Рис. 2.1.1 - Формат файлової системи Unix

Блок завантаження розташовується на початку простору, відведеного під файлову систему, в першому секторі, і містить програму початкового завантаження, що зчитується в машину при завантаженні чи ініціалізації операційної системи. Хоча для запуску системи потрібен тільки один блок завантаження, кожна файлова система має свій (нехай навіть порожній) блок завантаження.

3.2 Структура суперблока.

Суперблок описує стан файлової системи - якого вона розміру, скільки файлів може в ній зберігатися, де розташовується вільний простір, що доступен для файлової системи, і інша інформація.

Список індексів у файловій системі розташовується слідом за суперблоком. Адміністратори вказують розмір списку індексів при генерації файлової системи. Ядро операційної системи звертається до індексів, використовуючи показники в списку індексів. Один з індексів є кореневим індексом файлової системи: це індекс, по якому здійснюється доступ до структури каталогів файлової системи після виконання системної операції mount (монтування).

Інформаційні блоки розташовуються відразу після списку індексів і містять дані файлів і керуючі дані. Окремо узятий інформаційний блок може належати одному і тільки одному файлу у файловій системі.

Файлова система складається з послідовності блоків. Розмір цих блоків може бути 1024, 2048 чи 4096 байт. По різних причинах блоки поділяються на групи.

Відправний пункт для файлової системи - системний блок (superblock). Це структура розміром 1024 байта і вона завжди розташовується по зсуві 1024 байта з початку файлової системи.

Суперблок складається з наступних полів:

  • розмір файлової системи;
  • кількість вільних блоків у файловій системі;
  • список вільних блоків, що маються у файловій системі;
  • індекс наступного вільного блоку в списку вільних блоків;
  • розмір списку індексів;
  • кількість вільних індексів у файловій системі;
  • список вільних індексів у файловій системі;
  • наступний вільний індекс у списку вільних індексів;
  • заблоковані поля для списку вільних блоків і вільних індексів;
  • прапор, що показує, що в суперблок були внесені зміни.

Далі приводиться структура, що використовується у файловій системі ext2 (Таблиця 2.2.1). Варто мати на увазі, що інші операційні системи можуть використовувати трохи іншу структуру.

Таблиця 2.2.1 - Структура системного блока (superblock).

Назва поля

Тип

Коментар

s_inodes_count

ULONG

лічильник inodes у файловій системі

s_blocks_count

ULONG

лічильник блоків (blocks) у файловій системі

s_r_blocks_count

ULONG

лічильник числа резервних блоків (blocks)

s_free_blocks_count

ULONG

лічильник числа вільних блоків (blocks)

s_free_inodes_count

ULONG

лічильник числа вільних inodes

s_first_data_block

ULONG

перший блок (block), що містить дані

s_log_block_size

ULONG

індикатор розміру блоку (block)

s_log_frag_size

LONG

індикатор розміру фрагмента (fragment)

s_blocks_per_group

ULONG

лічильник числа блоків (blocks) у кожній групі блоків

s_frags_per_group

ULONG

лічильник числа фрагментів (fragments) у кожній групі блоків

s_inodes_per_group

ULONG

лічильник числа inodes у кожній групі блоків (blocks)

s_mtime

ULONG

час останнього монтування (mounted) файлової системи

s_wtime

ULONG

час, у який останній раз вироблявся запис у файлову систему

s_mnt_count

USHORT

число монтувань (mounted) файлової системи

s_max_mnt_count

SHORT

число можливих монтувань (mounted) файлової системи до перевірки

s_magic

USHORT

число, що вказує на ext2fs

s_state

USHORT

прапор, що сигналізує про поточний стан файлової системи

s_errors

USHORT

прапор, що визначає процедуру обробки помилок

s_pad

USHORT

заповнення

s_lastcheck

ULONG

час останньої перевірки файлової системи

s_checkinterval

ULONG

максимальний час між перевірками файлової системи

s_creator_os

ULONG

індикатор операційної системи, що створила дану файлову систему

s_rev_level

ULONG

рівень ревізії файлової системи

s_reserved

ULONG[235]

заповнення до 1024 байтів



Розглянемо більш докладно деякі елементи структури:

s_r_blocks_count : це кількість блоків, що резервуються для суперкористувача (super user).

s_first_data_block : у залежності від розміру блоку, перший блок даних буде 0 чи 1.

s_log_block_size : уміст цього елемента визначає розмір блоку:
0 = 1024 байта;

1 = 2048 байт;

2 = 4096 байт.

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

s_inodes_per_group : кожна група блоків має простір, зарезервований для декількох inodes.

s_max_mnt_count : якщо цей лічильник досягає максимуму, файлова система повинна бути перевірена, після чого лічильник встановлюється у 0.

s_magic : цей елемент повинний містити число 0xEF53 - ідентифікатор ext2fs.

s_state : цей елемент містить комплект прапорів, які вказують, що файлова система чиста (clean) і т.п.

s_errors : цей елемент містить прапори, які вказують, що повинна робити файлова система якщо виявлені помилки.

Інформація в системному блоці використовується, для одержання доступу до іншої частини даних на диску.

Кількість груп блоків дорівнює кількості блоків, ділених на число блоків у групі (округлене у велику сторону).

Усі блоки (blocks) і inode мають початкову адресу, що дорівнює 1. Перший блок на диску - блок 1. 0 використовується для того, щоб не вказувати ніякий блок.

Кожна група блоків може бути знайдена по блоковій адресі ((gr_nom - 1)* bl_per_gr) і по довжині групи блоків, де gr_nom - номер групи, а bl_per_gr - кількість блоків у групі. Нумерування груп також починається з 1.

Кожна група являє собою серію блоків, у якій початкові блоки мають спеціальну мету. Інші блоки використовуються для збереження даних.

Системний блок (superblock) і група дескрипторів (group descriptors) - загальні елементи для всіх груп.

Block bitmap, INode bitmap, таблиця INode Table і блоки даних (data blocks) -характерні для кожної групи.

2.3 Структура дескриптора групи блоків.

Група дескрипторів містить інформацію про групу блоків. Ці дані охоплюють усі групи. Цей масив має наступну структуру.

Таблица 2.3.1 - Структура дескриптора групи блоків.

Назва поля

Тип

Коментар

bg_block_bitmap

ULONG

Адреса блоку, що містить block bitmap для цієї групи

bg_inode_bitmap

ULONG

Адреса блоку, що містить inode bitmap для цієї групи

bg_inode_table

ULONG

Адреса блоку, що містить таблицю inode (inode table) для цієї групи

bg_free_blocks_count

USHORT

Лічильник вільних блоків у даній групі

bg_free_inodes_count

USHORT

Лічильник вільних inodes у даній групі

bg_used_dirs_count

USHORT

Число inodes у групі, що є каталогами

bg_pad

USHORT

Заповнення

bg_reserved

ULONG[3]

Резерв

Розмір дескрипторів може бути обчислений по формулі: ((sizeof(ext2_group) * k_gr) / bl_size), округлене у велику сторону, якщо необхідно, де k_gr - кількість груп, a bl_size - розмір блоку.

Інформація в цій структурі використовується, для визначення розташування block bitmaps, inode bitmaps і таблиці inode table.

Block bitmap указує як розподілені блоки в групі. Якщо біт установлений, то блок розподілений. Розмір block bitmap визначається по формулі: ((bl_per_gr / 8) / bl_size), з обома арументами, округленими у велику сторону.

Формула для визначення групи по конкретному блоці: ((bl_nom - 1)* bl_per_gr) + 1, округлене у велику сторону, де bl_nom - номер блоку.

Блок у групі: (bl_nom - (group * bl_per_gr)), де group - група.

Inode bitmap схоже на block bitmap, але вказує на розподіл inodes. Розмір inode bitmap визначається по формулі: ((in_per_gr / 8) / bl_size), з обома арументами, округленими у велику сторону, де in_per_gr - кількість inodes у групі .

Формула може використовуватися для визначення групи по конкретному inode: ((in_nom - 1) / in_per_gr) + 1, округлене у велику сторону, де in_nom - число inodes .

Inode у групі: (in_nom - (group * in_per_gr)).

2.4 Структура элемента таблиці inode.

Таблиця inode є масивом inodes для кожної конкретної групи. Крім того, перший запис - для першого inode у цій групі.

Таблиця 2.4.1 - Структура элемента таблиці inode.

Назва поля

Тип

Опис

i_mode

USHORT

Файловий режим

i_uid

USHORT

Власник Uid

i_size

ULONG

Розмір у байтах

i_atime

ULONG

Час доступу

i_ctime

ULONG

Час створення

i_mtime

ULONG

Час модифікації

i_dtime

ULONG

Час видалення

i_gid

USHORT

Груповий Id

i_links_count

USHORT

Лічильник зв'язків

i_blocks

ULONG

Лічильник блоків

i_flags

ULONG

Файлові прапори

i_reserved1

ULONG

Резерв

i_block

ULONG[15]

Показники на блоки

i_version

ULONG

Версія файлу (для NFS)

i_file_acl

ULONG

Файл ACL

i_dir_acl

ULONG

Каталог ACL

i_faddr

ULONG

Адреса фрагмента

i_frag

UCHAR

Номер фрагмента

i_fsize

UCHAR

Розмір фрагмента

i_pad1

USHORT

Заповнення

i_reserved2

ULONG[2]

резерв

2.5 Комплект прапорів файлового режима.

Файловий режим є комплектом прапорів, що визначають тип файлу і права доступу.

Таблиця 2.5.1 - Комплект прапорів файлового режима.

Ідентифікатор

Значення

Коментар

S_IFMT

F000

маска формату

S_IFSOCK

A000

сокет (socket)

S_IFLNK

C000

символічне посилання

S_IFREG

8000

регулярний файл

S_IFBLK

6000

блоковий пристрій

S_IFDIR

4000

каталог

 

S_IFCHR

 

2000

 

символьний пристрій

S_IFIFO

1000

черга fifo

 

S_ISUID

 

0800

 

SUID

S_ISGID

0400

SGID

S_ISVTX

0200

sticky bit

 

S_IRWXU

 

01C0

 

маска користувача

S_IRUSR

0100

читання

S_IWUSR

0080

запис

S_IXUSR

0040

виконання

S_IRWXG

0038

маска групи

S_IRGRP

0020

читання

S_IWGRP

0010

запис

S_IXGRP

0008

виконання

 

S_IRWXO

 

0007

 

інша маска

S_IROTH

0004

читання

S_IWOTH

0002

запис

S_IXOTH

0001

виконання

I_block є масивом блокових адрес. Перші EXT2_NDIR_BLOCKS (12) - прямі блокові адреси. Дані в цих блоках - зміст файлу. Наступний блок EXT2_IND_BLOCK знаходиться в непрямому блоці. Це - адреса блоку, що містить список адрес блоків, які містять дані. Адресація в цьому блоці - bl_size / sizeof(ULONG).

EXT2_DIND_BLOCK - це подвійний непрямий блок. Він містить адресу блоку, по якому мається список непрямих адрес блоків. Кожен непрямий блок потім має інший список блоків.

EXT2_TIND_BLOCK це - потрійний непрямий блок. Він містить список подвійних непрямих блоків і т.п.

2.6 Зарезервовані inodes.

Тепер, знаючи як знаходити і читати inodes, можна читати файли. Мається комплект спеціальних inodes, що зарезервовані для визначених цілей:

Таблица 2.6.1 - Зарезервовані inodes.

Ідентифікатор

Значення

Опис

EXT2_BAD_INO

1

Погані блоки inode

EXT2_ROOT_INO

2

Root inode

EXT2_ACL_IDX_INO

3

ACL inode

EXT2_ACL_DATA_INO

4

ACL inode

EXT2_BOOT_LOADER_INO

5

Boot loader inode

EXT2_UNDEL_DIR_INO

6

Невилучений каталог inode

EXT2_FIRST_INO

11

Перший незарезервований inode

Найбільш важливий inode тут - root inode. Цей inode - каталог, який як усі каталоги має наступну структуру:

Таблиця 2.6.2 - Структура каталогів.

Назва поля

Тип

Опис

inode

ULONG

адреса inode

rec_len

USHORT

довжина цього запису

name_len

USHORT

довжина імені файлу

Name

CHAR[]

ім'я файлу

Каталог є списком цих структур.


ЛІТЕРАТУРА


1. John Newbigin, Spec of the second extended filesystem, 1999.
2. Maurice J. Bach, THE DESIGN OF THE UNIX OPERATING SYSTEM, 1998.
3. www.linuxshop.ru/linuxbegin/article239.html, Сергей Яремчук, Что такое SAMBA?
4. www.helloworld.ru/texts/comp/os/linux/linux9/SMB-HOWTO.html, LINUX SMB HOWTO.
5. show.dm.ru/pSeries/usr/share/man/info/ru_RU/a_doc_lib/aixbman/commadmn/nfs_intro.htm#HDRA354C98749, Мережна файлова система NFS.

На главную


Замечания и пожелания посылать по адресу wdes@ukrtop.com
Copyright © 2004. All rights reserved.