Расширение диска Online

Материал из Записки на полях
Перейти к навигации Перейти к поиску

В данной статье мы опишем способ увеличения доступного пространства в Linux системе. Данный способ работает в режиме online, то есть не требует перезагрузок сервера или размонтирования.

Итак, у нас есть виртуальный сервер с заканчивающимся местом на диске (раздел не имеет значения - можно расширить даже корневой раздел). Мы в гипервизоре увеличили размер диска. Требуется увеличить размер файловой системы.

Если сервер с базой данных или высоконагруженный - желательно перевести базу в readonly или как то ещё ограничить/снять нагрузку с сервера, чтобы дисковые запросы на запись не мешали нам.

Увеличение partition

Имеем

# fdisk -l /dev/sda

Disk /dev/sda: 37.6 GB, 37580963840 bytes, 73400320 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000eefc7

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    62914559    30407680   8e  Linux LVM

Система увидела увеличение диска /dev/sda на 5Гб, но разделы остались без изменений.

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

# fdisk /dev/sda

Command (m for help): d					# Удаляем партицию
Partition number (1,2, default 2): 2			# 2-ю
Partition 2 is deleted					# Успешно

Command (m for help): p					# Смотрим что получилось

Disk /dev/sda: 37.6 GB, 37580963840 bytes, 73400320 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000eefc7

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux		# Раздел sda2 удалён

Command (m for help): n					# создаём новую партицию
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p					# нам надо primary
Using default response p
Partition number (2-4, default 2): 2			# номер раздела 2 как и был раньше
First sector (2099200-73400319, default 2099200):	# по-умолчанию предлагается сектор с которого и начинался удалённый раздел, но на всякий случай проверяем с тем что было раньше - 2099200
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-73400319, default 73400319):	# по-умолчанию предлагает увеличить до максимума - нас это устраивает
Using default value 73400319
Partition 2 of type Linux and of size 34 GiB is set	# успешно

Command (m for help): t					# вносим метку и типе партиции. В моём случае у меня LVM - код 8e. Можно посмотреть в предыдущем выводе команды fdisk -l /dev/sda - столбик Id, то что нам надо
Partition number (1,2, default 2):
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'	# успешно

Command (m for help): w					# записываем изменения на диск
The partition table has been altered!

При записи изменений на диск и выходе fdisk ругнётся, что требуется перезагрузить сервер или обновить информацию о резделах командой partprobe или kpartx.

Перезагрузка нам не нужна, так что запускаем

# partprobe

Проверяем что прошло успешно и раздел увеличен.

# fdisk -l /dev/sda

Disk /dev/sda: 37.6 GB, 37580963840 bytes, 73400320 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000eefc7

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    73400319    35650560   8e  Linux LVM

Но доступного места больше не стало!

# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   27G  1.7G   26G   7% /
/dev/sda1               1014M  212M  803M  21% /boot

Расширение LVM

Поскольку у нас есть LVM, то требуется и его расширять. Если у Вас раздел сразу отформатирован в ext4 или xfs, то можете переходить к следующему разделу.

Имеем

# pvs
 PV         VG     Fmt  Attr PSize   PFree
 /dev/sda2  centos lvm2 a--  <29.00g 4.00m

Для начала требуется увеличить PV

# pvresize /dev/sda2

Получаем

# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <34.00g 5.00g

Проверяем, что VG так же увидел увеличение раздела

# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <34.00g 5.00g

Теперь увеличиваем LV

# lvextend -l +100%FREE /dev/centos/root

Тут centos - название VG, а root - LV Проверяем, что всё получилось

# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <32.00g
  swap centos -wi-ao----   2.00g

Resize ext4/xfs

У меня Centos с XFS в качестве файловой системы, поэтому я даю команду

# xfs_growfs /

В качестве аргумента указывается точка монтирования (у меня это корень).

Для ext4 команда будет такая

# resize2fs /dev/centos/root