Використання lvm, linuxoid

Рано чи пізно але це станеться. В один прекрасний сонячний день коли хочеться повалятися на пляжі, ввівши команду df, виявляєш, що місця на сервері залишилося зовсім нічого. Причому як не намагаєшся правильно розбити диск при установці системи, але передбачити яким з розділів зажадає більше місця, а який менше вдається дуже рідко. Якщо кореневий розділ, / usr і / opt здебільшого сюрпризів не приносять тому встановлюваний софт контролюється самим системним адміністратором і зазвичай тут застосовується стандартний набір додатків. Каталог / tmp зараз зазвичай віддають на відкуп tmpfs - файлову систему в оперативній пам'яті. Те с / var та / home зазвичай метушні більше. Виходів в цій ситуації може бути кілька.

Перший. Простий.
Плюнути на всі вимоги і вчинити ще при установці просто.

# Parted / dev / hda mkpartfs primary linux-swap 0 256 parted / dev / hda mkpartfs primary ext2 256

тобто використовувати всього два розділи swap і все, що залишилося, відвести під кореневої. Що тут сказати, поки диск не заповнений повністю, можна буде зовсім не думати про наявність вільного / зайнятого місця в розділах. Але це позитивна сторона. А з іншого. Продуктивність диска в такому випадку буде не на висоті, особливо при великому заповненні. Плюс обов'язково знайдеться хтось у кого вдома багато фільмів на дисках і в один день він вирішить всі їхні принести на роботу для демонстрації. Або хтось "добрий" запише великий файл в / tmp. Після цього зупиниться все що вимагає місця, наприклад поштовий сервер або syslog. яким просто нікуди буде писати на диску дані.

Другий. Фашистський.
Тут просто. Якщо місця мало його потрібно розчистити.

# Find / home (-atime +365 -o -name '* .avi') -exec rm <>\;

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

# Find / home -size 200> trash; cat trash | less

/ Dev / hda1 swap swap defaults, pri = 1 0 0 / dev / hdc1 swap swap defaults, pri = 1 0 0

Тепер все призначене для користувача простір буде складатися з двох файлових систем і прийдеться весь час пам'ятати про те на якому диску знаходяться дані і стежити за їх наповненням, але додатково до всього відпадає можливість створення жорстких посилань на дані розташовані в іншій файлової системи. Погодьтеся це трохи незручно, набагато краще щоб воно виглядало як єдине ціле нехай навіть і неявляется таким. І тому…
Варіант шостий - передбачити можливе невідповідність розмірів і можливе перепланування робочого пространтсва в майбутньому, ще на стадії розбивки диска або якщо вже сталося таке, то скористатися зручними сучасними технологіями. Для вирішення цього завдання в самий раз прийдеться популярна технологія LVM (Logical Volume Manager) або менеджер логічних томів, яка повністю підтримується ядром починаючи з версії 2.4.

за поняттями

hda1 hdc1 (PV: s on partitions or whole disks) \ / \ / diskvg (VG) / | \ / | \ Usrlv rootlv varlv (LV: s) | | | ext2 reiserfs xfs (filesystems)

Сам логічний тому, також складається з піщинок званих LE (logical extent), які зіставляються реальним фізичним physical extents. Якщо в подальшому знадобиться змінити розмір logical volume, то це можна буде зробити як раз на величину кратну physical extents. Такий взаємозв'язок фізичних і логічних extent'ов позначається терміном mapping. І ще, так як фактично немає різниці якого PE протиставити LE, то це можна зробити двома варіантами - лінійний (linear mapping) і чергується (striped mapping). У першому випадку все просто, безперервній послідовності фізичних extent'ов ставиться у відповідність настільки ж безперервна послідовність логічних extent'ов. У другому, безперервна послідовність логічних extent'ов зв'язується з чергуються між різними фізичними носіями extent'амі. Ця схема нагадує нульовий (смугастий) RAID-масив. При цьому якщо розмістити два диска на різних IDE-каналах можна домогтися деякого підвищення продуктивності дискових операцій. Але надійність в такому випадку нижче тому в разі вильоту одного диска можна втратити все. Тому бекап в останньому випадку грає не останню роль. І ще не варто змішувати в одній VG обидва методи, якщо є в цьому необхідність то для striped mapping створіть окрему volume group. Як казав один з моїх викладачів «Природу не обдуриш, за все треба платити». Природно за зручності доводиться розплачуватися, в нашому випадку це 10-15% процесорної потужності. При чому перенос файлових систем з фізичного на логічний рівень на швидкості дискових операцій не позначилася в linear випадку.

Від теорії до практики

Тепер спробуємо створити logical volume і підключити його як звичайну файлову систему. Для початку давайте визначимося, що не треба класти в LV. Так немає особливого сенсу поміщати туди каталог / boot в якому міститься ядро ​​і Grub. Його варто винести в окремий розділ Рамер 50 Мб (з запасом) і в файлі / etc / fstab прописати такі рядки щоб він не автоматично монтувався при завантаженні.

/ Dev / hda1 / boot ext2 noauto 1 2

Застосовувати журнальованою файлові системи в цьому випадку сенсу особливого немає, а при зміні ядра (досить рідкісне заняття) даний каталог завжди можна примонтировать вручну. Також напевно не варто поміщати туди і наступні каталоги / etc, / proc, / lib, / mnt, / bin, / sbin, / dev, / root, swap і / tmp (хоча це все відносно). Зазвичай склад їх більш менш статичною і багато місця не займає, так кореневий розділ в CRUX такого складу вийшов у мене всього навсього 300 Мб, решта знаходиться в / usr, / var та / home. При великій кількості позасистемного софта також слід винести в окремий каталог і / usr / local с / opt (я зазвичай роблю символічне посилання ln -s / usr / local / opt. Щоб голову менше ламати). Додатково до всього у вас завжди буде можливість зайти в систему з під root'a в разі аварійних обставин. LVM можна використовувати при наявність в системі і одного жорсткого диска, але найбільшу гнучкість дана технологія дає при використанні двох і більше дисків в системі. Для експерименту візьмемо два розділи / dev / hda4 і / dev / hdс2. Загальний розподіл розділів на дисках буде таким.

