• База знаний
  • /
  • Блог
  • /
  • 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 , выводящий список всех примонтированных файловых систем (ФС) и их характеристики. Параметр -час используется для вывода размера ФС размерностью 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

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

 

Результат: Настройка облачных утилит (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. нашего плана. Если это так, задача выполненная и созданное нами файловое хранилище всегда будет доступно для использования.

Вывод последней команды должен быть таким же, как и в п.6. нашего плана. Если это так, задача выполненная и созданное нами файловое хранилище всегда будет доступно для использования.

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

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем ошиблись, или что-то пропустили?

Напишите об этом в комментариях, мы с удовольствием ответим и обсуждаем Ваши замечания и предложения.

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

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA