Далі: Перевірка цілісності файлових систем
Вгору: Файлові системи
Назад: Створення файлової системи
Монтування та розмонтування
Перед тим, як користуватися файловою системою, її треба
змонтувати. Після монтування, для того, щоб
підтримувати в робочому порядку, система переймає на себе
обов'язки по контролю файлової системи. Оскільки всі файли в
Юніксі розташовані в єдиному дереві, після монтування
виявляється, що все, що знаходилось до монтування в окремій
файловій системі, стає складовою директорією в цьому дереві.
Наприклад, рисунок показує три окремі
файлові системи, кожна зі своїм власним коренем (кореневою
директорією). Після того, як дві останні файлові системи
змонтовані в точках /home та /usr першої файлової
системи, утворюється єдине дерево директорій показане на
рисунку .
Рисунок:
Три окремі файлові системи.
|
Рисунок:
/home та /usr змонтовано.
|
Операції монтування виконуються наступними командами:
$ mount /dev/hda2 /home
$ mount /dev/hda3 /usr
$
$
Команді mount потрібно давати два арґументи. Перший з
них - це спеціальний файл пристрою, який відповідає диску чи
підрозділу з файловою системою. Другий - директорія, в якій
потрібно змонтвуати дану файлову систему. Після того, як
виконано ці дві команди, все, що знаходиться в змонтованих
фалових системах, буде виглядати як склад директорій
/home та /usr . Кажуть, що ``/dev/hda2
змонтовано на /home '', і, аналоґічно для
/usr . Щоб подивитися, що знаходиться в тій, чи іншій
файловій системі (після її монтування), слід дивитися, що
знаходиться в тій директорії, на якій ця файлова система
змонтована, так, як ніби-то це - звичайна директорія.
Відмітьте різницю між спеціальним файлом пристрою
(/dev/hda2 та директорією, на яку його змонтовано
(/home . Перший з них дає доступ до ``сирого'' диску (або
розділу), в той час, як друга - описує доступ до ``готової''
директорії на диску. Директорію, в якій проводиться монтування
файлової системи, називають точкою монтування.
Лінаксом, як уже відмічалося, підтримуються файлові системи багатьох
типів. Команда mount намагається вгадати тип файлової системи,
яку вона монтує. Але крім цього можна також користуватися
параметром -t тип_файлової_системи, щоб явно вказати
тип. Інколи це необхідно, бо буває, що шлях здогадок
підводить. Наприклад, щоб змонтувати файлову систему DOS на
дискеті, потрібно виконати команду:
$ mount -t msdos /dev/fd0 /floppy
$
Від директорії, на вершині якої монтується файлова система, не
вимагається, щоб вона була пустою, але необхідно, щоб вона
існувала. Однак, всі файли, які існували в цій директорії до
монтування будуть недоступними після того, як файлова система
змонтована. (Будь які файли, відкриті на час монтування будуть
залишатися доступними, так само, як і файли в даній
директорії, які мають жорсткі ссилки на себе з інших частин
файлової системи, можуть бути доступними з використанням цих
інших імен.) Цим не завдається жодної шкоди, і інколи такий
ефект можна використати на користь. Наприклад, уявімо собі, що
/tmp та /var/tmp є синонімами, та /tmp є
символічною ссилкою на /var/tmp . Під час старту системи,
коли файлова система /var ще не змонтована, для
тимчасових файлів використовується директорія /var/tmp ,
яка знаходиться на кореневій файловій системі. Після того, як
/var змонтована, директорія /var/tmp в кореневій
директорії робиться недоступною, і замість неї
використовується змонтована на її вершині файлова
система. Якби директорія /var/tmp не існувала, то було б
неможливо користуватися тимчасовими файлами до того, як
змонтована /var .
Якщо Ви не збираєтесь записувати нічого в файлову систему, яку
монтуєте, Ви можете скористуватися параметром -r для
того, щоб змонтувати цю файлову систему в режимі тільки
читання81. Отримавши цей параметр, ядро
зупинить будь-яку спробу записати що-небуть в файлову систему
і ядро не буде змінювати час доступу82
до inode'ів файлів в даній файловій системі. Монтування в
режимі ``тільки читання'' необхідне для носіїв, на які запис
неможливий, таких, наприклад, як компакт-диски83.
Уважний читач мабуть уже відмітив одну головоломку, а саме: як
же монтується ``сама перша'' файлова система - та, яка
називається кореневою файловою системою84, бо вона містить кореневу директорію. Звичайно ж,
із зрозумілих причин, цю файлову систему не можна змонтувати
на вершині іншої. Відповідь в цьому випадку дуже проста - це
звичайно ж фокус.8586. Коренева файлова система
чарівним способом виявляється змонтованою при запуску системи,
і можна завжди розраховувати на те, що вона змонтована - якщо
неможливо змонтувати кореневу файлову систему, система просто
не загрузиться. Назва тої файлової системи, яка магічно
монтується як коренева, або компілюється безпосередньо в саме
ядро, або встановлюється за допомогою LILO чи
rdev 87.
При старті системи коренева система завжди монтується спочатку
в режимі ``тільки читання''. Пізніше із стартових скриптів
запускається fsck для перевірки цілісності файлової
системи, і потім файлова система
перемотовується88 в режимі дозволу
запису. Загалом команда fsck не повинна виконуватися на
змонтованих файлових системах, оскільки будь-які зміни до
файлової системи, над якою вона виконується, викличуть
великі проблеми. Але, оскільки коренева система в даному
випадку змонтована з доступом тільки на читання, fsck
може коригувати потрібні ділянки без проблем, і операція
перемонтування запише всі потрібні зміни з пам'яті на диск.
В багатьох системах при старті потрібно монтувати також інші
файлові системи (крім кореневої та своп). Всі вони описуються
в файлі /etc/fstab 89. Подробиці про формат файлу є в
сторінці підказки fstab . Те, як конкретно додаткові
файлові системи монтуються залежить від багатьох факторів, і
це може конфіґурувати кожен окремий системний адміністратор
так, як це потрібно. Коли розділ про процес старту системи
буде закінчено, в ньому можна буде це прочитати.
Якщо файлова система більше не потрібна, її можна розмонтувати
командою umount 90. Для umount потрібен один параметр - або
точка монтування файлової системи, або її спеціальний
файл. Наприклад, щоб розмотувати директорії, змонтовані в
попередньому прикладі, потрібно виконати команди:
$ umount /dev/hda2
$ umount /usr
$
$
Подальші відомості про команду дивіться в сторінці підказки по
ній. Не забудьте, що завжди потрібно розмонтовувати змонтовану
дискету. Не витягуйте просто так дискету з дисководу!
Через кешування диску в пам'яті, дані можуть справді
записуватися на диск багато пізніше і не обов'язково записані
на диск, якщо його ще не розмонтовано 91. Отже, якщо Ви витягнете дискету зарано - отримаєте
сміття замість даних. Якщо Ви тільки читали з дискети, то,
можливо нічого страшного не трапиться, але, якщо записали щось
(навіть випадково), результатом може бути катастрофа.
Для монтування та розмонтовування файлових систем потрібно
мати привілеї супер-користувача, тобто тільки користувач
root може це робити. Причиною цього є те, що, якщо
будь-хто може монтувати чи розмонтовувати, скажімо дискету на
будь-якій директорії, то, в цьому випадку було б дуже просто
створити, наприклад, Троянського коня замаскованого під
/bin/sh , або іншу часто вживану програму. Однак,
звичайним користувачам інколи треба монтувати дискети, і для
цього існує кілька способів:
- Дати користувачеві пароль root 'а. Звичайно ж це
найгірше рішення з точки зору безпеки, але і
найпростіше. Воно спрацьовує в тих випадках, коли
немає необхідності турбуватися про безпеку, тобто
годиться на багатьох персональних системах не
підключених до мережі.
- Скористуватися програмою типу sudo щоб дозволити
користувачам користування програмою mount . Це
все ще не ідеальне рішення з точки зору безпеки, але
все-таки не дає користувачам безпосереднього доступу
до паролю root 'а92.
- Рекомендувати користувачам вживати пакет програм
mtools , для оперування файлами DOS без
монтування файлових систем. Цей пакет - дуже зручна штука,
якщо все, що потрібно, це копіювати файли з DOSівських
дискет і назад, але страшенно незручний в усіх інших
випадках.
- Перечислити пристрої дисководів разом з відповідними
параметрами для монтування в файлі /etc/fstab .
Для реалізації останнього варіанту треба додати до
/etc/fstab приблизно такий рядок:
/dev/fd0 /floppy msdos user,noauto 0 0
Стовпчики в рядку такі: пристрій, який треба змонтувати,
директорія, в якій потрібно монтувати файлову систему, тип
файлової системи, параметри, частота створення резервних копій
(використовується командою dump ), та номер проходу для
fsck (Цей параметр служить для того, щоб встановити
порядок, в якому команда fsck повинна перевіряти файлові
ситеми при старті системи. 0 означає, що перевірка не
потрібна).
Параметр noauto запобігає монтуванню даної файлової
системи при старті системи (тобто команда mount -a не
змонтує цю файлову систему). Параметр user дозволяє
монтувати цю файлову систему будь-якому користувачеві, і, (з
міркувань безпеки) забороняє виконання будь-яких програм (як
нормальних, так і з встановленим setuid) та використання
будь-яких спеціальних файлів пристроїв із змонтованої таким
чином файлової системи.93 Якщо такий рядок включено в файл
/etc/fstab , то будь-який користувач може змонтувати
дискету виконавши команду:
$ mount /floppy
$
Дискету можна (і, звичайно ж, потрібно) розмонтовувати
відповідною командою umount .
94
Якщо Вам потрібно забезпечити можливість монтування кількох
типів дискет, Ви повинні забезпечити також і відповідні точки
монтування для всіх них і відповідні рядки для кожного типу в
/etc/fstab . Параметри можуть бути різними для них
всіх. Наприклад, щоб дати доступ до обох файлових систем -
MS-DOS та ext2 на дискетах, Вам потрібно мати такі рядки в
/etc/fstab :
/dev/fd0 /dosfloppy msdos user,noauto 0 0
/dev/fd0 /ext2floppy ext2 user,noauto 0 0
Для файлових систем MS-DOS (не тільки дискети, а взагалі - всі
з них), було б бажано обмежети доступ використанням
uid чи gid та параметром umask , які в
подробицях описані в сторінці підказки mount . Якщо Ви не
надто безпечні, то монтування файлової системи MS-DOS дає (як
мінімум) доступ на читання для будь-кого, що взагалі-то не
бажано.
Далі: Перевірка цілісності файлових систем
Вгору: Файлові системи
Назад: Створення файлової системи
Dmytro Kovalev
1999-06-10
|