У нас есть виртуальная машина на VMware, на ней есть диск. Диск большой, данных мало. Наша задача - сделать диск меньшего размера. На борту Logical Volume Manager (LVM). Gparted не умеет переносить данные на LVM разделах. Будем делать всё руками.
раскрыть
1. Остановка процессов на сервере.
2. Создаём клон виртуалки. Вдруг мы всё запорем - возрадуемся бэкапу как родному.
3. Пока создаётся клон рассчитаем место, которое нужно оставить на дисках.
df -h
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_smartfe00-lv_root 50G 15G 33G 30% /tmpfs 7.8G 0 7.8G 0% /dev/shm /dev/sda2 477M 104M 348M 23% /boot /dev/sda1 197M 253K 197M 1% /boot/efi /dev/mapper/vg_smartfe00-lv_home 211G 11G 190G 6% /home
lv_root уменьшим с 50G до 30G
lv_home уменьшим с 211G до 25G
4. Выключить ось.
5. Переключить UEFI на BIOS.
6. Переключить vlan на PXE или вставляем образ Resque CD или GParted Live
7. Загрузиться с Resque CD.
8. Через gparted убеждаемся в том, что /dev/sdb активен (не обязательно).
9. Уменьшаем размеры файловых систем, уменьшаем логические разделы, сдвигаем данные к началу диска, уменьшаем физический раздел.
Список групп:
vgdisplay
Список логических томов:
lvdisplay
Список дисков
pvdisplay
Ресайзим root до 30 Гб:
e2fsck -f /dev/mapper/vg_smartfe00-lv_home
resise2fs /dev/mapper/vg_smartfe01-lv_root 30G
Ресайзим home до 25 Гб:
e2fsck -f /dev/mapper/vg_smartfe00-lv_home
resise2fs /dev/mapper/vg_smartfe01-lv_home 25G
Уменьшаем размер логических томов:
lvreduce -L 30G /dev/mapper/vg_smartfe01-lv_root
lvreduce -L 25G /dev/mapper/vg_smartfe01-lv_home
Далее все сегменты вычисляем на калькуляторе для каждого сервера! Смысл в том, чтобы перемещать сегменты только на пустое место.
Список сегментов:
pvs -v --segments /dev/sdb1
Включаем мозг, понимаем куда двигать home и сдвигаем его подальше:
pvmove --alloc anywhere /dev/sdb1:12800-19199
Снова смотрим список сегментов:
pvs -v --segments /dev/sdb1
Двигаем home вплотную к root:
vmove --alloc anywhere /dev/sdb1:19200-25599 /dev/sdb1:7680-14079
Двигаем swap вплотную к home:
pvmove --alloc anywhere /dev/sdb1:67083-71110 /dev/sdb1:14080-18107
Дальше запускаем gparted и работаем через него.
gparted - деактивируем /dev/sdb
gparted - ресайзим /dev/sdb1
10. Смотрим инфо получившегося /dev/sdb1 - total sector 148350848.
Вычисляем размер нового диска 148350848*512/1024/1024=72436,9375 Мб
Новый диск будем делать 72438 Мб, это в три раза меньше того, что было.
11. Выключаем ось.
12. Добавляем через vCenter новый диск на 72438 Мб.
13. Снова загружаемся через Resque CD.
14. gparted на /dec/sdc делаем device - create partition table.
15. gparted на /dev/sdc делаем новый раздел /dev/sdc1 в файловой системе lvm2 pv
16. Проверяем через инфо, чтобы количество секторов на /dev/sdc1 (148350976) было не меньше чем на /dev/sdb1 (148350848).
17. Расширяем группу:
vgextend vg_smartfe00 /dev/sdc1
18. Мувим диск с /dev/sdb1 на /dev/sdc1:
pvmove /dev/sdb1 /dev/sdc1
19. Исключаем из группы /dev/sdb1:
vgreduce vg_smartfe00 /dev/sdb1
20. gparted - деактивируем диск /dev/sdc1.
21. gparted - check диска /dev/sdc1 - дополнительно раздел расширяется до полного объёма.
22. Выключаем ось.
23. Удаляем ненужный более диск через vCenter.
24. Переключаем BIOS обратно на EFI.
25. Переключаем vlan на боевой, если ранее переключались на PXE.
26. Включаем тачку.
Это все шаги, необходимые для изменения размера раздела LVM или LVM2.
These are all the steps required to resize a LVM or LVM2 partition
sudo lvresize --verbose --resizefs -L -150G /dev/ubuntu/root
sudo pvresize --setphysicalvolumesize {any size here} /dev/sda5
/dev/sda5: cannot resize to xxxxx extents as later ones are allocated.
You have to rearrange the unallocated space at the end of the LVM. That means after root and swap_1 partition. So, you need to move that free space using the command below
pvs -v --segments /dev/sda5
This will show the output like below
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g 0 xxx root 0 linear /dev/sda:0-xxx
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx yyyy 0 free
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyyy end swap 0 linear /dev/sda5:yyyy-end
Now use the command below to remove external fragmentation -
sudo pvmove --alloc anywhere /dev/sda5:yyyy-end
Now let us see how it goes -
pvs -v --segments /dev/sda5
This will show the output like below
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g 0 xxx root 0 linear /dev/sda:0-xxx
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx yyyy swap 0 linear /dev/sda5:xxx-yyyy
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyyy end 0 free
After that use the gparted and resize the LVM to maximum used area and rest will be in unallocated space.
https://internet-lab.ru/lvm_resize
Увеличение LVM томов Debian 8.3 (на виртуальной машине Hyper-V)