Рішення проблем: зміна розмірів розділів диска
Якщо необхідно збільшити розмір конкретного розділу, то є два шляхи: фізично змінити розмір розділу або створити метаустройство, яке фізично буде складатися з декількох розділів на одному або декількох дисках, але система буде його вважати одним логічним розділом. Другий шлях нагадує створення Volume Set в системах Windows.
Другий спосіб годиться тільки для Solaris (інші комерційні системи UNIX мають свої власні кошти вирішення цієї проблеми, які тут не обговорюються). Метаустройство створюється командою metainit. Програма growfs, яка служить для збільшення розміру файлової системи, може модифікувати таблицю індексних дескрипторів і інші керуючі структури так, щоб можна було працювати зі збільшеною файлової системою без втрати старих файлів. Збільшення можливо тільки після створення метаустройства, причому як для змонтованої, так і для незмонтовану файлової системи, в тому числі навіть під час роботи інших користувачів з цієї файлової системою.
Синтаксис команди growfs:
/ Usr / sbin / growfs [-M точка_монтірованія] [параметри_newfs]
[Rawdevice]
Аргументи команди growfs позначають:
точка_монтірованія - точка монтування файлововй системи, яку ви бажаєте покращити. При цьому на час розширення відбудеться блокування файлової системи функцією lockfs ().
параметри_newfs - ті ж параметри, які може приймати програма newfs при створенні нової файлової системи, див. опис newfs.
rawdevice - ім'я файлу прямого доступу для метаустройства в каталозі / dev / md / rdsk.
Команда growfs збільшує розмір файлової системи до розміру зазначеного розділу.
Збільшення розміру розділу виконується за допомогою додавання нового розділу до метаустройству і последущего запуску growfs. При збільшенні розміру дзеркала (тобто вже існуючого метаустройства з реалізованим дзеркалюванням, або, інакше кажучи, з RAID рівня 1) слід спочатку збільшити кожну з частин дзеркала за допомогою metaattach, як показано нижче, а потім - всю файлову систему за допомогою growfs .
Особливим випадком є розширення журнальованою метаустройства (trans metadevice), яке складається з двох пристроїв - головного і журналірующего. Збільшується тільки розмір головного пристрою, а потім growfs "напускає" на саме журнальованою метаустройство. Взагалі кажучи, можна збільшити і розмір журналірующего пристрою, але це не є обов'язковим.
Програма growfs на час модифікації файлової системи блокує запис в неї. Можна скоротити час блокування файлової системи, виконуючи її збільшення по частинах. Наприклад, ми хочемо збільшити файлову систему розміром 2 Гбайт до розміру 8 Гбайт. Можна це робити поетапно, додаючи по 16 Мбайт за етап, давши ключ s для явної вказівки розміру загального розміру нової файлової системи на кожному етапі. Число, наступне за ключем s, інтерпретується як загальне число секторів нової файлової системи на кожному етапі і повинно бути кратне розміру циліндра в секторах. Інакше кажучи, файлова система повинна містити ціле число циліндрів.
Уявімо собі, що потрібно збільшити розмір розділу / dev / dsk / c1t0d0s3, на якому розташована файлова система / export. Для цього нам буде потрібно спочатку перетворити цей розділ в метаустройство, оскільки додавати додатковий простір можна тільки до метаустройству. Припустимо, додавати до існуючого розділу ми будемо поки що порожній, який не містить файлової системи розділ / dev / dsk / c2t0d0s3:
metainit -f d8 2 1 c1t0d0s3 1 c2t0d0s3
Ця команда викликає об'єднання розділів / dev / dsk / c1t0d0s3 і / dev / dsk / c2t0d0s3 в нове метаустройство d8. Тепер змінюємо / etc / vfstab так, щоб файлова система / export монтувалася на метаустройство d8:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
/ Dev / md / dsk / d7 / dev / md / dsk / d7 / export ufs 2 yes -
Демонтуємо / export і знову монтуємо його (при монтуванні буде використано новий пристрій з / etc / vfstab):
umount / export
mount / export
Запускаємо growfs для розширення файлової системи на новий розділ:
growfs -M / export / dev / md / rdsk / d8
Ключ M потрібен програмі growfs для того, щоб можна було збільшити розмір змонтованої файлової системи. В процесі зміни розміру запис в файлову систему блокується програмою growfs.
Файл /etc/lvm/md.tab містить таблицю метаустройств, яка служить файлом налаштувань для запуску програми metainit при старті системи.
Обмеження при роботі з growfs
За допомогою growfs можна розширювати тільки файлові системи UFS (не важливо, змонтовані вони чи незмонтовані). Розширена файлова система не може бути зменшена. Розширення файлової системи неможливо, якщо:
на задіяному в ній пристрої є файл обліку запущеної системи acct, або
включена система безпеки на рівні C2 і файл журналирования знаходиться на розширюваному пристрої, або
на ній знаходиться локальний файл свопінгу, або
ця файлова система монтується в каталог / usr або кореневої каталог або є активним розділом свопинга.
Збільшення продуктивності дискової підсистеми
Крім очевидних рад купити більш продуктивний комп'ютер з більш швидкими дисками, ми можемо розглянути і інші рекомендації та з'ясувати, які можуть бути шляхи прискорення роботи дискової підсистеми вже існуючого комп'ютера. Для цього ми познайомимося зі структурою дискової активності в Solaris і дізнаємося, як можна її оптимізувати.
Дискова активність (тобто звернення до дисків з метою читання або запису даних) викликається в Solaris двома джерелами: для користувача процесами, які виконують читання і запис інформації, і підсистемою віртуальної пам'яті, яка виконує свопинг або пейджинг.
Запис даних на диск буває синхронної і асинхронної. У більшості випадків процеси здійснюють асинхронний запис на диск: при виконанні запису даних в файл дані фактично записуються в кеш в пам'яті, і процес буде повідомлено про успішно завершилася записи. Насправді фактична запис даних в файл відбувається пізніше, коли демон відкладеного запису fsflush запише відразу велику порцію даних з кешу на диск.
Додаток може викликати функцію fsync () для примусового скидання даних з файлового кеша на диск. Крім цього, до такого ж результату приводить закриття файлу, використовуваного процесом. При завершенні процесу все пов'язані з ним файли закриваються, що викликає негайну запис всіх ще не записаних в ці файли даних з кешу на диск. Тому при одночасному завершення великої кількості процесів дискова активність може різко зрости. Таке явище спостерігається, наприклад, при завершенні роботи демона squid, кешуючого http-запити.
Друга причина дискової активності, свопинг або пейджинг, залежить від того, як обсяг пам'яті в системі відповідає реальним потребам додатків. Налаштування системи з метою оптимізації свопинга ми розглянемо нижче в розділі "Ефективне використання пам'яті і свопінгу", а зараз звернемося до оптимізації операцій запису і читання даних.