/ Dev / hda1 - / boot / dev / hda2 - swap (містить і / tmp) / dev / hda3 - кореневої (/ etc, / proc, / lib, / mnt, / bin, / sbin, / dev, / root ) / dev / hda4 - Буде використаний з LVM / dev / hdс1 - swap / dev / hdс2 - Буде використаний з LVM

необхідний софт

У більшості сучасних дистрибутивів, за винятком хіба орієнтованих на power user все необхідне для роботи вже є. Деякі програми установки (Fedora / Red Hat) дозволяють створити LVM (і софт-RAID) в графічному режимі, але якщо чесно мені вони не здаються інтуїтивними. Для підтримки технології ядром при компіляції повинні бути включені наступні опції. У секції Multi-device support (RAID and LVM) потрібно включити, підтримку самих Multiple devices. і далі власне менеджера логічних томів (Logical volume manager (LVM) support).
У файлі /usr/src/linux/.config потрібно шукати секцію:

# # Multi-device support (RAID and LVM) # CONFIG_MD = y # CONFIG_BLK_DEV_MD is not set # CONFIG_MD_LINEAR is not set # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set # CONFIG_MD_MULTIPATH is not set CONFIG_BLK_DEV_LVM = y

Наступним кроком необхідно встановити софт для роботи з LVM (якщо його немає звичайно). В Ubuntu досить ввести:

$ Sudo apt-get install lvm2

В результаті отримаєте три групи утиліт призначені для роботи на «своєму» рівні: pv * - працює з фізичними томами, lg * з логічними групами і lv * з логічними томами. Всі їх можна знайти за допомогою табуляції. Так команди виду * create створює те чи групу в залежності від перших двох букв, * display виводить повну інформацію і т.д.
Для початку створюємо фізичні розділи з ідентифікатором 8е. Для прикладу взято другий диск.

$ Sudo / sbin / fdisk / dev / hdс Command (m for help): p Disk / dev / hdс: 3243 MB, 3243663360 bytes 128 heads, 63 sectors / track, 785 cylinders Units = cylinders of 8064 * 512 = 4128768 bytes Device Boot Start End Blocks Id System / dev / hdb1 1 20 168682+ 82 Linux swap / dev / hdb2 21 785 3165088+ b Win95 FAT32 Command (m for help): t Selected partition 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): p Disk / dev / hdс: 3243 MB, 3243663360 bytes 128 heads, 63 sectors / track, 785 cylinders Units = cylinders of 8064 * 512 = 4128768 bytes Device Boot Start End Blocks Id System / dev / hdb1 1 20 168682+ 82 Linux swap / dev / hdb2 21 785 3165088+ 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl () to re-read partition table. WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information. Syncing disks.

І тепер нарізаємо велику VG на логічні томи необхідних розмірів. При цьому потрібно враховувати, що урізання файлової системи і потім логічного тому (ось саме в два етапи), трохи більш трудомісткий процес, ніж збільшення. Краще створити мінімально необхідний розмір логічного тому (з запасом), а потім при необхідності його просто збільшити до потрібного. Створюємо. При цьому за допомогою -L вказується потрібний розмір, а за допомогою -n ім'я і в кінці слудует ім'я VG. Якщо значення в кілобайтах після нього ставиться K, в мегабайтах M і в гигабайтах G.
$ Sudo / sbin / lvcreate -L 1G -n lvm_usr test / Sbin / lvcreate -L 1G -n lvm_home test
lvcreate - doing automatic backup of «test»
lvcreate - logical volume «/ dev / test / lvm_usr» successfully created

lvcreate - doing automatic backup of «test»
lvcreate - logical volume «/ dev / test / lvm_home» successfully created
Або для смугастості.

$ Sudo lvcreate -n stripedlv -i 2 -I 64 mygroup -L 20M

$ Df dev / hda3 4032124 2789108 1038188 73% /. / Dev / test / lvm_home 2097084 32840 2064244 2% / home / test

Як бачите розмір вийшов в два рази більший.
Зменшення розділу проводиться в такому порядку:
- размонтіруем файлову систему
- зменшуємо файлову систему з запасом
- зменшуємо розмір логічного тому за допомогою lvreduce
розширюємо файлову систему до заповнення всього томи
У командах це виглядає так.

$ Sudo umount / dev / test / lvm_home $ sudo resize_reiserfs -s -1.5G / dev / test / lvm_home $ sudo lvreduce -L -1G / dev / test / lvm_home $ sudo resize_reiserfs -f / dev / test / lvm_home

$ Sudo lvcreate -L592M -s -n home_backup / dev / test / lvm_home lvcreate - WARNING: the snapshot must be disabled if it gets full lvcreate - INFO: using default snapshot chunk size of 64 KB for "/ dev / test / home_backup "lvcreate - doing automatic backup of" test "lvcreate - logical volume" / dev / test / home_backup "successfully created

В результаті утворюється ще один логічний тому з ім'ям / dev / test / home_backup.
Його можна змонтувати і подивитися що там є.

$ Mkdir / mnt / snapshots $ sudo mount / dev / test / home_backup / mnt / snapshots mount: block device / dev / ops / dbbackup is write-protected, mounting read-only

Все тепер архівуємо дані і видаляємо snapshots.

Схожі статті