Linux: LVM – уменьшить home, увеличить root

By | 03/18/2017
 

Сначала – выполню на виртуалке (всегда советую так делать), но наоборот – тут надо уменьшить root, а потом увеличить home.

Имеется машина с тремя разделами LVM:

root@archiso ~ # lsblk 
NAME                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                   7:0    0 365.4M  1 loop /run/archiso/sfs/airootfs
sda                     8:0    0    30G  0 disk 
├─sda1                  8:1    0   487M  0 part 
├─sda2                  8:2    0     1K  0 part 
└─sda5                  8:5    0  29.5G  0 part 
  ├─ubuntu--vg-root   254:0    0    10G  0 lvm  
  ├─ubuntu--vg-swap_1 254:1    0     1G  0 lvm  
  └─ubuntu--vg-home   254:2    0  18.5G  0 lvm  
sr0                    11:0    1   476M  0 rom  /run/archiso/bootmnt

Задача – уменьшить ubuntu--vg-root, а на освободившееся место – увеличить ubuntu--vg-home.

Система Ubuntu, машина сейчас запущена под Arch.

Проверяем разделы, все должны быть ACTIVE:

[root@archiso ~]# lvscan
ACTIVE            '/dev/ubuntu-vg/root' [10.00 GiB] inherit
ACTIVE            '/dev/ubuntu-vg/swap_1' [1.00 GiB] inherit
ACTIVE            '/dev/ubuntu-vg/home' [18.52 GiB] inherit

/root

Начнём с root.

Порядок действий:

  1. уменьшить размер файловой системы
  2. уменьшить раздел logical volume

Важно не перепутать порядок действий. Один раз сонный делал такие изменения – убил раздел, к счастью – тоже на витуалке.

Проверяем целостность ФС:

[root@archiso ~]# e2fsck -f /dev/ubuntu-vg/root
e2fsck 1.43.4 (31-Jan-2017)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/ubuntu-vg/root: 97684/654080 files (0.2% non-contiguous), 506679/2621440 blocks

Уменьшаем размер файловой системы до 5 GB:

[root@archiso ~]# resize2fs /dev/ubuntu-vg/root 5G
resize2fs 1.43.4 (31-Jan-2017)
Resizing the filesystem on /dev/ubuntu-vg/root to 1310720 (4k) blocks.
The filesystem on /dev/ubuntu-vg/root is now 1310720 (4k) blocks long.

Уменьшаем размер тома до 5gb:

[root@archiso ~]# lvreduce -L 5G /dev/ubuntu-vg/root
WARNING: Reducing active logical volume to 5.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce ubuntu-vg/root? [y/n]: y
Size of logical volume ubuntu-vg/root changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
Logical volume ubuntu-vg/root successfully resized.

Проверяем:

[root@archiso ~]# lsblk /dev/sda5
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda5                  8:5    0 29.5G  0 part
├─ubuntu--vg-root   254:0    0    5G  0 lvm
├─ubuntu--vg-swap_1 254:1    0    1G  0 lvm
└─ubuntu--vg-home   254:2    0 18.5G  0 lvm

/home

С помощью lvextend – увеличиваем размер ubuntu--vg-home на 5G:

[root@archiso ~]# lvextend -L +5G /dev/ubuntu-vg/home
Size of logical volume ubuntu-vg/home changed from 18.52 GiB (4741 extents) to 23.52 GiB (6021 extents).
Logical volume ubuntu-vg/home successfully resized.

Проверяем ФС:

[root@archiso ~]# e2fsck -f /dev/ubuntu-vg/home
e2fsck 1.43.4 (31-Jan-2017)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/ubuntu-vg/home: 11/1215840 files (0.0% non-contiguous), 120370/4854784 blocks

И выполняем resize. Не укзываем размер, что бы занять 100% свободного места:

