• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

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

Содержание:

Сучасні хмарні технології та системи віртуалізації дозволяють ефективно використовувати ресурси, забезпечуючи їх динамічне виділення за потреби. Один із критично важливих ресурсів — дисковий простір, нестача якого може паралізувати серверну систему. Забезпечення безпечного збереження даних під час зміни параметрів файлового сховища можливе за допомогою інструментів, що підтримують "онлайн"-оновлення конфігурації без перезавантаження ОС. У 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.

Наведемо послідовність дій, необхідних для успішного виконання вказаного завдання:

  1. Створити таблицю розділів.

    $ parted /dev/vdc mklabel gpt

    Тут /dev/vdc – під’єднаний нами пристрій.

  2. Створити розділ.

     $ parted -a opt /dev/vdc mkpart primary ext4 0% 70%

  3. Виконати перевірку та переконатися, що «робочий» розділ з’явився.

    $ lsblk

    У випадку успіху, у виводі команди з’явиться назва нового розділу. У нашому випадку це vdc1.

  4. Створити файлову систему для нового розділу.

     $ mkfs.ext4 -L experimental-data /dev/vdc1
  5. Створити точку монтування для файлової системи.

      $ mkdir -p /mnt/testadddisk
     $ mount -o defaults /dev/vdc1 /mnt/testadddisk
  6. Переконатися, що вказаний при створенні розділу об’єм сприймається системою як файлове сховище.

    $ df -h

    У випадку успіху, серед інших файлових сховищ буде виведена назва нового розділу (/dev/vdc1) та його точка монтування (/mnt/testadddisk) та розмір.

  7. Налагодити автоматичне підключення диску при кожному завантаженні системи.

    Для цього слід скористатися одним із доступних текстових редакторів для редагування системного файлу /etc/fstab:

     $ nano /etc/fstab

    У кінець файлу для нашого випадку слід додати наступну строчку:

    LABEL=testadddisk-data /mnt/testadddisk ext4 defaults 0 2

    Після збереження внесених змін вийти з редактору.

  8. Виконати перевірку.

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

    $ reboot
    $ df -h

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

Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.

Дивіться наш канал Youtube на https://www.youtube.com/freehostua.

Ми у чомусь помилилися, чи щось пропустили?

Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.

Дата: 21.01.2025
Автор: Александр Ровник
Голосування

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

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA