Увеличение корневого раздела без перезагрузки сервера (без LVM)

Очень часто при использовании виртуализации корневой раздел на машинах делают небольшим и в какой-то момент место на нем заканчивается, а подчистить уже ничего нельзя. Если бы использовался LVM (Logical Volume Manager), то расширение раздела не представляло бы проблем, но когда для корневого раздела не используется LVM, то его расширение без остановки сервера многим видится проблемным. На самом деле никаких проблем с расширением корневого раздела без перезагрузки нет.

Исходные данные: Виртуальный сервер (гипервизор 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
# 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

Мы знаем, что у нас корневой раздел расположен на устройстве /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 (Гигабайт).

Все успешно!