[root@archiso ~]# resize2fs -p /dev/ubuntu-vg/home
resize2fs 1.43.4 (31-Jan-2017)
Resizing the filesystem on /dev/ubuntu-vg/home to 6165504 (4k) blocks.
Begin pass 1 (max = 40)
Extending the inode table     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-
The filesystem on /dev/ubuntu-vg/home is now 6165504 (4k) blocks long.

Проверяем:

[root@archiso ~]#  /dev/sda5
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda5                  8:5    0 29.5G  0 part
├─ubuntu--vg-root   254:0    0    5G  0 lvm
├─ubuntu--vg-swap_1 254:1    0    1G  0 lvm
└─ubuntu--vg-home   254:2    0 23.5G  0 lvm

Бутаемся в Ubuntu и проверяем:

jmadmin@ubuntu:/$ lsblk  /dev/sda5
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda5                  8:5    0 29.5G  0 part
├─ubuntu--vg-root   252:0    0    5G  0 lvm  /
├─ubuntu--vg-swap_1 252:1    0    1G  0 lvm  [SWAP]
└─ubuntu--vg-home   252:2    0 23.5G  0 lvm  /home

Готово.

А теперь – повторяем это на рабочей машине с Arch Linux, без бекапа 🙂

Нет, основное всё бекапится в AWS S3 скриптом, но будет неприятно убить домашний раздел. Или корневой.

Загружаемся с флешки с Arch-ISO, проверяем разделы:

[root@archiso ~]# lvscan
ACTIVE            '/dev/vg_arch/root' [10.00 GiB] inherit
ACTIVE            '/dev/vg_arch/home' [437.76 GiB] inherit

Дальнейшие шаги:

  1. уменьшить файловую систему home до 400 гб
  2. уменьшить home logical volume до 400 гб
  3. увеличить logical volume root на 100% освободившегося места
  4. увеличить файловую систему root на 100% освободившегося места

Начинаем с /dev/vg_arch/home:

[root@archiso ~]# e2fsck -f /dev/vg_arch/home
e2fsck 1.43.4 (31-Jan-2017)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg_arch/home: 869974/28696576 files (0.3% non-contiguous), 49206901/114755584 blocks

Уменьшаем размер до 400 гб:

[root@archiso ~]# resize2fs /dev/vg_arch/home 400G
resize2fs 1.43.4 (31-Jan-2017)
Resizing the filesystem on /dev/vg_arch/home to 104857600 (4k) blocks.
The filesystem on /dev/vg_arch/home is now 104857600 (4k) blocks long.

Уменьшаем размер LV до 400 гб:

[root@archiso ~]# lvreduce -L 400G /dev/vg_arch/home
WARNING: Reducing active logical volume to 400.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_arch/home? [y/n]: y
Size of logical volume vg_arch/home changed from 437.76 GiB (112066 extents) to 400.00 GiB (102400 extents).
Logical volume vg_arch/home successfully resized.

Монтируем, проверяем:

[root@archiso ~]# mount /dev/vg_arch/home /mnt/
[root@archiso ~]# ls -l /mnt/setevoy/
total 88
-rw-r--r--  1 1000 1000  3288 Mar 18 09:39  1
drwxrwxr-x 11 1000 1000  4096 Mar 17 10:01  Backups
drwxr-xr-x  2 1000 1000  4096 Feb 27 12:19  bin
drwxrwxr-x  3 1000 1000  4096 Dec 21 11:06  Books
drwxr-xr-x  2 1000 1000  4096 Dec 27 16:10  Desktop
drwxr-xr-x  4 1000 1000  4096 Dec 21 10:56  Documents
drwxr-xr-x  4 1000 1000  4096 Mar 17 12:35  Downloads
drwx------ 38 1000 1000  4096 Mar 18 09:14  Dropbox
drwxr-xr-x  3 1000 1000  4096 Feb  8 09:21  KeyPass
drwxr-xr-x  3 1000 1000  4096 Feb 28 12:36  lib
drwxr-xr-x 56 1000 1000  4096 Dec 21 10:56  Music
drwxr-xr-x  3 1000 1000  4096 Mar  8 11:52  OS
drwxr-xr-x 18 1000 1000 20480 Mar 18 08:12  Pictures
drwxr-xr-x  3 1000 1000  4096 Dec 23 12:21  PycharmProjects
drwxr-xr-x  3 1000 1000  4096 Mar  6 11:49  Scripts
drwxr-xr-x  8 1000 1000  4096 Feb 23 14:40  Temp
drwxr-xr-x  6 1000 1000  4096 Mar 18 12:16 'VirtualBox VMs'
drwxr-xr-x  4 1000 1000  4096 Dec 26 15:59  Work

