LVM, часть 3 из 3. Практика
17.09.2023
Теги: CLI • Linux • БлочноеУстройство • Команда • Практика • ФайловаяСистема
LVM или Logical Volume Manager — уровень абстракции над разделами физических дисков, который позволяет создавать логические тома для хранения данных без переразметки этих физических дисков. Программы могут работать с логическими, виртуальными LVM разделами, точно так же как и с обычными.
LVM. Практика
Увеличение логического раздела
Логический раздел для /var
, который мы создали при установке системы, имеет размер 6 Гбайт. Допустим, что места стало не хватать — так что добавим новый диск /dev/sdf
. И для начала создадим физический том.
$ sudo pvcreate /dev/sdf Physical volume "/dev/sdf" successfully created.
Расширим группу томов vg-sdb-sdc
, которую создали при установке
$ sudo vgextend vg-sdb-sdc /dev/sdf Volume group "vg-sdb-sdc" successfully extended
После этого можно расширять логический том /dev/vg-sdb-sdc/lv-var
$ sudo lvextend --extents +100%FREE /dev/vg-sdb-sdc/lv-var Size of logical volume vg-sdb-sdc/lv-var changed from 6,00 GiB (1536 extents) to <14,00 GiB (3583 extents). Logical volume vg-sdb-sdc/lv-var successfully resized.
Размер можно увеличивать с помощью опции --size
, указывая его с суффиксом M, G, T, P, E. Если при этом указывается символ плюс перед числом — это значит, что нужно увеличить размер на это значение. Если символа плюс нет — это значит, что нужно увеличить до этого значения.
Кроме того, размер можно увеличить с помощью опции --extents
, указывая в качестве значения число экстентов. Символ плюс имеет такое же значение, как для опции --size
. Можно указывать размер в процентах свободного места группы томов — используя суффикс %FREE
или в процентах от общего размера группы томов — используя суффикс %VG
.
Давайте посмотрим, что получилось
$ sudo lvdisplay --maps .......... --- Logical volume --- LV Path /dev/vg-sdb-sdc/lv-var LV Name lv-var VG Name vg-sdb-sdc LV UUID Unu5eU-n0tv-yu4V-l7QH-H681-4kN2-9Mxejc LV Write Access read/write LV Creation host, time ubuntu-server, 2023-09-10 11:45:16 +0000 LV Status available # open 1 LV Size <14,00 GiB Current LE 3583 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 --- Segments --- Logical extents 0 to 1535: Type linear Physical volume /dev/sdc Physical extents 0 to 1535 Logical extents 1536 to 3582: Type linear Physical volume /dev/sdf Physical extents 0 to 2046 ..........
Логический раздел теперь состоит из двух сегментов, находящихся на разных физических дисках.
Осталось только расширить файловую систему
$ sudo resize2fs /dev/vg-sdb-sdc/lv-var resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/vg-sdb-sdc/lv-var is mounted on /var; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2 The filesystem on /dev/vg-sdb-sdc/lv-var is now 3668992 (4k) blocks long.
Проверим, какой теперь размер файловой системы, смонтированной в /var
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 452M 129M 289M 31% /boot /dev/sda3 7,3G 3,6G 3,4G 52% / /dev/mapper/vg--sdb--sdc-lv--var 14G 629M 13G 5% /var /dev/mapper/vg--sdb--sdc-lv--home 9,8G 52K 9,3G 1% /home /dev/mapper/vg--sdd--sde-lv--backup 2,9G 24K 2,8G 1% /mnt/backup /dev/mapper/vg--sdd--sde-lv--cache 2,0G 24K 1,9G 1% /mnt/cache /dev/mapper/vg--sdd--sde-lv--config 974M 24K 907M 1% /mnt/config ..........
_____________ _____________ _____________ _____________ _____________ _____________ | | | | | | | | | | | | |/dev/sda, 8Гб| |/dev/sdb, 8Гб| |/dev/sdc, 8Гб| |/dev/sdd, 4Гб| |/dev/sde, 2Гб| |/dev/sdf, 8Гб| |_____________| |_____________| |_____________| |_____________| |_____________| |_____________| _ __ ____ _____________________________ _____________________________ _____________ | | | | | | | | | | | | |_| |__| |____| | VG vg-sdb-sdc | | VG vg-sdd-sde | |VG vg-sdb-sdc| |_____________________________| |_____________________________| |_____________| grub, /boot, / _________________ _________ ________ _______ ________ _____________ | | | | | | | | | | | | | /home, 10Гб | |/var, 6Гб| | backup | | cache | | config | | /var, 8Гб | |_________________| |_________| |________| |_______| |________| |_____________|
Уменьшение логического раздела
Давайте уменьшим логический раздел /dev/vg-sdb-sdc/lv-var
до 10 Гбайт, а освободившееся место используем для увеличения логического раздела /dev/vg-sdb-sdc/lv-home
. Сначала нужно уменьшить размер файловой системы, потом уменьшить размер раздела. В данном случае лучше всего оперировать абсолютными значениями в байтах, нежели относительными в процентах, так как при малейшей ошибке есть риск потерять все данные.
Первая часть. Уменьшение раздела /dev/vg-sdb-sdc/lv-var
Уменьшаем размер файловой системы до размера 10 Гбайт
$ sudo resize2fs /dev/vg-sdb-sdc/lv-var 10G resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/vg-sdb-sdc/lv-var is mounted on /var; on-line resizing required resize2fs: On-line shrinking not supported
И тут меня поджидал сюрприз — нельзя изменить размер файловой системы без размонтирования. Но размонтировать /var
нельзя, потому что туда постоянно что-то записывают разные службы. Так что пришлось загрузиться с установочного диска Ubuntu Desktop, выбрать Try Ubuntu и уже там выполнить команду resize2fs
. Хорошо, извлекаем dvd-диск из привода виртуальной машины и опять перезагружаемся.
Убедимся в том, что размер файловой системы теперь 10 Гбайт
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 452M 129M 289M 31% /boot /dev/sda3 7,3G 3,6G 3,4G 52% / /dev/mapper/vg--sdb--sdc-lv--var 9,8G 745M 8,6G 8% /var /dev/mapper/vg--sdb--sdc-lv--home 9,8G 56K 9,3G 1% /home /dev/mapper/vg--sdd--sde-lv--backup 2,9G 24K 2,8G 1% /mnt/backup /dev/mapper/vg--sdd--sde-lv--cache 2,0G 24K 1,9G 1% /mnt/cache /dev/mapper/vg--sdd--sde-lv--config 974M 24K 907M 1% /mnt/config ..........
Уменьшаем размер логического раздела до размера 10 Гбайт
$ sudo lvreduce --resizefs --size 10G /dev/vg-sdb-sdc/lv-var resize2fs 1.46.5 (30-Dec-2021) The filesystem is already 2621440 (4k) blocks long. Nothing to do! Size of logical volume vg-sdb-sdc/lv-var changed from <14,00 GiB (3583 extents) to 10,00 GiB (2560 extents). Logical volume vg-sdb-sdc/lv-var successfully resized.
Размер можно уменьшать с помощью опции --size
, указывая его с суффиксом M, G, T, P, E. Если при этом указывается символ минус перед числом — это значит, что нужно уменьшить размер на это значение. Если символа минус нет — это значит, что нужно уменьшить до этого значения.
Кроме того, размер можно уменьшить с помощью опции --extents
, указывая в качестве значения число экстентов. Символ минус имеет такое же значение, как для опции --size
. Можно указывать размер в процентах свободного места группы томов — используя суффикс %FREE
или в процентах от общего размера группы томов — используя суффикс %VG
.
Для команды lvreduce
лучше всегда указывать опцию --resizefs
— тогда перед уменьшением размера будет попытка уменьшить файловую систему. И если эта попытка не будет успешной — команда lvreduce
завершается с ошибкой без выполенения операции уменьшения размера логического раздела. Использование опции --resizefs
позволяет вообще не запускать команду resize2fs
перед запуском lvreduce
.
Посмотрим, что у нас получилось в итоге
$ sudo lvdisplay .......... --- Logical volume --- LV Path /dev/vg-sdb-sdc/lv-var LV Name lv-var VG Name vg-sdb-sdc LV UUID Unu5eU-n0tv-yu4V-l7QH-H681-4kN2-9Mxejc LV Write Access read/write LV Creation host, time ubuntu-server, 2023-09-10 11:45:16 +0000 LV Status available # open 1 LV Size 10,00 GiB Current LE 2560 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 ..........
$ sudo vgdisplay .......... --- Volume group --- VG Name vg-sdb-sdc System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 3 Act PV 3 VG Size <23,99 GiB PE Size 4,00 MiB Total PE 6141 Alloc PE / Size 5118 / 19,99 GiB Free PE / Size 1023 / <4,00 GiB VG UUID CEBsRN-KNpO-6uab-6UPl-db10-IpPP-Lie90R
_____________ _____________ _____________ _____________ _____________ _____________ | | | | | | | | | | | | |/dev/sda, 8Гб| |/dev/sdb, 8Гб| |/dev/sdc, 8Гб| |/dev/sdd, 4Гб| |/dev/sde, 2Гб| |/dev/sdf, 8Гб| |_____________| |_____________| |_____________| |_____________| |_____________| |_____________| _ __ ____ _____________________________ _____________________________ _____________ | | | | | | | | | | | | |_| |__| |____| | VG vg-sdb-sdc | | VG vg-sdd-sde | |VG vg-sdb-sdc| |_____________________________| |_____________________________| |_____________| grub, /boot, / _________________ _________ ________ _______ ________ _____ | | | | | | | | | | | | | /home, 10Гб | |/var, 6Гб| | backup | | cache | | config | |/var | свободно |_________________| |_________| |________| |_______| |________| |_____|
Вторая часть. Увеличение раздела /dev/vg-sdb-sdc/lv-home
Расширяем логический раздел
$ sudo lvextend --extents +100%FREE /dev/vg-sdb-sdc/lv-home Size of logical volume vg-sdb-sdc/lv-home changed from 9,99 GiB (2558 extents) to <13,99 GiB (3581 extents). Logical volume vg-sdb-sdc/lv-home successfully resized.
Расширяем файловую систему
$ sudo resize2fs /dev/vg-sdb-sdc/lv-home resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/vg-sdb-sdc/lv-home is mounted on /home; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 2 The filesystem on /dev/vg-sdb-sdc/lv-home is now 3666944 (4k) blocks long.
Смотрим, что получилось
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 452M 129M 289M 31% /boot /dev/sda3 7,3G 3,6G 3,4G 52% / /dev/mapper/vg--sdb--sdc-lv--var 9,8G 745M 8,6G 8% /var /dev/mapper/vg--sdb--sdc-lv--home 14G 56K 13G 1% /homer /dev/mapper/vg--sdd--sde-lv--backup 2,9G 24K 2,8G 1% /mnt/backup /dev/mapper/vg--sdd--sde-lv--cache 2,0G 24K 1,9G 1% /mnt/cache /dev/mapper/vg--sdd--sde-lv--config 974M 24K 907M 1% /mnt/config
_____________ _____________ _____________ _____________ _____________ _____________ | | | | | | | | | | | | |/dev/sda, 8Гб| |/dev/sdb, 8Гб| |/dev/sdc, 8Гб| |/dev/sdd, 4Гб| |/dev/sde, 2Гб| |/dev/sdf, 8Гб| |_____________| |_____________| |_____________| |_____________| |_____________| |_____________| _ __ ____ _____________________________ _____________________________ _____________ | | | | | | | | | | | | |_| |__| |____| | VG vg-sdb-sdc | | VG vg-sdd-sde | |VG vg-sdb-sdc| |_____________________________| |_____________________________| |_____________| grub, /boot, / _________________ _________ ________ _______ ________ _____ _____ | | | | | | | | | | | | | | | /home, 10Гб | |/var, 6Гб| | backup | | cache | | config | |/var | |/home| |_________________| |_________| |________| |_______| |________| |_____| |_____|
Перемещение физических экстентов
Физические экстенты можно перемещать с одного физического диска на другой. Добавим в группу томов vg-sdb-sdc
еще один диск /dev/sdg
и переместим физические экстенты логического раздела lv-var
с дисков /dev/sdc
и /dev/sdf
на этот диск.
Создаем физический том
$ sudo pvcreate /dev/sdg
Расширяем группу томов
$ sudo vgextend vg-sdb-sdc /dev/sdg
Перемещаем физические экстенты
$ sudo pvmove --name lv-var /dev/sdc /dev/sdg /dev/sdc: Moved: 0,33% /dev/sdc: Moved: 23,24% /dev/sdc: Moved: 73,57% /dev/sdc: Moved: 100,00%
$ sudo pvmove --name lv-var /dev/sdf /dev/sdg Insufficient free space: 1024 extents needed, but only 1023 available Unable to allocate mirror extents for vg-sdb-sdc/pvmove0. Failed to convert pvmove LV to mirrored.
Нужно переместить 1024 экстента, но да диске /dev/sdg
только 1023 свободных. Так что на этом этапе мне пришлось переместить обратно экстенты с /dev/sdg
на /dev/sdc
, удалить диск /dev/sdg
из группы томов и удалить на нем разметку LVM. Потом чуть-чуть увеличить размер виртуального жесткого диска и начать все заново.
$ sudo pvmove --name lv-var /dev/sdg /dev/sdc $ sudo vgreduce vg-sdb-sdc /dev/sdg $ sudo pvremove /dev/sdg
$ sudo pvcreate /dev/sdg $ sudo vgextend vg-sdb-sdc /dev/sdg $ sudo pvmove --name lv-var /dev/sdc /dev/sdg $ sudo pvmove --name lv-var /dev/sdf /dev/sdg
На этот раз все получилось. Теперь можно переместить экстенты логического раздела lv-home
с диска /dev/sdf
на диск /dev/sdc
. Логический раздел lv-home
занимает на диске /dev/sdf
4 Гбайт, а на диске /dev/sdc
есть 6 Гбайт свободного места.
$ sudo pvmove --name lv-home /dev/sdf /dev/sdc /dev/sdf: Moved: 1,08% /dev/sdf: Moved: 100,00%
Давайте расширим логический раздел lv-home
на оба диска /dev/sdb
и /dev/sdc
. Для этого посмотрим, сколько свободных экстентов есть на диске /dev/sdc
. Это то место, которое раньше занимал логический раздел lv-var
— до перемещения на диск /dev/sdg
.
$ sudo pvdisplay --map .......... --- Physical volume --- PV Name /dev/sdc VG Name vg-sdb-sdc PV Size 8,00 GiB / not usable 4,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 2047 Free PE 513 Allocated PE 1534 PV UUID osZk7P-CP9F-LuK1-7i3F-rP1P-Z5t3-eWKio8 --- Physical Segments --- Physical extent 0 to 1022: Logical volume /dev/vg-sdb-sdc/lv-home Logical extents 2558 to 3580 Physical extent 1023 to 1535: FREE Physical extent 1536 to 2046: Logical volume /dev/vg-sdb-sdc/lv-home Logical extents 2047 to 2557 ..........
$ sudo lvextend --extents +513 /dev/vg-sdb-sdc/lv-home /dev/sdc Size of logical volume vg-sdb-sdc/lv-home changed from <13,99 GiB (3581 extents) to 15,99 GiB (4094 extents). Logical volume vg-sdb-sdc/lv-home successfully resized.
Расширяем файловую систему
$ sudo resize2fs /dev/vg-sdb-sdc/lv-home resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/vg-sdb-sdc/lv-home is mounted on /home; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 2 The filesystem on /dev/vg-sdb-sdc/lv-home is now 4192256 (4k) blocks long.
Смотрим, что получилось
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 500M 0 part /boot └─sda3 8:3 0 7,5G 0 part / sdb 8:16 0 8G 0 disk └─vg--sdb--sdc-lv--home 253:2 0 16G 0 lvm /home sdc 8:32 0 8G 0 disk └─vg--sdb--sdc-lv--home 253:2 0 16G 0 lvm /home sdd 8:48 0 4G 0 disk ├─vg--sdd--sde-lv--backup 253:0 0 3G 0 lvm /mnt/backup └─vg--sdd--sde-lv--cache 253:3 0 2G 0 lvm /mnt/cache sde 8:64 0 2G 0 disk ├─vg--sdd--sde-lv--cache 253:3 0 2G 0 lvm /mnt/cache └─vg--sdd--sde-lv--config 253:4 0 1G 0 lvm /mnt/config sdf 8:80 0 8G 0 disk sdg 8:96 0 10,1G 0 disk └─vg--sdb--sdc-lv--var 253:1 0 10G 0 lvm /var
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 452M 129M 289M 31% /boot /dev/sda3 7,3G 3,6G 3,4G 52% / /dev/mapper/vg--sdb--sdc-lv--home 16G 56K 15G 1% /home /dev/mapper/vg--sdd--sde-lv--backup 2,9G 24K 2,8G 1% /mnt/backup /dev/mapper/vg--sdd--sde-lv--cache 2,0G 24K 1,9G 1% /mnt/cache /dev/mapper/vg--sdd--sde-lv--config 974M 24K 907M 1% /mnt/config /dev/mapper/vg--sdb--sdc-lv--var 9,8G 745M 8,6G 8% /var
_____________ _____________ _____________ _____________ _____________ _____________ _____________ | | | | | | | | | | | | | | |/dev/sda, 8Гб| |/dev/sdb, 8Гб| |/dev/sdc, 8Гб| |/dev/sdd, 4Гб| |/dev/sde, 2Гб| |/dev/sdf, 8Гб| |/dev/sdg,10Гб| |_____________| |_____________| |_____________| |_____________| |_____________| |_____________| |_____________| _ __ ____ _____________________________ _____________________________ _____________________________ | | | | | | | | | | | | |_| |__| |____| | VG vg-sdb-sdc | | VG vg-sdd-sde | | VG vg-sdb-sdc | |_____________________________| |_____________________________| |_____________________________| grub, /boot, / _____________________________ ________ _______ ________ _____________ | | | | | | | | | | | /home, 16Гб | | backup | | cache | | config | свободно | /var, 10Гб | |_____________________________| |________| |_______| |________| |_____________|
Удаление физического диска
Такая необходимость не всегда связана с отказами, чаще встречаются ситуации, когда был установлен новый, более емкий диск. Удаляемый диск не должен содержать логических разделов — их следует переместить или удалить. Диск /dev/sdf
мы больше не используем, так что его можно удалить.
Удаляем диск из группы томов
$ sudo vgreduce vg-sdb-sdc /dev/sdf Removed "/dev/sdf" from volume group "vg-sdb-sdc"
Удаляем LVM-разметку с диска
$ sudo pvremove /dev/sdf Labels on physical volume "/dev/sdf" successfully wiped.
Давайте еще удалим диски /dev/sdd
и /dev/sde
— для этого нужно размонтировать логические разделы, удалить эти логические разделы, удалить группу томов, удалить LVM-разметку с дисков. И убрать записи на монтирование из файла /etc/fstab
.
Размонтируем логические разделы
$ sudo umount /mnt/{backup,cache,config}
Удаляем логические разделы
$ sudo lvremove /dev/vg-sdd-sde/lv-{backup,cache,config} Do you really want to remove and DISCARD active logical volume vg-sdd-sde/lv-backup? [y/n]: y Logical volume "lv-backup" successfully removed Do you really want to remove and DISCARD active logical volume vg-sdd-sde/lv-cache? [y/n]: y Logical volume "lv-cache" successfully removed Do you really want to remove and DISCARD active logical volume vg-sdd-sde/lv-config? [y/n]: y Logical volume "lv-config" successfully removed
Удаляем группу томов
$ sudo vgremove vg-sdd-sde Volume group "vg-sdd-sde" successfully removed
Удаляем LVM-разметку с дисков
$ sudo pvremove /dev/sd{d,e} Labels on physical volume "/dev/sdd" successfully wiped. Labels on physical volume "/dev/sde" successfully wiped.
И не забываем удалить записи из файла /etc/fstab
. После чего перезагружаемся и смотрим, что получилось в итоге.
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 500M 0 part /boot └─sda3 8:3 0 7,5G 0 part / sdb 8:16 0 8G 0 disk └─vg--sdb--sdc-lv--home 253:1 0 16G 0 lvm /home sdc 8:32 0 8G 0 disk └─vg--sdb--sdc-lv--home 253:1 0 16G 0 lvm /home sdd 8:48 0 4G 0 disk sde 8:64 0 2G 0 disk sdf 8:80 0 8G 0 disk sdg 8:96 0 10,1G 0 disk └─vg--sdb--sdc-lv--var 253:0 0 10G 0 lvm /var
_____________ _____________ _____________ _____________ _____________ _____________ _____________ | | | | | | | | | | | | | | |/dev/sda, 8Гб| |/dev/sdb, 8Гб| |/dev/sdc, 8Гб| |/dev/sdd, 4Гб| |/dev/sde, 2Гб| |/dev/sdf, 8Гб| |/dev/sdg,10Гб| |_____________| |_____________| |_____________| |_____________| |_____________| |_____________| |_____________| _ __ ____ _____________________________ _____________ | | | | | | | | | | |_| |__| |____| | VG vg-sdb-sdc | |VG vg-sdb-sdc| |_____________________________| |_____________| grub, /boot, / _____________________________ _____________ | | | | | /home, 16Гб | | /var, 10Гб | |_____________________________| |_____________|
Команды pvs, vgs, lvs
Команда pvs
выводит список всех Physical volumes
$ sudo pvs PV VG Fmt Attr PSize PFree /dev/sdb vg-sdb-sdc lvm2 a-- <8,00g 0 /dev/sdc vg-sdb-sdc lvm2 a-- <8,00g 0 /dev/sdg vg-sdb-sdc lvm2 a-- <10,10g 100,00m
Команда vgs
выводит список всех Volume groups
$ sudo vgs VG #PV #LV #SN Attr VSize VFree vg-sdb-sdc 3 2 0 wz--n- <26,09g 100,00m
Команда lvs
выводит список всех Logical volumes
$ sudo lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv-home vg-sdb-sdc -wi-ao---- 15,99g lv-var vg-sdb-sdc -wi-ao---- 10,00g
Команды vgrename и lvrename
Команды позволяют изменить имя Volume group и Logical volume.
$ sudo vgrename vg-sdb-sdc vg-sdb-sdc-sdg Volume group "vg-sdb-sdc" successfully renamed to "vg-sdb-sdc-sdg"
$ sudo lvrename /dev/vg-sdb-sdc-sdg/lv-home lv-home-16gb Renamed "lv-home" to "lv-home-16gb" in volume group "vg-sdb-sdc-sdg"
$ sudo lvrename /dev/vg-sdb-sdc-sdg/lv-var lv-var-10gb Renamed "lv-var" to "lv-var-10gb" in volume group "vg-sdb-sdc-sdg"
$ sudo lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv-home-16gb vg-sdb-sdc-sdg -wi-ao---- 15,99g lv-var-10gb vg-sdb-sdc-sdg -wi-ao---- 10,00g
Поиск: CLI • Linux • Команда • LVM • Volume • Практика • Файловая система • Блочное устройство