Стаття також доступна російською (перейти до перегляду).

Содержание:
- Питання зміни об’ємів файлових сховищ в Linux
- Розширення диску в Linux
- Підготовка нового диску до використання в Linux
Сучасні хмарні технології та системи віртуалізації дозволяють ефективно використовувати ресурси, забезпечуючи їх динамічне виділення за потреби. Один із критично важливих ресурсів — дисковий простір, нестача якого може паралізувати серверну систему. Забезпечення безпечного збереження даних під час зміни параметрів файлового сховища можливе за допомогою інструментів, що підтримують "онлайн"-оновлення конфігурації без перезавантаження ОС. У Linux для роботи з хмарними сховищами можна використовувати утиліти пакету cloud-utils, які дозволяють ефективно змінювати параметри віртуальних дисків. Давайте розглянемо, як це працює на практиці.
Питання зміни об’ємів файлових сховищ в Linux
Якщо цей процес відбувається у стаціонарних умовах фізично виділеного сервера, то Адміністратор має змогу заздалегідь зберегти всі дані, котрі знаходяться на диску, уникнувши їх можливої втрати. Після завершення процесу зміни параметрів та виконання всіх необхідних налаштувань, сервер перезавантажується і сховище з новими характеристиками стає готовим до використання.
Недоліком розглянутого «класичного» підходу є повна відсутність динамічності – таке рішення є неефективним та небезпечним для віддаленого режиму роботи сервера. Неефективність полягає у можливості застосування лише дискретного або фіксованого розподілу ресурсів без врахування реальних навантажень. Небезпечність розглядається з точки зору збереження цілісності всіх даних у будь-який момент часу.
Найбільш повно динамічність проявляється при роботі в «хмарі» або будь-якому віртуальному середовищі, зокрема, наVPS-сервері. Більш того, саме завдяки динамічності і можливе існування самодостатнього віртуального середовища. Саме тут можна отримати найбільший виграш у ефективності та безпеці. І тому надалі ми будемо розглядати процес зміни характеристик сховища лише в таких умовах
Складність зміни параметрів файлового сховища у онлайн-режимі його роботи полягає у необхідності вчасного «попередження» операційної системи про значення нових параметрів сховища. У «класичному» варіанті таке попередження відбувається завдяки перезавантаженню ОС. Однак, у нашому випадку це не підходить і тому треба застосовувати інші методи.
Один з підходів передбачає використання утиліти пересканування дисків, наприклад, rescan. Утиліта, зазвичай, знаходиться за адресою: /sys/class/block/sda/device/rescan. Після того, як пристрої будуть проскановані, нові параметри стануть доступними без перезавантаження ОС.
Інший підхід полягає у застосуванні утиліт пакетів cloud-init та cloud-utils для Debian, спеціально створених для можливості виконання автоматичних налаштувань системи в хмарі. Саме вони надають найбільш гнучкий механізм керування віртуальним середовищем у автоматичному режимі. Окрім того, у порівнянні з «класичною» дисковою утилітою fdisk із пакету util-linux вони здатні забезпечити універсальну сумісність з будь-якими GPT-дисками.
Розширення диску в Linux
Змоделюємо певну ситуацію. На диску нашого VPS-серверу присутні два розділи, а також близько 15 ГБ нерозподіленого дискового простору. На сервері постійно відбувається активний обмін даними, зокрема, запис даних у файли БД, розміщені на диску. Завдання полягає в тому, щоб, не припиняючи запис та оновлення даних на диску, забезпечити розширення одного з розділів за рахунок приєднання до нього нерозподілених гігабайт дискового простору.
Для вирішення цього завдання будемо використовувати програми із «хмарного» пакету cloud-utils для Debian.
Розіб’ємо процес на кілька етапів:
З’ясування розмірів наявного файлового сховища та виявлення зареєстрованих у системі дисків;
-
Встановлення пакету cloud-utils для Debian;
-
Створення резервної копії поточної таблиці дискових розділів;
-
Тестування;
-
Виконання операції розширення розділу;
-
Зміна розміру файлової системи;
-
Перевірка розміру оновленого файлового сховища.
Виконаємо кожен з вказаних етапів.
З’ясування розмірів сховища та виявлення дисків
Для з’ясування розмірів поточного файлового сховища скористаємося утилітою df, котра виводить список всіх примонтованих файлових систем (ФС) та їх характеристики. Параметр -h використовується для виведення розміру ФС із розмірністю 1024 та назвами одиниць.
Введемо в терміналі:
$ df -h