Всё на месте.

Переходим к root:

[root@archiso ~]# e2fsck -f /dev/vg_arch/root
e2fsck 1.43.4 (31-Jan-2017)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found.  Create<y>? yes
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg_arch/root: ***** FILE SYSTEM WAS MODIFIED *****

Увеличиваем LV на 100%:

[root@archiso ~]# lvextend -l +100%FREE /dev/vg_arch/root
Size of logical volume vg_arch/root changed from 10.00 GiB (2560 extents) to 47.76 GiB (12226 extents).
Logical volume vg_arch/root successfully resized.

Проверяем:

[root@archiso ~]# lvdisplay /dev/vg_arch/root
--- Logical volume ---
LV Path                /dev/vg_arch/root
LV Name                root
VG Name                vg_arch
LV UUID                hOB0M9-dFy4-C0wI-Brwe-faqp-5wZr-tzkQFk
LV Write Access        read/write
LV Creation host, time archiso, 2016-12-21 09:29:33 +0000
LV Status              available
open                 0
LV Size                47.76 GiB

Увеличиваем ФС root на 100% (просто не указываем resize2fs размер):

[root@archiso ~]# resize2fs -p /dev/vg_arch/root
resize2fs 1.43.4 (31-Jan-2017)
Resizing the filesystem on /dev/vg_arch/root to 12519424 (4k) blocks.
Begin pass 1 (max = 303)
Extending the inode table     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/vg_arch/root is now 12519424 (4k) blocks long.

Отмонтируем home, монтируем root, проверяем:

[root@archiso ~]# umount /dev/vg_arch/home
[root@archiso ~]# mount /dev/vg_arch/root /mnt/
[root@archiso ~]# ls -l /mnt/
total 60
lrwxrwxrwx  1 root root    7 Dec  5 23:43 bin -> usr/bin
drwxr-xr-x  2 root root 4096 Dec 21 09:33 boot
drwxr-xr-x  2 root root 4096 Dec 22 12:27 dev
drwxr-xr-x 75 root root 4096 Mar 18 09:13 etc
drwxr-xr-x  2 root root 4096 Dec 22 12:25 home
lrwxrwxrwx  1 root root    7 Dec  5 23:43 lib -> usr/lib
lrwxrwxrwx  1 root root    7 Dec  5 23:43 lib64 -> usr/lib
drwx------  2 root root 4096 Mar 18 13:13 lost+found
drwxr-xr-x  2 root root 4096 Dec  5 23:43 mnt
drwxr-xr-x  7 root root 4096 Mar 15 08:27 opt
dr-xr-xr-x  2 root root 4096 Dec 22 12:27 proc
drwxr-x--- 10 root root 4096 Mar  1 10:15 root
drwxr-xr-x  2 root root 4096 Dec 22 12:27 run
lrwxrwxrwx  1 root root    7 Dec  5 23:43 sbin -> usr/bin
drwxr-xr-x  4 root root 4096 Dec  5 23:43 srv
dr-xr-xr-x  2 root root 4096 Dec 22 12:27 sys
drwxrwxrwt  2 root root 4096 Dec 22 12:27 tmp
drwxr-xr-x 10 root root 4096 Mar 17 12:41 usr
drwxr-xr-x 12 root root 4096 Dec 22 12:36 var

И тут всё ОК.

Перезагружаемся, проверяем:

[root@archiso ~]# umount /dev/vg_arch/root
[root@archiso ~]# reboot

Готово: