Расширение файловой системы с использованием механизмов LVM и увеличением объема существующего vHDD.
[linux
lvm
hdd
]

В этой заметке будет описана процедура увеличения размера файловой системы с использованием LVM и расширением размера существующего vHDD, а не добавлением нового.
Когда применим описанный метод
Преимущество описанного в статье метода в том, что можно расширить раздел LVM без перезагрузки сервера (если конечно система виртуализации позволяет расширить существующий vHDD “на горячую”). Но применить его получится не всегда, есть определенные ограничения, которые не позволят этого сделать. Они описаны ниже:
-
В системе уже есть четыре
primary partitionsи нетextended partition. Так как существует ограничение на количествоprimary partitionsв размере 4 штук, то при попытке создания пятого, система выдаст ошибку. -
В системе уже есть
extended partition, но добавленное место находится за разделом, который являетсяprimary partition. Дело в том, что добавить новыйlogical partitonвextended partitionможно только в том случае, если неразмеченное пространство находится прямо заextended partition. Но может быть ситуация, когда был созданextended partition, в нем один или несколькоlogical partition(s), а за нимprimary partition(как на рисунке ниже). Тут видно, что неразмеченное пространство находится за разделом sda4 (который является primary)

Если есть необходимость расширить существующий раздел LVM (LV - Logical Volume) без перезагрузки, а одно из ограничений не позволяет этого сделать, можно пойти другим способом. Не увеличивать существующий vHDD а добавить новый.
Описание процедуры расширения
Сначала посмотрим исходный раздел, который необходимо расширить. В моем случае это корневой раздел: (/dev/mapper/centos_sonarqube-root 20G 3.4G 17G 17% /)
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_sonarqube-root 20G 3.4G 17G 17% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 26M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 497M 217M 280M 44% /boot
/dev/mapper/centos_sonarqube-tmp 2.0G 202M 1.8G 10% /tmp
/dev/mapper/centos_sonarqube-var 5.1G 3.7G 1.5G 72% /var
-
Расширяем текущий HDD через оснастку консоли виртуализации. Процедура зависит от используемой системы виртуализации. Как правило это не вызывает затруднений, если гипервизор поддерживает увеличение размера vHDD “на горячую”.
-
Что бы операционная система увидела добавленное место, выполняем следующую команду:
echo 1 > /sys/class/block/sda/device/rescan
- Если добавляли новый HDD а не расширяли текущий, то нужно выполнить такую командну.
for i in `seq 0 32`; do echo "- - -" | sudo tee /sys/class/scsi_host/host$i/scan; ls /dev/sd* ; done
Она просканирует все iscsi устройства и если где то появился новый диск, система обнаружит его.
- Проверяем что место появилось, для этого используем команду parted, и в появившемся приглашении вводим print free.
# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
32.3kB 1049kB 1016kB Free Space
1 1049kB 525MB 524MB primary xfs boot
2 525MB 29.6GB 29.1GB primary lvm
29.6GB 42.9GB 13.4GB Free Space
-
Далее необходимо разметить свободное место, для этого используем команду cfdisk. В появившемся меню выбираем пункт с пометкой Free space -> New -> Primary -> Вводим размер создаваемого раздела -> Write -> вводим ‘yes’ для подтверждения.
-
Перечитаем таблицу разделов с помощью команды partprobe
# partprobe
- Проверяем, что раздел появился.
# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00027b36
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 57794559 28384256 8e Linux LVM
/dev/sda3 57794560 83886079 13045760 83 Linux
- Создаем Physical Volume (PV). Имя устройства, указываемое в качестве параметра, берем из вывод предыдущей команды.
# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created.
# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos_sonarqube
PV Size <27.07 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 6929
Free PE 0
Allocated PE 6929
PV UUID 3TtA5K-Wyjr-8D1L-nFpD-lV37-Dir0-oQHuNR
"/dev/sda3" is a new physical volume of "12.44 GiB"
--- NEW Physical volume ---
PV Name /dev/sda3
VG Name
PV Size 12.44 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 2apyrl-QeZg-FLkU-Sjbb-02dC-yj70-jmYX3E
- Отобразим имеющиеся Volume Group (VG) и расширим нужный.
# vgdisplay
--- Volume group ---
VG Name centos_sonarqube
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 4
Max PV 0
Cur PV 1
Act PV 1
VG Size <27.07 GiB
PE Size 4.00 MiB
Total PE 6929
Alloc PE / Size 6929 / <27.07 GiB
Free PE / Size 0 / 0
VG UUID qrvMPo-yHMc-fU5w-Y0zR-cCJA-a6s2-sQxeeQ
# vgextend centos_sonarqube /dev/sda3
Volume group "centos_sonarqube" successfully extended
Проверим что размер VG centos_sonarqube дейтвительно увеличился.
# vgdisplay
--- Volume group ---
VG Name centos_sonarqube
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 4
Max PV 0
Cur PV 2
Act PV 2
VG Size 39.50 GiB
PE Size 4.00 MiB
Total PE 10113
Alloc PE / Size 6929 / <27.07 GiB
Free PE / Size 3184 / <12.44 GiB
VG UUID qrvMPo-yHMc-fU5w-Y0zR-cCJA-a6s2-sQxeeQ
Видно, что значение Free PE увеличилось на размер добавленного PV (~12 Gb).
- Посмотрим существующие Logical Volume (LV) и расширим требуемый.
# lvdisplay
--- Logical volume ---
LV Path /dev/centos_sonarqube/root
LV Name root
VG Name centos_sonarqube
LV UUID rfl0V1-Gu0G-xsYv-F6rA-Qns3-gOe0-LK1ZQm
LV Write Access read/write
LV Creation host, time sonarqube.domain.ru, 2018-07-06 12:07:13 +0300
LV Status available
# open 1
LV Size 19.76 GiB
Current LE 5059
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
# lvextend -l+100%FREE /dev/centos_sonarqube/root
Size of logical volume centos_sonarqube/root changed from 19.76 GiB (5059 extents) to <32.20 GiB (8243 extents).
Logical volume centos_sonarqube/root successfully resized.
Убедимся, что размер LV centos_sonarqube/root действительно увеличился:
# lvdisplay
--- Logical volume ---
LV Path /dev/centos_sonarqube/root
LV Name root
VG Name centos_sonarqube
LV UUID rfl0V1-Gu0G-xsYv-F6rA-Qns3-gOe0-LK1ZQm
LV Write Access read/write
LV Creation host, time sonarqube.parma.ru, 2018-07-06 12:07:13 +0300
LV Status available
# open 1
LV Size <32.20 GiB
Current LE 8243
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
- Наконец, расширим файловую систему, что бы добавленное в LV пространство было доступно операционной системе. В случае с CentOS команда resize2fs была заменена на xfs_growfs`.
# resize2fs /dev/mapper/centos_sonarqube-root
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/mapper/centos_sonarqube-root
Couldn't find valid filesystem superblock.
# xfs_growfs /dev/mapper/centos_sonarqube-root
meta-data=/dev/mapper/centos_sonarqube-root isize=512 agcount=4, agsize=1295104 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=5180416, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
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 5180416 to 8440832
- Проверяем что размер раздела действительно увеличился:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos_sonarqube-root 33G 3.4G 29G 11% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 26M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 497M 217M 280M 44% /boot
/dev/mapper/centos_sonarqube-tmp 2.0G 202M 1.8G 10% /tmp
/dev/mapper/centos_sonarqube-var 5.1G 3.7G 1.5G 72% /var
На этом увеличение раздела файловой системы можно считать завершенным.
P.S: последовательность команд для добавления нового logical volume
fdisk -l
pvdisplay
pvcreate /dev/sdb
vgdisplay
vgextend /dev/sdb
vgextend centos /dev/sdb
lvcreate -n pgdata -l 100%FREE centos
mkfs.xfs /dev/centos/pgdata
fdisk -l
blkid /dev/centos/pgdata
vi /etc/fstab
mkdir /var/lib/pgdata
mount -a
df -h
