Linux: LVM – разделить /root и добавить /home

Автор: | 12/03/2017

Имеется машина с одним диском, который разбит на два LVM-раздела – root и swap:

root@ubuntu:/# lvdisplay -c
  /dev/ubuntu-vg/root:ubuntu-vg:3:1:-1:1:59809792:7301:-1:0:-1:252:0
  /dev/ubuntu-vg/swap_1:ubuntu-vg:3:1:-1:2:2097152:256:-1:0:-1:252:1

Задача: уменьшить root, создать home в отдельном разделе.

Загружаемся с любого LiveCD (тут Arch), логинимся, проверяем разделы:

[simterm]

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  28.5G  0 lvm  
  └─ubuntu--vg-swap_1 254:1    0     1G  0 lvm  
sr0                    11:0    1   476M  0 rom  /run/archiso/bootmnt

[/simterm]

Далее:

  1. уменьшим файловую систему на /root
  2. уменьшим раздел ubuntu--vg-root до 10 гиг
  3. создадим раздел ubuntu--vg-home на всё свободное место
  4. отформатируем его и перенесём данные из старого /home на разделе vg-root в новый хомик
  5. обновим fstab

Устанавливаем lvm2:

[simterm]

# pacman -S lvm2

[/simterm]

Проверяем:

[simterm]

# lvscan 
  ACTIVE            '/dev/ubuntu-vg/root' [28.52 GiB] inherit
  ACTIVE            '/dev/ubuntu-vg/swap_1' [1.00 GiB] inherit
# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 236 Feb 27 09:30 control
lrwxrwxrwx 1 root root       7 Feb 27 09:30 ubuntu--vg-root -> ../dm-0
lrwxrwxrwx 1 root root       7 Feb 27 09:30 ubuntu--vg-swap_1 -> ../dm-1

[/simterm]

Если разделы не активны – дёргаем vgchange:

[simterm]

# vgchange -a y

[/simterm]

vg-root находится на устройстве /dev/dm-0:

[simterm]

[root@archiso ~]# file /dev/dm-0 
/dev/dm-0: block special (254/0)

[/simterm]

Выполняем проверку целостности файловой системы (без этого resize2fs не даст выполнить изменения):

[simterm]

[root@archiso ~]# e2fsck -f /dev/dm-0
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/dm-0: 130010/1872304 files (0.3% non-contiguous), 670621/7476224 blocks

[/simterm]

Уменьшаем ФС:

[simterm]

[root@archiso ~]# resize2fs /dev/mapper/ubuntu--vg-root 10G

[/simterm]

(resize2fs по памяти сюда записал, но вроде верно)

С помощью lvreduce – уменьшаем root:

[simterm]

[root@archiso ~]# lvreduce -L 10G /dev/mapper/ubuntu--vg-root 
  WARNING: Reducing active logical volume to 10.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 28.52 GiB (7301 extents) to 10.00 GiB (2560 extents).
  Logical volume ubuntu-vg/root successfully resized.

[/simterm]

Собственно – тут можно смонтировать раздел, и убедиться что всё на месте:

[simterm]

[root@archiso ~]# mount /dev/mapper/ubuntu--vg-root /mnt/
[root@archiso ~]# ls -l /mnt/
total 104
drwxr-xr-x  2 root root  4096 Feb 27 10:25 bin
drwxr-xr-x  2 root root  4096 Feb 27 10:25 boot
drwxr-xr-x  4 root root  4096 Feb 27 10:25 dev
drwxr-xr-x 89 root root  4096 Feb 27 10:25 etc
drwxr-xr-x  3 root root  4096 Feb 27 10:25 home
lrwxrwxrwx  1 root root    32 Mar  8  2017 initrd.img -> boot/initrd.img-4.4.0-66-generic
lrwxrwxrwx  1 root root    32 Feb 25 02:01 initrd.img.old -> boot/initrd.img-4.4.0-64-generic
drwxr-xr-x 22 root root  4096 Feb 27 10:25 lib
drwxr-xr-x  2 root root  4096 Feb 27 10:25 lib64
drwx------  2 root root 16384 Feb 24 14:27 lost+found
...

[/simterm]

Размер раздела:

[simterm]

[root@archiso ~]# df -h
Filesystem                   Size  Used Avail Use% Mounted on
dev                          479M     0  479M   0% /dev
run                          499M   89M  411M  18% /run
/dev/sr0                     476M  476M     0 100% /run/archiso/bootmnt
cowspace                     256M  101M  156M  40% /run/archiso/cowspace
/dev/loop0                   366M  366M     0 100% /run/archiso/sfs/airootfs
airootfs                     256M  101M  156M  40% /
tmpfs                        499M     0  499M   0% /dev/shm
tmpfs                        499M     0  499M   0% /sys/fs/cgroup
tmpfs                        499M     0  499M   0% /tmp
tmpfs                        499M  1.3M  498M   1% /etc/pacman.d/gnupg
tmpfs                        100M     0  100M   0% /run/user/0
/dev/mapper/ubuntu--vg-root  9.8G  2.0G  7.3G  22% /mnt

[/simterm]

Проверяем разделы:

[simterm]

