Очень часто при использовании виртуализации корневой раздел на машинах делают небольшим и в какой-то момент место на нем заканчивается, а подчистить уже ничего нельзя. Если бы использовался LVM (Logical Volume Manager), то расширение раздела не представляло бы проблем, но когда для корневого раздела не используется LVM, то его расширение без остановки сервера многим видится проблемным. На самом деле никаких проблем с расширением корневого раздела без перезагрузки нет.
Ниже читайте как можно быстро расширить корневой раздел с xfs (или ext4) без остановки сервера.
Исходные данные: Виртуальный сервер (гипервизор VMware) с ОС Oracle Linux 7 и корневым разделом с файловой системой xfs без LVM
Задача: Расширить корневой раздел сервера без перезагрузки и остановки работы сервисов.
Последовательность действий будет такая:
1. Увеличиваем виртуальный диск на котором располагается корневой раздел в VMware.
Думаю здесь нет ничего сложного. Заходим в VMware vSphere или если vSphere не используется, то просто в Web-интерфейс VMware, выбираем нашу VM и увеличиваем раздел на 10 Гигабайт.
Изначально системный диск у меня был размером 8 Гигабайт.
2. Расширение раздела и файловой системы в самой VM.
Нам нужно увеличить корневой раздел на диске vda, посмотрим какие разделы там есть (lsblk) и куда они примонтированы (mount):
# lsblk /dev/vda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 18G 0 disk ├─vda2 252:2 0 7.5G 0 part / └─vda1 252:1 0 500M 0 part /boot [code language="bash"] # mount | grep vda /dev/vda2 on / type xfs (rw,relatime,attr2,inode64,noquota) /dev/vda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
Мы видим, что корневой раздел является вторым — vda2, имеет размер 7.5G (Гигабайт). Так же мы видим, что весь диск vda имеет размер 18G, то есть действия в п.1 прошли успешно, до этого vda был размером 8G (Гигабайт).
Посмотрим размер разделов и сколько там свободного места:
# df -h /dev/vda{1,2} Filesystem Size Used Avail Use% Mounted on /dev/vda1 497M 199M 299M 40% /boot /dev/vda2 7.6G 6.6G 986M 88% /
На корневом разделе свободно всего 986M (Мегабайт), а сам раздел имеет размер 7.5G (Гигабайт)
Для увеличения раздела нам понадобится утилита growpart, по умолчанию она не устанавливается. Установим ее.
Для Oracle (RedHat) Linux выполните:
yum -y install cloud-utils-growpart
Для Ubuntu (Debian) Linux выполните:
apt-get -y install cloud-guest-utils
Синтаксис утилиты growpart простой:
growpart <device> <partition>
Мы знаем, что у нас корневой раздел расположен на устройстве /dev/vda, а номер партиции — 2, увеличиваем раздел:
# growpart /dev/vda 2 CHANGED: partition=2 start=1026048 old: size=15751168 end=16777216 new: size=36722655 end=37748703
Теперь можно расширить файловую систему xfs на все пространство увеличенного раздела с помощью утилиты xfs_growfs. Если бы ФС корневого раздела была ext4, то мы бы воспользовались утилитой resize2fs.
# xfs_growfs / -d meta-data=/dev/vda2 isize=256 agcount=4, agsize=492224 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 spinodes=0 rmapbt=0 = reflink=0 data = bsize=4096 blocks=1968896, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 1968896 to 4590331
По выводу «data blocks changed from XXX to YYY» мы можем констатировать, что расширение ФС прошло, проверим размер корневого раздела:
# lsblk /dev/vda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 18G 0 disk ├─vda2 252:2 0 17.5G 0 part / └─vda1 252:1 0 500M 0 part /boot
# df -h /dev/vda{1,2} Filesystem Size Used Avail Use% Mounted on /dev/vda1 497M 199M 299M 40% /boot /dev/vda2 18G 6.6G 11G 38% /
Мы видим, что раздел vda2 стал размером 17.5G (Гигабайт), а свободного места на корневом разделе xfs стало 11G (Гигабайт).
Все успешно!
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.
Я такую задачу решаю с помощью утилиты parted:
resizepart 2 -1s
где 2 — номер раздела /dev/vda2, а -1s первый с конца сектор.
Здравствуйте, да, действительно при помощи parted тоже удобно делать, сам проверял. Но автору статьи спасибо за еще один сопосб.