Вивід команди:
Filesystem Size Used Avail Use% Mounted on tmpfs 192M 1.8M 190M 1% /run /dev/vda2 24G 17G 6.4G 73% / tmpfs 958M 0 958M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 192M 4.0K 192M 1% /run/user/0 overlay 24G 17G 6.4G 73% /var/lib/docker/overlay2/7ec8b30c4e8796cd649b82dea8c7cc975d8e426ca964753b9a6c670b91a0e5d7/merged
Як бачимо, на диску /dev/vda2 доступно лише 6,4 ГБ, а його загальний об’єм становить 24 ГБ. Хоча ми знаємо, що реальний простір приблизно на 60 % більший. Інша частина диску не фіксується утилітою, оскільки цей дисковий простір ще не готовий до використання у якості файлового сховища.
Після цього переглянемо всі зареєстровані диски. Це можна зробити а допомогою наступної команди:
ls -la /dev | grep disk

Вивід команди:
crw-rw---- 1 root disk 10, 234 Nov 26 22:24 btrfs-control drwxr-xr-x 6 root root 120 Jun 7 2024 disk brw-rw---- 1 root disk 7, 0 Nov 26 22:24 loop0 brw-rw---- 1 root disk 7, 1 Nov 26 22:24 loop1 brw-rw---- 1 root disk 7, 2 Nov 26 22:24 loop2 brw-rw---- 1 root disk 7, 3 Nov 26 22:24 loop3 brw-rw---- 1 root disk 7, 4 Jan 11 12:59 loop4 brw-rw---- 1 root disk 7, 5 Jan 11 12:59 loop5 brw-rw---- 1 root disk 7, 6 Nov 26 22:24 loop6 brw-rw---- 1 root disk 7, 7 Nov 26 22:24 loop7 crw-rw---- 1 root disk 10, 237 Nov 26 22:24 loop-control brw-rw---- 1 root disk 252, 0 Nov 26 22:24 vda brw-rw---- 1 root disk 252, 1 Nov 26 22:24 vda1 brw-rw---- 1 root disk 252, 2 Nov 26 22:24 vda2
Тепер ми знаємо напевно, які розділи має наш диск та його назву. Для реалізації нашого завдання нам потрібно буде змінити розмір розділу vda 2.
Встановлення пакету cloud-utils для Debian
Встановимо пакет із репозиторію. Для цього введемо в терміналі:
$ apt install cloud-utils
$ apt install cloud-utils


Підтверджуємо згоду на виділення додаткових 48 МБ, після чого процес інсталяції пакету продовжиться.


Результат: Setting up cloud-utils (0.32-22-g45fe84a5-0ubuntu1) – пакет успішно встановлено.
Створення резервної копії таблиці розділів
Резервну копію поточної таблиці розділів зробимо за допомогою наступної команди:
$ sfdisk -d /dev/vda > vda_partition_bak.dmp

Перевіримо:
$ ls -l

Отже, резервна копія успішно створена
Тестування
Безпосередньо перед виконанням операції розширення розділу переконаємося, що вона можлива та буде безпечною. Для цього скористаємося тестовим режимом запуску утиліти growpart із пакету cloud-utils.
Введемо в терміналі:
$ growpart -N /dev/vda 2

Вихід команди:
CHANGE: partition=2 start=4096 old: size=51195871 end=51199967 new: size=81915871 end=81919967 # === old sfdisk -d === label: gpt label-id: 53DBD262-198E-48CC-903C-8B43EA9AAB57 device: /dev/vda unit: sectors first-lba: 34 sector-size: 512 /dev/vda1 : start= 2048, size= 2048, type=21686148-6449-6E6F-744E-656564454649, uuid=057446E8-C112-4D1F-B87C-06C5ACDC3CFC /dev/vda2 : start= 4096, size=51195871, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=619DB1AD-598C-4B41-8A4B-931DAE9F025B # === new sfdisk -d === label: gpt label-id: 53DBD262-198E-48CC-903C-8B43EA9AAB57 device: /dev/vda unit: sectors first-lba: 34 sector-size: 512 /dev/vda1 : start= 2048, size= 2048, type=21686148-6449-6E6F-744E-656564454649, uuid=057446E8-C112-4D1F-B87C-06C5ACDC3CFC /dev/vda2 : start= 4096, size=81915871, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=619DB1AD-598C-4B41-8A4B-931DAE9F025B
Програма вивела як поточні характеристики розділів, так і нові, котрі вони будуть мати після виконання операції. Для розділу vda 2 передбачаються наступні зміни:
new: size=81915871 end=81919967
Це приблизно на 15 ГБ більше поточних значень розмірів вказаного розділу. Отже, можна переходити до виконання вказаної операції.
Виконання операції розширення розділу
Введемо в терміналі:
$ growpart /dev/vda 2

Результат:
CHANGED: partition=2 start=4096 old: size=51195871 end=51199967 new: size=81915871 end=81919967
Отже, операція виконана успішно.
Зміна розміру файлової системи
Для розгортання файлової системи для розділу із оновленими розмірами скористаємося утилітою resize2fs. Для цього введемо в терміналі:
$ resize2fs /dev/vda2

Результат:
resize2fs 1.46.5 (30-Dec-2021)Filesystem at /dev/vda2 is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 5
The filesystem on /dev/vda2 is now 10239483 (4k) blocks long.
Можна переконатися, що кількість блоків (desc_blocks) збільшилася з 4-ох до 5-ти, що говорить про розширення «робочого» розміру дискового розділу.
Перевірка розміру оновленого файлового сховища
Перевіримо поточний розмір «зареєстрованого» файлового сховища.
$ df -h

Результат:
Filesystem Size Used Avail Use% Mounted on tmpfs 192M 2.6M 190M 2% /run /dev/vda2 39G 17G 21G 46% / tmpfs 958M 0 958M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 192M 4.0K 192M 1% /run/user/0 overlay 39G 17G 21G 46% /var/lib/docker/overlay2/7ec8b30c4e8796cd649b82dea8c7cc975d8e426ca964753b9a6c670b91a0e5d7/merged tmpfs 958M 0 958M 0% /run/qemu
Можна переконатися, що замість старого значення у 6 ГБ вільного місця, диск тепер має 21 ГБ (6+15). Отже, наше первісне завдання по розширенню дискового простору без перезавантаження ОС та втрати даних успішно виконано.
Підготовка нового диску до використання в Linux
Іноді виникає потреба отримати додатковий дисковий простір не за рахунок розширення одного з розділів поточного носія, а шляхом підключення нового. Це можна зробити у Адміністративній панелі по управлінню віртуальним сервером. Однак слід зауважити, що такий диск не можна буде одразу ж використовувати для своїх потреб без виконання попередніх операцій по його підготовці. І він не буде розпізнаватися системними програмними засобами у якості дискового сховища.
Зробити таке сховище «робочим» можна лише після створення на доданому диску хоча б одного розділу із розгортанням на ньому відповідної файлової системи. Для Linux це ext2, ext3 та ext4.
Наведемо послідовність дій, необхідних для успішного виконання вказаного завдання:
-
Створити таблицю розділів.
$ parted /dev/vdc mklabel gpt
Тут /dev/vdc – під’єднаний нами пристрій.
-
Створити розділ.
$ parted -a opt /dev/vdc mkpart primary ext4 0% 70%
-
Виконати перевірку та переконатися, що «робочий» розділ з’явився.
$ lsblk
У випадку успіху, у виводі команди з’явиться назва нового розділу. У нашому випадку це vdc1.
-
Створити файлову систему для нового розділу.
$ mkfs.ext4 -L experimental-data /dev/vdc1
-
Створити точку монтування для файлової системи.
$ mkdir -p /mnt/testadddisk $ mount -o defaults /dev/vdc1 /mnt/testadddisk
-
Переконатися, що вказаний при створенні розділу об’єм сприймається системою як файлове сховище.
$ df -h
У випадку успіху, серед інших файлових сховищ буде виведена назва нового розділу (/dev/vdc1) та його точка монтування (/mnt/testadddisk) та розмір.
-
Налагодити автоматичне підключення диску при кожному завантаженні системи.
Для цього слід скористатися одним із доступних текстових редакторів для редагування системного файлу /etc/fstab:
$ nano /etc/fstab
У кінець файлу для нашого випадку слід додати наступну строчку:
LABEL=testadddisk-data /mnt/testadddisk ext4 defaults 0 2
Після збереження внесених змін вийти з редактору.
-
Виконати перевірку.
Щоб переконатися, що створена файлова система підключається, слід виконати перезавантаження системи та продивитися список доступних файлових сховищ:
$ reboot $ df -h
Вивід останньої команди повинен бути таким самим, як і в п.6. нашого плану. Якщо це так, завдання виконане і створене нами файлове сховище завжди буде доступним для використання.
Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.
Дивіться наш канал Youtube на https://www.youtube.com/freehostua.
Ми у чомусь помилилися, чи щось пропустили?
Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.
|
Дата: 21.01.2025 Автор: Александр Ровник
|
|

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus