Увеличение диска на VDS с CentOS и LVM

На одном из наших виртуальных серверов с установленной ОС CentOS 5.7, стало заканчиваться место на диске, и встал вопрос о расширении дискового пространства.

Панель управления виртуальным сервером SolusVM позволяет изменять в сторону увеличения дисковое пространство, отведённое под виртуальную машину. В том числе, это без проблем работает на технологии виртуализации KVM, на которой у нас построены виртуальные машины. Однако, ОС CentOS не может автоматически расширить файловую систему до нового размера отведённого дискового пространства. Переустанавливать систему крайне не хотелось, потому что это обернулось бы значительным простоем сервера. К счастью, нашёлся способ расширить диск и без переустановки системы.

Этот способ подразумевает, что диск вашего виртуального сервера отформатирован в LVM. Кстати, такой тип разделов инсталлятор CentOS предлагает по умолчанию при установке системы.

Сделав бэкап всех данных (обязательная операция!), я принялся за работу. В панели управления SolusVM увеличил объём выделенного дискового пространства с 60 до 140 ГиБ, затем перезагрузил VDS из панели, чтобы изменения вступили в силу. После этого видим, что устройство hda увеличилось до 150 ГБ:

# fdisk -l

Disk /dev/hda: 150.3 GB, 150323855360 bytes
255 heads, 63 sectors/track, 18275 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        7832    62806117+  8e  Linux LVM

Однако, свободного места больше не стало:

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      58785924  45142212  10609396  81% /
/dev/hda1               101086     37741     58126  40% /boot
tmpfs                  1556236         0   1556236   0% /dev/shm
/usr/tmpDSK             495844     84942    385302  19% /tmp

Очевидно, у нас появилась свободная неразмеченная область. Создадим логический диск hda3 с таким же типом раздела Linux LVM, как и на диске hda2.

# fdisk /dev/hda

В оболочке fdisk вводим следующие команды:

n — создаём новый раздел;
p — обозначаем его как primary;
так как у нас было 2 логических раздела, то на вопрос Partition number (1-4) отвечаем 3;
t — укажем тип раздела;
опять тот же вопрос Partition number (1-4), конечно же отвечаем 3;
вводим 8e — это код типа раздела, соответствующий Linux LVM;
убедимся, что всё сделано верно, вводим p — показать таблицу разделов:

Disk /dev/hda: 150.3 GB, 150323855360 bytes
255 heads, 63 sectors/track, 18275 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        7832    62806117+  8e  Linux LVM
/dev/hda3            7833       18275    83883397+  8e  Linux LVM

видим, что добавился раздел hda3, вводим w — сохранение изменений.
Здесь мы получим предупреждение о том, что изменения в данный момент невозможны, но всё будет ОК после перезагрузки.
выходим из оболочки fdisk, нажав Ctrl+Z, и перезагружаем виртуальный сервер.

После перезагрузки идём дальше. Создаём физический том hda3:

# pvcreate /dev/hda3
  Physical volume "/dev/hda3" successfully created

Расширяем группу томов на освободившееся место. Используем наше имя группы томов VolGroup00, которое мы подсмотрели ранее, командой df:

# vgextend /dev/VolGroup00 /dev/hda3
  Volume group "VolGroup00" successfully extended

Расширяем логический том. Для его имени также используем данные команды df:

# lvextend -l+100%FREE /dev/VolGroup00/LogVol00
  Extending logical volume LogVol00 to 137.84 GB
  Logical volume LogVol00 successfully resized

Активируем:

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VolGroup00" using metadata type lvm2

# vgchange -ay
  2 logical volume(s) in volume group "VolGroup00" now active

И, наконец, расширяем файловую систему:

# resize2fs /dev/VolGroup00/LogVol00
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/VolGroup00/LogVol00 to 36134912 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol00 is now 36134912 blocks long.

Это займёт некоторое время, зависящее от размера добавленного места.
После завершения операции видим, что свободное место в файловой системе действительно появилось:

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                     140012336  44868028  87918352  34% /
/dev/hda1               101086     37741     58126  40% /boot
tmpfs                  1556236         0   1556236   0% /dev/shm
/usr/tmpDSK             495844     84980    385264  19% /tmp

Готово! Я ещё раз перезагружал виртуальный сервер, с тем чтобы убедиться, что всё работает нормально, но видимо это можно было и не делать. Таким образом, с помощью такой методики можно увеличить размер диска без переустановки операционной системы, сведя время недоступности сервера к минимуму — ко времени, требующемуся для 2-3 перезагрузок VDS.

Обсуждение закрыто.