[root@archiso ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               ubuntu-vg
  PV Size               29.52 GiB / not usable 2.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              7557
  Free PE               4741
  Allocated PE          2816
  PV UUID               lznlIM-pUlN-l0Hc-rERJ-TT8p-uxV2-F19F8H
[root@archiso ~]# fdisk /dev/sda

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 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
Disklabel type: dos
Disk identifier: 0x05bb6332

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048   999423   997376  487M 83 Linux
/dev/sda2       1001470 62912511 61911042 29.5G  5 Extended
/dev/sda5       1001472 62912511 61911040 29.5G 8e Linux LVM

[/simterm]

Тут /dev/sda5 – наш physical volume, который содержит volume group ubuntu-vg:

[simterm]

[root@archiso ~]# lvdisplay ubuntu-vg
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/root
  LV Name                root
  VG Name                ubuntu-vg
  LV UUID                05GNA5-V6Wk-kywP-IrZX-Ek7v-8CvV-1ZqOwR
  LV Write Access        read/write
  LV Creation host, time ubuntu, 2017-02-24 14:27:07 +0000
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0
   
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/swap_1
  LV Name                swap_1
  VG Name                ubuntu-vg
  LV UUID                KHyywu-k8UI-MVFf-Z6Wq-h2Ra-fWdo-RCRqSC
  LV Write Access        read/write
  LV Creation host, time ubuntu, 2017-02-24 14:27:07 +0000
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1

[/simterm]

В группе ubuntu-vg создаём logical volume для будущего home:

[simterm]

[root@archiso ~]# lvcreate -l 100%FREE -n home ubuntu-vg
  Logical volume "home" created.

[/simterm]

Проверяем:

[simterm]

[root@archiso ~]# lvdisplay -c
  /dev/ubuntu-vg/root:ubuntu-vg:3:1:-1:1:20971520:2560:-1:0:-1:254:0
  /dev/ubuntu-vg/swap_1:ubuntu-vg:3:1:-1:0:2097152:256:-1:0:-1:254:1
  /dev/ubuntu-vg/home:ubuntu-vg:3:1:-1:0:38838272:4741:-1:0:-1:254:2

[/simterm]

Создаём ФС:

[simterm]

[root@archiso ~]# mkfs.ext4 /dev/ubuntu-vg/home 
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 4854784 4k blocks and 1215840 inodes
Filesystem UUID: 62b8a624-9b90-4c68-aaa6-15f274c25eff
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[/simterm]

Отмонтируем root, и монтируем два раздела обратно:

[simterm]

# umount /dev/mapper/ubuntu--vg-root
[root@archiso ~]# mkdir /mnt/home
[root@archiso ~]# mount /dev/ubuntu-vg/root /mnt/
[root@archiso ~]# mount /dev/ubuntu-vg/home /mnt/home/

[/simterm]

Упс… А данные переносить?

Монтируем home  в другой каталог:

[simterm]

[root@archiso ~]# umount /dev/ubuntu-vg/home 
[root@archiso ~]# ls -l /mnt/home/
total 4
drwxr-xr-x 3 1000 1000 4096 Feb 27 10:25 jageradmin
[root@archiso ~]# mkdir /homenew
[root@archiso ~]# mount /dev/ubuntu-vg/home /homenew/

[/simterm]

Копируем данные:

[simterm]

[root@archiso ~]# cp -r /mnt/home/* /homenew/
[root@archiso ~]# ls -l /homenew/
total 20
drwxr-xr-x 3 root root  4096 Feb 27 10:47 jageradmin
drwx------ 2 root root 16384 Feb 27 10:42 lost+found

[/simterm]

Перемонтируем заново:

[simterm]

[root@archiso ~]# umount /dev/ubuntu-vg/home 
[root@archiso ~]# mount /dev/ubuntu-vg/home /mnt/home/
[root@archiso ~]# ls -l /mnt/home/
total 20
drwxr-xr-x 3 root root  4096 Feb 27 10:47 jageradmin
drwx------ 2 root root 16384 Feb 27 10:42 lost+found

[/simterm]

Последний шаг – обновить /etc/fstab на старом разделе, что бы он примонтировал home с другого раздела.

Сейчас он выглядит так:

[simterm]

[root@archiso ~]# cat /mnt/etc/fstab  | grep -v \#
/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1
UUID=802aaac0-73a7-48e5-9e56-0debc61e0ca6 /boot           ext2    defaults        0       2
/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0

[/simterm]

В конец файла добавляем:

...
# new home
/dev/mapper/ubuntu--vg-home /home               ext4    errors=remount-ro 0       2

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

[simterm]

setevoy@ubuntu:/$ ls -l /home/
total 20
drwxr-xr-x 3 root root  4096 Feb 27 12:47 jageradmin
drwx------ 2 root root 16384 Feb 27 12:42 lost+found
setevoy@ubuntu:/$ ls -l /home/jageradmin/
total 0
setevoy@ubuntu:/$ mount | grep vg
/dev/mapper/ubuntu--vg-root on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/mapper/ubuntu--vg-home on /home type ext4 (rw,relatime,errors=remount-ro,data=ordered)

[/simterm]

Готово.