Tạo và quản lý LVM trong Linux Image Tạo và quản lý LVM trong Linux

Bài viết này giới thiệu với các bạn cách tạo và quản lý LVM trong hệ điều hành Linux giúp các bạn có thể tự học Linux dễ dàng.

1. Logical Volume Management

Logical Volume Management (LVM) đã có sẵn trên hầu hết trên các bản phân phối Linux, có nhiều lợi thế so với quản lý phân vùng truyền thống. Logical Volume Management được sử dụng để tạo nhiều ổ đĩa logic. Nó cho phép các bộ phận logic được thay đổi kích thước (giảm hoặc tăng) theo ý muốn của người quản trị.

Cấu trúc của LVM bao gồm:

  • Một hoặc nhiều đĩa cứng hoặc phân vùng được định cấu hình là physical volume(PV).
  • Một volume group(VG) được tạo bằng cách sử dụng một hoặc nhiều khối vật lý.
  • Nhiều logical volume có thể được tạo trong một volume group.

2. Các bước để quản lý và tạo LVM bằng các lệnh vgcreate, lvcreate và lvextend

2.1. Tạo Physical Volume, Volume Group, và Logical Volume

2.1.1. Tạo Physical Volume

Chạy lệnh sau để tạo physical volume(PV) trên /dev/sdb, /dev/sdc, và /dev/sdd

[root@localhost ~]# pvcreate /dev/sdb /dev/sdc /dev/sdd
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.

Để liệt kê các physical volume(PV) mới được tạo, chạy như sau:

[root@localhost ~]# pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/sda2  cl lvm2 a--  <19.00g     0
  /dev/sdb      lvm2 ---   10.00g 10.00g
  /dev/sdc      lvm2 ---   10.00g 10.00g
  /dev/sdd      lvm2 ---   10.00g 10.00g

Ý nghĩa các trường của pvs:

  • PV: Đĩa được sử dụng
  • PFree: Kích thước đĩa vật lý (Kích thước PV)

Để có được thông tin chi tiết về mỗi physical volume(PV), sử dụng lệnh sau: pvdisplay

Xem thông tin chi tiết về physical volume(PV) /dev/sdb. Chúng ta thực hiện như sau:

[root@localhost ~]# pvdisplay /dev/sdb
  "/dev/sdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               sprsx7-glR2-P7w3-40FG-Fzey-ad57-VTGhA2

Tương tự cho /dev/sdc/dev/sdd:

[root@localhost ~]# pvdisplay /dev/sdc
  "/dev/sdc" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               HBbxa9-pepX-Dr5z-B4fJ-lTSb-JcfV-me7Wwo
[root@localhost ~]# pvdisplay /dev/sdd
  "/dev/sdd" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd
  VG Name
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               7cGgRT-DVBS-Kz0x-LIiB-qzN8-bvxl-HYxKdl

Lưu ý: Nếu chúng ta có 2 ổ đĩa hay nhiều ổ đĩa để tạo một volume mà một đĩa ở volume bị mất thì dẫn tới volume đó mất luôn, vì thế phải chạy LVM trên RAID hoặc dùng tính năng RAID của LVM để có khả năng dung lỗi.

2.1.2. Tạo Volume Group

Để tạo volume group với tên vg0 bằng cách sử dụng /dev/sdb/dev/sdc. Chúng ta thực hiện như sau:

[root@localhost ~]# vgcreate vg0 /dev/sdb /dev/sdc
  Volume group "vg0" successfully created

Thực hiện lệnh sau để xem thông tin volume group vừa tạo:

[root@localhost ~]# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               3M10Re-sNdU-3UGY-h4WO-IXV1-pOW7-NUBOBC

vg0 chứa hai đĩa 10GB nên VG Size = 19.99GB

Ý nghĩa các thông tin của Volume group khi chạy lệnh vgdisplay:

  • VG Name: Tên Volume Group.
  • Format: Kiến trúc LVM được sử dụng.
  • VG Access: Volume Group có thể đọc và viết và sẵn sàng để sử dụng.
  • VG Status: Volume Group có thể được định cỡ lại, chúng ta có thể mở rộng thêm nếu cần thêm dung lượng.
  • PE Size: Mở rộng Physical, Kích thước cho đĩa có thể được xác định bằng kích thước PE hoặc GB, 4MB là kích thước PE mặc định của LVM
  • Total PE: Dung lượng Volume Group có
  • Alloc PE: Tổng PE đã sử dụng
  • Free PE: Tổng PE chưa được sử dụng

Chúng ta có thể kiểm tra số lượng physical volume(PV) dùng để tạo volume group như sau:

[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  cl     1   2   0 wz--n- <19.00g     0
  vg0   2   0   0 wz--n-  19.99g 19.99g

Trong đó:

  • VG: Tên Volume Group
  • #PV: Physical Volume sử dụng trong Volume Group
  • VFree: Hiển thị không gian trống có sẵn trong Volume Group
  • VSize: Tổng kích thước của Volume Group
  • #LV: Logical Volume nằm trong volume group
  • #SN: Số lượng Snapshot của volume group
  • Attr: Trạng thái của Volume group có thể ghi, có thể đọc, có thể thay đổi,

Khi tạo ra các logical volume, chúng ta cần phải xem xét dung lượng khi tạo logical volume sau cho phù hợp với nhu cầu sử dụng.

2.1.3. Tạo Logical Volume

Chúng ta sẽ tạo 2 logical volume với tên projects có dung lượng là 10GB và backups sử dụng toàn bộ dung lượng còn lại của volume group. Chúng ta chạy lệnh sau:

[root@localhost ~]# lvcreate -n projects -L 10G vg0
  Logical volume "projects" created.
[root@localhost ~]# lvcreate -n backups -l 100%FREE vg0
  Logical volume "backups" created.

Trong đó:

  • -n: Sử dụng chỉ ra tên của logical volume cần tạo.
  • -L: Sử dụng chỉ một kích thước cố định.
  • -l: Sử dụng chỉ phần trăm của không gian còn lại trong volume group.

Chạy lệnh sau để xem danh sách logical volume vừa được tạo:

[root@localhost ~]# lvs
  LV           VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root         cl   -wi-ao---- <17.00g
  swap         cl   -wi-a-----   2.00g
  backups      vg0  -wi-a-----   9.99g
  projects     vg0  -wi-a-----  10.00g

Ý nghĩa các trường của lvs:

  • LV: Tên logical volume
  • %Data: Phần trăm dung lượng logical volume được sử dụng
  • Lsize: Kích thước của logical volume

Sử dụng lệnh sau để hiển thị thông tin chi tiết của các logical volume:

[root@localhost ~]# lvdisplay vg0/projects
  --- Logical volume ---
  LV Path                /dev/vg0/projects
  LV Name                projects
  VG Name                vg0
  LV UUID                zGbCrQ-FyrO-EjPu-cE5N-7JmQ-ECxt-kJuuFJ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-04-14 20:14:30 +0700
  LV Status              available
  # open                 0
  LV Size                10.00 GiB
  Current LE             2560
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

[root@localhost ~]# lvdisplay vg0/backups
  --- Logical volume ---
  LV Path                /dev/vg0/backups
  LV Name                backups
  VG Name                vg0
  LV UUID                Hdk7t7-OyYj-q5gn-kNla-1cM5-rDCH-6FCmph
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-04-14 20:14:41 +0700
  LV Status              available
  # open                 0
  LV Size                9.99 GiB
  Current LE             2558
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

Chúng tôi sẽ sử dụng file system ext4 vì nó cho phép chúng ta tăng và giảm kích thước của mỗi logical volume (với file system xfs chỉ cho phép tăng kích thước). Chúng ta thực hiện như sau:

[root@localhost ~]# mkfs.ext4 /dev/vg0/projects
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

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

[root@localhost ~]# mkfs.ext4 /dev/vg0/backups
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2619392 blocks
130969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

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

2.2. Mở rộng Volume Group và thay đổi kích thước các Logical Volume

Trong ví dụ dưới đây chúng ta sẽ thêm một physical volume có tên /dev/sdd với kích thước 10GB vào volume group vg0, sau đó chúng ta sẽ tăng kích thước của logical volume /projects lên 10GB thực hiện như sau:

Chạy các lệnh sau để tạo điểm gắn kết:

[root@localhost ~]# mkdir /projects
[root@localhost ~]# mkdir /backups

Chạy lệnh sau để mount:

[root@localhost ~]# mount /dev/vg0/projects /projects/
[root@localhost ~]# mount /dev/vg0/backups /backups/

Chạy lệnh sau kiểm tra sử dụng không gian đĩa hệ thống tập tin:

[root@localhost ~]# df -TH
Filesystem               Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root      xfs        19G  1.1G   18G   6% /
devtmpfs                 devtmpfs  501M     0  501M   0% /dev
tmpfs                    tmpfs     512M     0  512M   0% /dev/shm
tmpfs                    tmpfs     512M  7.1M  505M   2% /run
tmpfs                    tmpfs     512M     0  512M   0% /sys/fs/cgroup
/dev/sda1                xfs       1.1G  145M  919M  14% /boot
tmpfs                    tmpfs     103M     0  103M   0% /run/user/0
/dev/mapper/vg0-projects ext4      11G   38M   9.9G   1% /projects
/dev/mapper/vg0-backups  ext4      11G   38M   9.9G   1% /backups

Sử dụng lệnh sau để thêm /dev/sdd vào volume group vg0:

[root@localhost ~]# vgextend vg0 /dev/sdd
  Volume group "vg0" successfully extended

Chúng ta chạy lệnh vgdisplay vg0 trước và sau khi thực hiện lệnh vgextend vg0 /dev/sdd, bạn sẽ thấy sự tăng kích thước của volume group(VG):

Trước khi chạy lệnh vgextend vg0 /dev/sdd

[root@localhost ~]# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       5118 / 19.99 GiB
  Free  PE / Size       0 / 0
  VG UUID               3M10Re-sNdU-3UGY-h4WO-IXV1-pOW7-NUBOBC

Sau khi chạy lệnh vgextend vg0 /dev/sdd

[root@localhost ~]# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  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               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <29.99 GiB
  PE Size               4.00 MiB
  Total PE              7677
  Alloc PE / Size       5118 / 19.99 GiB
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               3M10Re-sNdU-3UGY-h4WO-IXV1-pOW7-NUBOBC

Qua lệnh kiểm tra trên chúng ta thấy dung lượng thêm vào của chúng ta là 10GB chúng ta có thể tăng kích thước của logical volume /projects lên 10GB thực hiện như sau:

[root@localhost ~]# lvextend -l +2000 /dev/vg0/projects
  Size of logical volume vg0/projects changed from 10.00 GiB (1920 extents) to 17.81 GiB (4560 extents).
  Logical volume vg0/projects successfully resized.

Sau khi chạy lệnh trên chúng ta cần thay đổi kích thước hệ thống tệp, vì thế chúng ta phải chạy lệnh sau để resize:

  • Đối với file system (ext2, ext3, ext 4): resize2fs
  • Đối với file system (xfs): xfs_growfs

    [root@localhost ~]# resize2fs /dev/vg0/projects
    resize2fs 1.42.9 (28-Dec-2013)
    Filesystem at /dev/vg0/projects is mounted on /projects; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 2
    The filesystem on /dev/vg0/projects is now 4669440 blocks long.
    
    [root@localhost ~]# df -TH
    Filesystem               Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root      xfs        19G  1.1G   18G   6% /
    devtmpfs                 devtmpfs  501M     0  501M   0% /dev
    tmpfs                    tmpfs     512M     0  512M   0% /dev/shm
    tmpfs                    tmpfs     512M  7.1M  505M   2% /run
    tmpfs                    tmpfs     512M     0  512M   0% /sys/fs/cgroup
    /dev/sda1                xfs       1.1G  145M  919M  14% /boot
    tmpfs                    tmpfs     103M     0  103M   0% /run/user/0
    /dev/mapper/vg0-projects ext4       19G   47M   18G   1% /projects
    /dev/mapper/vg0-backups   ext4       11G   38M  9.9G   1% /backups
    

2.3. Giảm kích cỡ Logical Volume

Khi chúng ta muốn giảm dung lượng các Logical Volume. Chúng ta cần phải chú ý vì nó rất quan trọng và có thể bị lỗi trong khi chúng ta giảm dung lượng Logical Volume. Để đảm bảo an toàn khi giảm Logical Volume cần thực hiện các bước sau:

  • Trước khi bắt đầu, cần sao lưu dữ liệu vì vậy sẽ không phải đau đầu nếu có sự cố xảy ra.
  • Để giảm dung lượng Logical Volume, cần thực hiện đầy đủ và cẩn thận 5 bước cần thiết.
  • Khi giảm dung lượng Logical Volume chúng ta phải ngắt kết nối hệ thống tệp trước khi giảm.

Cần thực hiện cẩn thận 5 bước dưới đây:

  • Ngắt kết nối file system.
  • Kiểm tra file system sau khi ngắt kết nối.
  • Giảm file system.
  • Giảm kích thước Logical Volume hơn kích thước hiện tại.
  • Kiểm tra lỗi cho file system.
  • Mount lại file system và kiểm tra kích thước của nó.

Ví dụ: Giảm Logical Volume có tên project với kích thước từ 17.81GB giảm xuống còn 10GB mà không làm mất dữ liệu. Chúng ta thực hiện các bước như sau:

Kiểm tra dung lượng của Logical Volume và kiểm tra file system trước khi thực hiện giảm:

[root@localhost ~]# lvs
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cl  -wi-ao---- 17.00g
  swap     cl  -wi-ao----  2.00g
  backups  vg0 -wi-ao---- 10.00g
  projects vg0 -wi-ao---- 17.81g
[root@localhost ~]# df -TH
Filesystem               Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root      xfs        19G  6.8G   12G  37% /
devtmpfs                 devtmpfs  501M     0  501M   0% /dev
tmpfs                    tmpfs     512M     0  512M   0% /dev/shm
tmpfs                    tmpfs     512M  7.1M  505M   2% /run
tmpfs                    tmpfs     512M     0  512M   0% /sys/fs/cgroup
/dev/sda1                xfs       1.1G  145M  919M  14% /boot
tmpfs                    tmpfs     103M     0  103M   0% /run/user/0
/dev/mapper/vg0-projects ext4       19G  4.4G   14G  25% /projects
/dev/mapper/vg0-backups  ext4       11G  4.4G  5.6G  44% /backups

Bước 1: Umount file system

Sử dụng lệnh umount bên dưới:

[root@localhost ~]# umount /projects/
[root@localhost ~]# df -TH
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root     xfs        19G  6.8G   12G  37% /
devtmpfs                devtmpfs  501M     0  501M   0% /dev
tmpfs                   tmpfs     512M     0  512M   0% /dev/shm
tmpfs                   tmpfs     512M  7.1M  505M   2% /run
tmpfs                   tmpfs     512M     0  512M   0% /sys/fs/cgroup
/dev/sda1               xfs       1.1G  145M  919M  14% /boot
tmpfs                   tmpfs     103M     0  103M   0% /run/user/0
/dev/mapper/vg0-backups ext4       11G  4.4G  5.6G  44% /backups

Bước 2: Kiểm tra lỗi file system bằng lệnh e2fsck.

[root@localhost ~]# e2fsck -f /dev/vg0/projects
e2fsck 1.42.9 (28-Dec-2013)
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/vg0/projects: 11/1171456 files (0.0% non-contiguous), 117573/4669440 blocks

Trong đó tùy chọn -f dùng để kiểm tra(force check).

Bước 3: Giảm kích thước của projects theo kích thước mong muốn.

Giảm Logical Volume có tên projects với kích thước từ 17.81GB giảm xuống còn 10GB chúng ta thực hiện như sau:

[root@localhost ~]# resize2fs /dev/vg0/projects 10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/projects to 2621440 (4k) blocks.
The filesystem on /dev/vg0/projects is now 2621440 blocks long.

Bước 4: Bây giờ giảm kích thước bằng lệnh lvreduce.

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

Bước 5: Để đảm bảo an toàn, bây giờ kiểm tra lỗi file system đã giảm

[root@localhost ~]# e2fsck -f /dev/vg0/projects
e2fsck 1.42.9 (28-Dec-2013)
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/vg0/projects: 11/655360 files (0.0% non-contiguous), 83137/2621440 blocks

Bước 6: Gắn kết file system và kiểm tra kích thước của nó.

[root@localhost ~]# mount /dev/vg0/projects /projects/
[root@localhost ~]# lvs
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cl  -wi-ao---- 17.00g
  swap     cl  -wi-ao----  2.00g
  backups  vg0 -wi-ao---- 10.00g
  projects vg0 -wi-ao---- 10.00g
[root@localhost ~]# df -TH
Filesystem               Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root      xfs        19G  6.8G   12G  37% /
devtmpfs                 devtmpfs  501M     0  501M   0% /dev
tmpfs                    tmpfs     512M     0  512M   0% /dev/shm
tmpfs                    tmpfs     512M  7.1M  505M   2% /run
tmpfs                    tmpfs     512M     0  512M   0% /sys/fs/cgroup
/dev/sda1                xfs       1.1G  145M  919M  14% /boot
tmpfs                    tmpfs     103M     0  103M   0% /run/user/0
/dev/mapper/vg0-backups  ext4       11G  4.4G  5.6G  44% /backups
/dev/mapper/vg0-projects ext4       11G  4.4G  5.6G  44% /projects

2.4. Mounting Logical Volume

Chúng ta cần phải gắn kết vĩnh viễn. Để thực hiện gắn kết vĩnh viễn phải nhập trong tệp /etc/fstab. Bạn có thể sử dụng trình soạn thảo vi để nhập vào:

[root@localhost ~]# vi /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Apr 11 21:36:46 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=8c1d2c4f-13d0-4ec9-ae3d-f706311400ad /boot                   xfs     defaults        0 0

UUID=3fe80222-0f42-4d34-8ce7-e4f51c3a7f61 /backups ext4 defaults 0 0
UUID=314f59be-2c3c-4ded-bc3e-cd79544ef1ee /projects ext4 defaults 0 0

Để xác định UUID trên mỗi đĩa. Chúng ta chạy lệnh sau:

[root@localhost ~]# blkid /dev/vg0/projects
/dev/vg0/projects: UUID="314f59be-2c3c-4ded-bc3e-cd79544ef1ee" TYPE="ext4"
[root@localhost ~]# blkid /dev/vg0/backups
/dev/vg0/backups: UUID="3fe80222-0f42-4d34-8ce7-e4f51c3a7f61" TYPE="ext4"

Khi đã biết UUID và hệ thống tệp, chúng tôi có thể nhập vào tệp /etc/fstab. Các tập tin fstab có định dạng sau.

[Device] [Mount Point] [File System Type] [Options] [Dump] [Pass]

Lưu lại file /etc/fstab và chạy lệnh sau lưu các thay đổi và gắn kết LV:

[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep backups
/dev/mapper/vg0-backups on /backups type ext4 (rw,relatime,seclabel,data=ordered)
[root@localhost ~]# mount | grep projects
/dev/mapper/vg0-projects on /projects type ext4 (rw,relatime,seclabel,data=ordered)

Nếu có lỗi, không reboot server để tránh tình trạng server không thể khởi động. Kiểm tra cấu hình trong file /etc/fstab và chạy lại lệnh cho tới khi không có thông báo lỗi.

3. Snapshot và restore của Logical Volume

3.1. Snapshot Logical Volume

3.1.1. Tạo snapshot LVM

Trước khi tạo snapshot thì chúng ta kiểm tra dev/vg0/projects:

[root@localhost ~]# cd /projects/
[root@localhost projects]# ls -l
total 417812
-rw-r--r--. 1 root root 427819008 Apr 28 12:11 CentOS-6.9-x86_64-minimal.iso
drwx------. 2 root root     16384 Apr 28 12:02 lost+found
-rw-r--r--. 1 root root        12 Apr 28 12:20 test1.txt
[root@localhost projects]# cat test1.txt
Hello Blogd

Kiểm tra không gian trống trong volume groupg để tạo snapshot mới chúng ta thực hiện như sau:

[root@localhost ~]# vgs
  VG  #PV #LV #SN Attr   VSize  VFree
  cl    1   2   0 wz--n- 19.00g    0
  vg0   3   2   0 wz--n- 29.99g 2.18g
[root@localhost ~]# lvs
  LV        VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root      cl  -wi-ao---- 17.00g
  swap      cl  -wi-ao----  2.00g
  backups   vg0 -wi-ao----  9.99g
  projects vg0 -wi-ao---- 17.81g

Qua lệnh kiểm tra trên chúng ta thấy hiện có 2.18GB dung lượng trống còn lại. Vì vậy, tạo một snapshot có tên là snapshot_1 với dung lượng 1GB bằng các lệnh sau:

[root@localhost ~]# lvcreate -L 1GB -s -n snapshot_1 /dev/vg0/projects
  Using default stripesize 64.00 KiB.
  Logical volume "snapshot_1" created.

Trong đó ý nghĩa các tuỳ chọn là:

  • -s: Tạo snapshot
  • -n: Tên cho snapshot

Tương tự chúng ta tạo một snapshot có tên là snapshot_2 với dung lượng 1GB.

Nếu bạn muốn snapshot, bạn có thể sử dụng lệnh lvremove.

[root@localhost ~]# lvremove /dev/vg0/snapshot_2
Do you really want to remove active logical volume vg0/snapshot_2? [y/n]: y
  Logical volume "snapshot_2" successfully removed

Kiểm tra lại snapshot đã được tạo, chúng ta thực hiện như bên dưới:

[root@localhost ~]# lvs
  LV          VG  Attr       LSize  Pool Origin    Data%  Meta%  Move Log Cpy%Sync Convert
  root        cl  -wi-ao---- 17.00g
  swap        cl  -wi-ao----  2.00g
  backups     vg0 -wi-ao----  9.99g
  projects   vg0 owi-aos--- 17.81g
  snapshot_1 vg0 swi-a-s---  1.00g      projiects 0.00

Chúng ta sẽ thêm một số tệp mới vào /dev/vg0/projects với dung lượng tệp khoảng 719MB và kích thước snapshot của chúng ta là 1GB. Vì vậy, có đủ không gian để sao lưu các thay đổi của chúng ta. Chúng ta thực hiện lệnh bên dưới để kiểm tra:

[root@localhost ~]# lvs
  LV          VG  Attr       LSize  Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert
  root        cl  -wi-ao---- 17.00g
  swap        cl  -wi-ao----  2.00g
  backups     vg0 -wi-ao----  9.99g
  projects    vg0 owi-aos--- 17.81g
  snapshot_1 vg0 swi-a-s---  1.00g      projects 68.30

Qua việc kiểm tra trên chúng ta thấy 68.30% dung lượng snapshot đã được sử dụng. Để biết thêm thông tin chi tiết chúng ta sử dụng lệnh sau:

[root@localhost ~]# lvdisplay /dev/vg0/snapshot_1
  --- Logical volume ---
  LV Path                /dev/vg0/snapshot_1
  LV Name                snapshot_1
  VG Name                vg0
  LV UUID                se3aTX-JKSc-yaIZ-ht55-jIrF-w4Hc-Uy9WXd
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-04-21 07:23:46 +0700
  LV snapshot status     INACTIVE destination for projects
  LV Status              available
  # open                 0
  LV Size                17.81 GiB
  Current LE             4560
  COW-table size         1.00 GiB
  COW-table LE           384
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:6

Trong đó ý nghĩa các trường của lệnh lvdisplay như sau:

  • LV Name: Tên của Snapshot Logical Volume
  • VG Name: Tên Volume group đang được sử dụng
  • LV Write Access: Snapshot volume ở chế độ đọc và ghi
  • LV Creation host, time: Thời gian khi snapshot được tạo. Nó rất quan trọng vì snapshot sẽ tìm mọi thay đổi sau thời gian này
  • LV snapshot status: Snapshot này thuộc vào logical volume projects
  • LV Size: Kích thước của Source volume mà bạn đã snapshot
  • COW-table size: Kích thước bảng Cow
  • Snapshot chunk size: Cung cấp kích thước của chunk cho snapshot

Chúng ta tiếp tục sao chép tệp có dung lượng lớn hơn 1GB vào /dev/vg0/projects và bạn sẽ nhận được thông báo lỗi "Input/output error" điều đó có nghĩa là hết dung lượng trong snapshot.

  /dev/vg0/snapshot_1: read failed after 0 of 4096 at 10737355714: Input/output error
  /dev/vg0/snapshot_1: read failed after 0 of 4096 at 10737412422: Input/output error
  /dev/vg0/snapshot_1: read failed after 0 of 4096 at 0: Input/output error
  /dev/vg0/snapshot_1: read failed after 0 of 4096 at 4096: Input/output error
  LV          VG  Attr       LSize  Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert
  root        cl  -wi-ao---- 17.00g
  swap        cl  -wi-ao----  2.00g
  backups     vg0 -wi-ao----  9.99g
  projects    vg0 owi-aos--- 17.81g
  snapshot_1 vg0 swi-I-s---  1.00g      projects 100.00

Nếu chúng ta có Source volume có kích thước là 10GB thì chúng ta cũng nên tạo snapshot có dung lượng 10GB để đủ không gian chứa các thay đổi của Source volume.

Chú ý: Dung lượng Snapshot tăng lên đúng bằng dung lượng tạo mới trên LV. Không thể tạo Snapshot mới ghi đè lên Snapshot cũ. Trường hợp bạn có 2 Snapshot cho cùng 1 ổ LV thì dữ liệu mới cũng được ghi cả vào 2 ổ Snapshot.

3.1.2. Tăng dung lượng snapshot trong lvm

Chúng ta cần mở rộng kích thước của snapshot, chúng ta có thể thực hiện bằng cách sử dụng:

[root@localhost ~]# lvextend -L +1GB /dev/vg0/snapshot_1
  Size of logical volume vg0/snapshot_1 changed from 1.0 GiB (256 extents) to 2.00 GiB (512 extents).
  Logical volume vg0/snapshot_1 successfully resized.

Sau khi thực thi lệnh trên thì snapshot có kích thước 2GB.

Tiếp theo, kiểm tra kích thước mới và bảng COW bằng lệnh sau.

[root@localhost ~]# lvdisplay /dev/vg0/snapshot_1
  --- Logical volume ---
  LV Path                /dev/vg0/snapshot_1
  LV Name                snapshot_1
  VG Name                vg0
  LV UUID                cGujY8-n70P-U1Vd-IQBA-bPnY-Rds7-7jJVjT
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-04-20 20:07:29 +0700
  LV snapshot status     active destination for projiects
  LV Status              available
  # open                 0
  LV Size                17.81 GiB
  Current LE             4560
  COW-table size         2.00 GiB
  COW-table LE           512
  Allocated to snapshot  0.00%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:6

Qua lệnh kiểm tra trên chúng ta thấy COW-table size nó chính là kích thước bảng Cow và kích thước bảng cow đã tăng lên thêm 1GB so với kích thước trước khi chạy lệnh lvextend.

Bây giờ sau khi tăng dung lượng chúng ta tiếp tục thêm vào 1 tệp có kích thước 1GB Và chỉnh sữa 1 tệp có tên test1.txt trong /dev/vg0/projects:

[root@localhost ~]# cd /projects/
[root@localhost projects]# ls -l
total 1058144
-rw-r--r--. 1 root root 655693824 Apr 28 12:23 CentOS-5.10-x86_64-bin-1of9.iso
-rw-r--r--. 1 root root 427819008 Apr 28 12:11 CentOS-6.9-x86_64-minimal.iso
-rw-r--r--. 1 root root 978432342 Apr 28 12:11 CentOS-7.1-x68_64-minimal.iso
drwx------. 2 root root     16384 Apr 28 12:02 lost+found
-rw-r--r--. 1 root root        12 Apr 28 12:20 test1.txt
##Truoc chinh sua
[root@localhost projects]# cat test1.txt
Hello Blogd
##Sau chinh sua
[root@localhost projects]# cat test1.txt
Blogd.net

3.2. Restore Logical Volume

Để restore snapshot, chúng ta cần hủy gắn kết hệ thống tệp.

[root@localhost ~]# df -TH
Filesystem               Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root      xfs        19G  1.1G   18G   6% /
devtmpfs                 devtmpfs  501M     0  501M   0% /dev
tmpfs                    tmpfs     512M     0  512M   0% /dev/shm
tmpfs                    tmpfs     512M  7.1M  505M   2% /run
tmpfs                    tmpfs     512M     0  512M   0% /sys/fs/cgroup
/dev/sda1                xfs       1.1G  145M  919M  14% /boot
tmpfs                    tmpfs     103M     0  103M   0% /run/user/0
/dev/mapper/vg0-projects ext4       18G  1.1G   16G   7% /projects
/dev/mapper/vg0-backups  ext4       11G   38M  9.9G   1% /backups
[root@localhost ~]# umount /projects/

Kiểm tra xem điểm gắn kết còn hay không:

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/cl-root       17G 1013M   16G   6% /
devtmpfs                 478M     0  478M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                    489M  6.8M  482M   2% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/sda1               1014M  139M  876M  14% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/vg0-backups  9.8G   37M  9.2G   1% /backups

Điểm gắn kết của chúng ta đã được huỷ, vì vậy chúng ta có thể tiếp tục restore snapshot. Để restore snapshot bằng lệnh lvconvert.

[root@localhost ~]# lvs
  LV          VG  Attr       LSize  Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert
  root        cl  -wi-ao---- 17.00g
  swap        cl  -wi-ao----  2.00g
  backups     vg0 -wi-ao----  9.99g
  projects    vg0 owi-aos--- 17.81g
  snapshot_1 vg0 swi-a-s---  2.00g      projects 51.33
[root@localhost ~]# lvconvert --merge /dev/vg0/snapshot_1
  Merging of volume vg0/snapshot_1 started.
  projects: Merged: 67.30%
  projects: Merged: 100.00%
[root@localhost ~]# lvs
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cl  -wi-ao---- 17.00g
  swap     cl  -wi-ao----  2.00g
  backups  vg0 -wi-ao----  9.99g
  projects vg0 -wi-a----- 17.81gi
[root@localhost ~]# mount /dev/vg0/projects /projects/
[root@localhost ~]# df -TH
Filesystem               Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root      xfs        19G  1.1G   18G   6% /
devtmpfs                 devtmpfs  501M     0  501M   0% /dev
tmpfs                    tmpfs     512M     0  512M   0% /dev/shm
tmpfs                    tmpfs     512M  7.1M  505M   2% /run
tmpfs                    tmpfs     512M     0  512M   0% /sys/fs/cgroup
/dev/sda1                xfs       1.1G  145M  919M  14% /boot
tmpfs                    tmpfs     103M     0  103M   0% /run/user/0
/dev/mapper/vg0-projects ext4       19G  474M   18G   3% /projects
/dev/mapper/vg0-backups  ext4       11G   38M  9.9G   1% /backups

Sau khi merge hoàn thành, snapshot volume sẽ tự động bị xóa.

Chúng ta kiểm tra lại /dev/vg0/projects để xem kết quả:

[root@localhost ~]# cd /projects/
[root@localhost projects]# ls -l
total 417812
-rw-r--r--. 1 root root 427819008 Apr 28 12:11 CentOS-6.9-x86_64-minimal.iso
drwx------. 2 root root     16384 Apr 28 12:02 lost+found
-rw-r--r--. 1 root root        12 Apr 28 12:20 test1.txt
[root@localhost projects]# cat test1.txt
Hello Blogd

Qua kiểm tra trên thì kết quả restore cho chúng ta thấy kết quả trả về ban đầu trước khi chúng ta thực hiện snapshot, dù cho chúng ta có điều chỉnh gì sau khi tạo snapshot thì khi restore vẫn trở về lúc chúng ta tạo snapshot.

4. Tính năng Thin Provisioning Volume

Tính năng này cho phép chúng ta tạo ra số Volume có tổng dung lượng lớn hơn dung lượng cho phép.

4.1. Setup Thin Pool và Volume

Chúng ta tạo 1 Physical Volume /dev/sde và sau đó dùng lệnh sau để tạo ra 1 Volume group cho Thin-Pool:

[root@localhost ~]# pvcreate /dev/sde
  Physical volume "/dev/sde" successfully created.
[root@localhost ~]# vgcreate vg-thin /dev/sde
  Volume group "vg-thin" successfully created

Tiếp theo, kiểm tra kích thước Logical volume, trước khi tạo thin pool và volume. Thực hiện như bên dưới:

[root@localhost ~]# vgs
  VG      #PV #LV #SN Attr   VSize  VFree
  cl        1   2   0 wz--n- 19.00g     0
  vg-thin   1   0   0 wz--n- 20.00g 20.00g
  vg0       3   2   0 wz--n- 29.99g  2.18g
[root@localhost ~]# lvs
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cl  -wi-ao---- 17.00g
  swap     cl  -wi-ao----  2.00g
  backups  vg0 -wi-ao----  9.99g
  projects vg0 -wi-ao---- 17.81g

4.1.1. Tạo một Thin Pool

Chúng ta thực hiện tạo một Thin Pool với kích thước 15GB trong volume group(vg-thin) sử dụng lệnh sau:

[root@localhost ~]# lvcreate -L 15GB --thinpool demo vg-thin
  Using default stripesize 64.00 KiB.
  Logical volume "demo" created.

Trong đó ý nghĩa các tùy chọn như sau:

  • -L: Kích thước của volume group
  • --thinpool: Tạo mới một thinpool
  • demo: Tên của thinpool
  • vg-thin: Tên của volume group mà chúng ta muốn tạo thinpool

4.1.2. Tạo Thin Volume

Chúng ta có thể xác định thin volume bên trong thin pool bằng cách sử dụng lệnh lvcreate cùng với tùy chọn -V. Thực hiện như bên dưới:

[root@localhost ~]# lvcreate -V 5G --thin -n thin-client1 vg-thin/demo
  Using default stripesize 64.00 KiB.
  Logical volume "thin-client1" created.

Thin virtual volume đã được tạo với tên thin-client1 bên trong demo trong volume group vg_thin.

Tương tự chúng ta sẽ tạo thin virtual volume với tên lần lượt là thin-client2 và thin-client3:

[root@localhost ~]# lvcreate -V 5G --thin -n thin-client2 vg-thin/demo
  Using default stripesize 64.00 KiB.
  Logical volume "thin-client2" created.
[root@localhost ~]# lvcreate -V 5G --thin -n thin-client3 vg-thin/demo
  Using default stripesize 64.00 KiB.
  Logical volume "thin-client3" created.

Liệt kê các logical volume bằng cách sử dụng lệnh dưới đây.

[root@localhost ~]# lvs
  LV           VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root         cl      -wi-ao---- 17.00g
  swap         cl      -wi-ao----  2.00g
  demo         vg-thin twi-aotz-- 15.00g             0.00   0.66
  thin-client1 vg-thin Vwi-a-tz--  5.00g demo        0.00
  thin-client2 vg-thin Vwi-a-tz--  5.00g demo        0.00
  thin-client3 vg-thin Vwi-a-tz--  5.00g demo        0.00
  backups      vg0     -wi-ao----  9.99g
  projects     vg0     -wi-ao---- 17.81g

4.1.3. Tạo file system

Bây giờ, chúng ta sẽ tạo các điểm gắn kết và gắn 3 thin volume này và cho chúng chứa một số tệp bên trong chúng ta thực hiện như sau:

  • Chạy các lệnh sau để tạo điểm gắn kết:

    [root@localhost ~]# mkdir -p /client1 /client2 /client3
    
  • Chúng tôi sẽ sử dụng file system ext4. Chúng ta thực hiện như sau:

    [root@localhost ~]# mkfs.ext4 /dev/vg-thin/thin-client1
    mke2fs 1.42.9 (28-Dec-2013)
    Discarding device blocks: done
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=16 blocks, Stripe width=16 blocks
    327680 inodes, 1310720 blocks
    65536 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=1342177280
    40 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
    	32768, 98304, 163840, 229376, 294912, 819200, 884736
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    [root@localhost ~]# mkfs.ext4 /dev/vg-thin/thin-client2
    mke2fs 1.42.9 (28-Dec-2013)
    Discarding device blocks: done
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=16 blocks, Stripe width=16 blocks
    327680 inodes, 1310720 blocks
    65536 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=1342177280
    40 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
    	32768, 98304, 163840, 229376, 294912, 819200, 884736
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    [root@localhost ~]# mkfs.ext4 /dev/vg-thin/thin-client3
    mke2fs 1.42.9 (28-Dec-2013)
    Discarding device blocks: done
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=16 blocks, Stripe width=16 blocks
    327680 inodes, 1310720 blocks
    65536 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=1342177280
    40 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
    	32768, 98304, 163840, 229376, 294912, 819200, 884736
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
  • Gắn kết cả ba client volume vào điểm gắn kết đã tạo bằng lệnh mount.

    [root@localhost ~]# mount /dev/vg-thin/thin-client1 /client1/
    [root@localhost ~]# mount /dev/vg-thin/thin-client2 /client2/
    [root@localhost ~]# mount /dev/vg-thin/thin-client3 /client3/
    
  • Chạy lệnh sau để xem các lient volume đã được mount đủ chưa:

    [root@localhost ~]# df -h
    Filesystem                          Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root                  17G  6.3G   11G  37% /
    devtmpfs                            478M     0  478M   0% /dev
    tmpfs                               489M     0  489M   0% /dev/shm
    tmpfs                               489M  6.8M  482M   2% /run
    tmpfs                               489M     0  489M   0% /sys/fs/cgroup
    /dev/sda1                          1014M  139M  876M  14% /boot
    tmpfs                                98M     0   98M   0% /run/user/0
    /dev/mapper/vg0-projects             18G   44M   17G   1% /projects
    /dev/mapper/vg0-backups             9.8G   37M  9.2G   1% /backups
    /dev/mapper/vg--thin-thin--client1  4.8G   20M  4.6G   1% /client1
    /dev/mapper/vg--thin-thin--client2  4.8G   20M  4.6G   1% /client2
    /dev/mapper/vg--thin-thin--client3  4.8G   20M  4.6G   1% /client3
    
  • Chúng ta chuyển dữ liệu vào dung lượng của các client volume, chạy lệnh sau để kiểm tra:

    [root@localhost ~]# df -TH
    Filesystem                         Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root                xfs        19G  6.8G   12G  37% /
    devtmpfs                           devtmpfs  501M     0  501M   0% /dev
    tmpfs                              tmpfs     512M     0  512M   0% /dev/shm
    tmpfs                              tmpfs     512M  7.1M  505M   2% /run
    tmpfs                              tmpfs     512M     0  512M   0% /sys/fs/cgroup
    /dev/sda1                          xfs       1.1G  145M  919M  14% /boot
    tmpfs                              tmpfs     103M     0  103M   0% /run/user/0
    /dev/mapper/vg0-projects           ext4       19G   47M   18G   1% /projects
    /dev/mapper/vg0-backups            ext4       11G   38M  9.9G   1% /backups
    /dev/mapper/vg--thin-thin--client1 ext4      5.2G  734M  4.2G  16% /client1
    /dev/mapper/vg--thin-thin--client2 ext4      5.2G  2.3G  2.7G  46% /client2
    /dev/mapper/vg--thin-thin--client3 ext4      5.2G  1.4G  3.6G  28% /client3
    
    [root@localhost ~]# lvs
    LV           VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
    root         cl      -wi-ao---- 17.00g
    swap         cl      -wi-ao----  2.00g
    demo         vg-thin twi-aotz-- 15.00g             30.49  14.87
    thin-client1 vg-thin Vwi-aotz--  5.00g demo        17.41
    thin-client2 vg-thin Vwi-aotz--  5.00g demo        45.15
    thin-client3 vg-thin Vwi-aotz--  5.00g demo        28.92
    backups      vg0     -wi-ao----  9.99g
    projects     vg0     -wi-ao---- 17.81g
    

Qua việc kiểm tra cho chúng ta thấy, ba mount pints cùng với kích thước của chúng theo tỷ lệ phần trăm và cho chúng ta thin-pool biết chỉ có 30% dữ liệu được viết hoàn toàn. Đây là tổng số ba clients virtual volume.

4.2 Cung cấp vượt mức bằng tính năng Thin Provisioning

Bây giờ chúng ta tạo thin-client4 với kích thước 5GB nhưng Thin Pool chỉ có kích thước 15GB chúng ta đạ dùng cho 3 thin-client trước. Vậy là trên lý thuyết ta ko thể cho client 5GB nữa. Cách giải quyết là dùng chức năng Over Provisioning.

Tạo thin-client4 với kích thước 5GB. Tạo thư mục /client4. Tạo File System và mount thin-client4.

[root@localhost ~]# lvcreate -V 5G --thin -n thin-client4 vg-thin/demo
  Using default stripesize 64.00 KiB.
  WARNING: Sum of all thin volume sizes (20.00 GiB) exceeds the size of thin pool vg-thin/demo and the size of whole volume group (20.00 GiB)!
  For thin pool auto extension activation/thin_pool_autoextend_threshold should be below 100.
  Logical volume "thin-client4" created.
[root@localhost ~]# mkdir /client4
[root@localhost ~]# mkfs.ext4 /dev/vg-thin/thin-client4
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=16 blocks, Stripe width=16 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736

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

[root@localhost ~]# mount /dev/vg-thin/thin-client4 /client4/
[root@localhost ~]# df -TH
Filesystem                         Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root                xfs        19G  6.8G   12G  37% /
devtmpfs                           devtmpfs  501M     0  501M   0% /dev
tmpfs                              tmpfs     512M     0  512M   0% /dev/shm
tmpfs                              tmpfs     512M  7.1M  505M   2% /run
tmpfs                              tmpfs     512M     0  512M   0% /sys/fs/cgroup
/dev/sda1                          xfs       1.1G  145M  919M  14% /boot
tmpfs                              tmpfs     103M     0  103M   0% /run/user/0
/dev/mapper/vg0-projects           ext4       19G   47M   18G   1% /projects
/dev/mapper/vg0-backups            ext4       11G   38M  9.9G   1% /backups
/dev/mapper/vg--thin-thin--client1 ext4      5.2G  734M  4.2G  16% /client1
/dev/mapper/vg--thin-thin--client2 ext4      5.2G  2.3G  2.7G  46% /client2
/dev/mapper/vg--thin-thin--client3 ext4      5.2G  1.4G  3.6G  28% /client3
/dev/mapper/vg--thin-thin--client4 ext4      5.2G   20M  5.1G   1% /client4

Bây giờ chúng ta sao chép một số tệp vào /client4. Chúng ta chạy lệnh sau để kiểm tra:

[root@localhost ~]# lvs
  LV           VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root         cl      -wi-ao---- 17.00g
  swap         cl      -wi-ao----  2.00g
  demo         vg-thin twi-aotz-- 15.00g             58.47  28.00
  thin-client1 vg-thin Vwi-aotz--  5.00g demo        17.41
  thin-client2 vg-thin Vwi-aotz--  5.00g demo        45.15
  thin-client3 vg-thin Vwi-aotz--  5.00g demo        28.92
  thin-client4 vg-thin Vwi-aotz--  5.00g demo        83.92
  backups      vg0     -wi-ao----  9.99g
  projects     vg0     -wi-ao---- 17.81g
[root@localhost ~]# df -TH
Filesystem                         Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root                xfs        19G  6.8G   12G  37% /
devtmpfs                           devtmpfs  501M     0  501M   0% /dev
tmpfs                              tmpfs     512M     0  512M   0% /dev/shm
tmpfs                              tmpfs     512M  7.1M  505M   2% /run
tmpfs                              tmpfs     512M     0  512M   0% /sys/fs/cgroup
/dev/sda1                          xfs       1.1G  145M  919M  14% /boot
tmpfs                              tmpfs     103M     0  103M   0% /run/user/0
/dev/mapper/vg0-projects           ext4       19G   47M   18G   1% /projects
/dev/mapper/vg0-backups            ext4       11G   38M  9.9G   1% /backups
/dev/mapper/vg--thin-thin--client1 ext4      5.2G  734M  4.2G  16% /client1
/dev/mapper/vg--thin-thin--client2 ext4      5.2G  2.3G  2.7G  46% /client2
/dev/mapper/vg--thin-thin--client3 ext4      5.2G  1.4G  3.6G  28% /client3
/dev/mapper/vg--thin-thin--client4 ext4      5.2G  4.4G  561M  89% /client4

Chúng ta có thể thấy, tổng kích thước được sử dụng của thin-client 4 lên tới 83.92% và kích thước của thin-pool là 59,19% được sử dụng. Nếu tất cả những người dùng sử dụng toàn ôộ dung lượng họ có thì dẫn đến nó sẽ không bị tràn. Để tránh trình trạng tràn, chúng ta cần mở rộng kích thước thin-pool.

Chú ý: Thin-pools là một logical volume, vì vậy nếu chúng ta cần mở rộng kích thước của thin-pool, chúng ta có thể sử dụng lệnh lvextend

Chúng ta có thể mở rộng logical thin-pool như sau:

[root@localhost ~]#  lvextend -L +5G /dev/vg-thin/demo
  Extending logical volume vg-thin/demo_tdata changed from 15.00 GiB (3840 extents) to 20.00 GiB (5169 extents).
  Logical volume vg-thin/demo_tdata successfully resized.

Tiếp theo, liệt kê kích thước thin-pool.

[root@localhost ~]# lvs
  LV           VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root         cl      -wi-ao---- 17.00g
  swap         cl      -wi-ao----  2.00g
  demo         vg-thin twi-aotz--  20.80g             42.29  27.90
  thin-client1 vg-thin Vwi-aotz--  5.00g demo        17.41
  thin-client2 vg-thin Vwi-aotz--  5.00g demo        45.15
  thin-client3 vg-thin Vwi-aotz--  5.00g demo        28.92
  thin-client4 vg-thin Vwi-aotz--  5.00g demo        83.92
  backups      vg0     -wi-ao----  9.99g
  projects     vg0     -wi-ao---- 17.81g

5. Tính năng Manage Multiple Logical Volume Management Disk sử dụng Striping I/O

LVM Striping là tính năng cho phép ghi dữ liệu lên nhiều ổ thay vì chỉ một ổ Physical volume.

Chúng ta tạo phân vùng trên 3 ổ cứng /dev/sdb, /dev/sdc, /dev/sdd, mỗi phân vùng có kích thước 1 GB. Để kiểm tra chúng ta sử dụng lệnh fdisk như sau:

[root@localhost ~]# fdisk -l |grep sd
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdb1            2048     2097151     1047552   83  Linux
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdc1            2048     2097151     1047552   83  Linux
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdd1            2048     2097151     1047552   83  Linux
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM

Sau khi tạo 3 phân vùng thành công, bây giờ chúng ta tạo Physical volume bằng cách sử dụng tất cả 3 phân vùng này. Chạy lệnh như bên dưới:

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
  Physical volume "/dev/sdd1" successfully created.

Kiểm tra lại các Physical volume đã được tạo như sau:

[root@localhost ~]# pvs
  PV         VG Fmt  Attr PSize    PFree
  /dev/sda2  cl lvm2 a--    19.00g       0
  /dev/sdb1     lvm2 ---  1023.00m 1023.00m
  /dev/sdc1     lvm2 ---  1023.00m 1023.00m
  /dev/sdd1     lvm2 ---  1023.00m 1023.00m

Tiếp theo chúng ta tạo volume group với tên vg1 sử dụng 3 physical volume đã uược tạo bên trên:

[root@localhost ~]# vgcreate vg1 /dev/sdb1 /dev/sdc1 /dev/sdd1
  Volume group "vg1" successfully created

Kiểm tra lại các volume group đã được tạo như sau:

[root@localhost ~]# vgs vg1
  VG  #PV #LV #SN Attr   VSize VFree
  vg1   3   0   0 wz--n- 2.95g 2.95g
[root@localhost ~]# vgdisplay vg1 -v
  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               2.95 GiB
  PE Size               16.00 MiB
  Total PE              189
  Alloc PE / Size       0 / 0
  Free  PE / Size       189 / 2.95 GiB
  VG UUID               PmIMGk-oGeo-i8LG-8PwW-NrfO-09ZH-rEgoYO

  --- Physical volumes ---
  PV Name               /dev/sdb1
  PV UUID               rnwL7D-p6No-bwEa-rGId-52dO-tn1x-x1QwpP
  PV Status             allocatable
  Total PE / Free PE    63 / 63

  PV Name               /dev/sdc1
  PV UUID               leCuzH-7bKd-LXhL-Fwx3-i78c-Qb41-5LG2jr
  PV Status             allocatable
  Total PE / Free PE    63 / 63

  PV Name               /dev/sdd1
  PV UUID               nfMK6e-Elw7-OtIM-0xKZ-7KOc-UefL-aM25Wm
  PV Status             allocatable
  Total PE / Free PE    63 / 63

Chúng ta tạo ra một logical volume có tên strp1 với kích thước 900MB, và được tạo trong volume group vg1, xác định sử dụng 3 stripe,có nghĩa là dữ liệu ghi vào logical volume của chúng ta, cần phải được logical volume trên 3PV.

[root@localhost ~]# lvcreate -L 900M -n strp1 -i3 vg1
  Using default stripesize 64.00 KiB.
  Rounding up size to full physical extent 912.00 MiB
  Logical volume "strp1" created.

Trong đó:

  • -L: Kích thước logical volume
  • -n: Tên logical volume
  • -i: stripes

Sau khi tạo logical volume chúng ta kiểm tra xem nó có được strips ghi vào 3PV không. Chúng ta có thể sử dụng lệnh lvdisplay cùng với tuỳ chọn -m:

[root@localhost ~]# lvdisplay vg1/strp1 -m
  --- Logical volume ---
  LV Path                /dev/vg1/strp1
  LV Name                strp1
  VG Name                vg1
  LV UUID                vxhL7M-Zes9-2rPS-MErX-ssNT-F2hF-b3uoxo
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-04-22 23:23:07 +0700
  LV Status              available
  # open                 0
  LV Size                912.00 MiB
  Current LE             57
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Segments ---
  Logical extents 0 to 56:
    Type		striped
    Stripes		3
    Stripe size		64.00 KiB
    Stripe 0:
      Physical volume	/dev/sdb1
      Physical extents	0 to 18
    Stripe 1:
      Physical volume	/dev/sdc1
      Physical extents	0 to 18
    Stripe 2:
      Physical volume	/dev/sdd1
      Physical extents	0 to 18

Qua lệnh kiểm tra trên chúng ta thấy strips = 3 có nghĩa là chúng ta đã tạo chính sác theo mong muốn.

Để tạo kích thước strips được xác định, chúng ta cần tạo một logical volume với kích thước 1GB bằng kích thước strips được xác định là 256KB. Chỉ strips trên 2PV, chúng ta có thể xác định pv nào chúng ta muốn được strips.

[root@localhost ~]# lvcreate -L 1G -i2 -I 256 -n strp2 vg1 /dev/sdb1 /dev/sdc1
  Logical volume "strp2" created.

Tiếp theo, kiểm tra kích thước strips và số lượng strips.

[root@localhost ~]# lvdisplay vg1/strp2 -m
  --- Logical volume ---
  LV Path                /dev/vg1/strp2
  LV Name                strp2
  VG Name                vg1
  LV UUID                BIC7S0-Wawd-cUcS-LRYp-rxOC-aRh1-fBdYNh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-04-22 23:52:35 +0700
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             64
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     2048
  Block device           253:2

  --- Segments ---
  Logical extents 0 to 63:
    Type		striped
    Stripes		2
    Stripe size		256.00 KiB
    Stripe 0:
      Physical volume	/dev/sdb1
      Physical extents	0 to 31
    Stripe 1:
      Physical volume	/dev/sdc1
      Physical extents	0 to 31

Qua lệnh kiểm tra trên chúng ta thấy strips = 2Stripe size 256.00 KiB

Chúng ta có thể xem thông tin lvm bằng lệnh dmsetup để biết phụ thuộc vào phân vùng nào.

[root@localhost ~]# dmsetup deps /dev/vg1/strp[1-2]
/dev/vg1/strp1: 3 dependencies	: (8, 49) (8, 33) (8, 17)
/dev/vg1/strp2: 2 dependencies	: (8, 33) (8, 17)
[root@localhost ~]# ls -l /dev/| grep sd
brw-rw----. 1 root disk      8,   0 Apr 22 23:15 sda
brw-rw----. 1 root disk      8,   1 Apr 22 23:15 sda1
brw-rw----. 1 root disk      8,   2 Apr 22 23:15 sda2
brw-rw----. 1 root disk      8,  16 Apr 22 23:15 sdb
brw-rw----. 1 root disk      8,  17 Apr 22 23:52 sdb1
brw-rw----. 1 root disk      8,  32 Apr 22 23:16 sdc
brw-rw----. 1 root disk      8,  33 Apr 22 23:52 sdc1
brw-rw----. 1 root disk      8,  48 Apr 22 23:17 sdd
brw-rw----. 1 root disk      8,  49 Apr 22 23:52 sdd1

6. Tính năng LVM Migration

Tính năng này cho phép di chuyển dữ liệu từ logical volume sang một ổ mới mà không làm mất dữ liệu hoặc downtime. Có thể áp dụng với disk SATA,SSD,SAN storage iSCSI or FC

Bước 1: Kiểm tra ổ đĩa hiện tại

Chúng ta đã có một ổ đĩa ảo có tên là /dev/sdb đã được ánh xạ tới logical volume project. Bây giờ chúng ta muốn di chuyển dung lượng của /dev/sdb này sang một số bộ lưu trữ mới khác.

Sử dụng các lệnh fdisklvs để hiển thị ổ đĩa hiện tại.

[root@localhost ~]# fdisk -l | grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
[root@localhost ~]# lvs
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cl  -wi-ao---- 17.00g
  swap     cl  -wi-ao----  2.00g
  projects vg0 -wi-ao----  9.90g

Bước 2: Kiểm tra ổ đĩa mới được thêm vào

Chúng ta chạy lệnh fdisk -l để kiểm tra xem ổ mới đã được thêm vào hay chưa:

[root@localhost ~]# fdisk -l | grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors

Ổ đĩa mới đã được thêm vào với tên /dev/sdc/dev/sdd

Bước 3: Kiểm tra Logical và Physical Volume hiện tại

Sử dụng các lệnh sau để liệt kê các mount và kiểm tra dữ liệu:

[root@localhost ~]# df -h
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/cl-root        17G  2.5G   15G  15% /
devtmpfs                  478M     0  478M   0% /dev
tmpfs                     489M     0  489M   0% /dev/shm
tmpfs                     489M  6.8M  482M   2% /run
tmpfs                     489M     0  489M   0% /sys/fs/cgroup
/dev/sda1                1014M  139M  876M  14% /boot
tmpfs                      98M     0   98M   0% /run/user/0
/dev/mapper/vg0-projects  9.7G  250M  8.9G   3% /projects
[root@localhost ~]# cd /projects/
[root@localhost projects]# ls -lh
total 214M
drwx------. 2 root root  16K Apr 22 05:00 lost+found
-rw-r--r--. 1 root root   25 Apr 22 05:01 test.txt
-rwxr-xr-x. 1 root root 213M Apr 22 05:01 vyatta-livecd_VC6.5R1_i386.iso
[root@localhost projects]# cat test.txt
Hello
https://blogd.net/

Lưu ý: Chúng ta đã có ba tệp trong điểm gắn kết /projects và chúng ta di chuyển các dữ liệu này sang ổ đĩa mới không làm mất dữ liệu hoặc downtime.

Trước khi di chuyển, chúng ta chạy lệnh sau để kiểm tra tên của logical volume và volume group:

[root@localhost ~]# lvs
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cl  -wi-ao---- 17.00g
  swap     cl  -wi-ao----  2.00g
  projects vg0 -wi-ao----  9.90g
[root@localhost ~]# vgs -o+devices | grep  vg0
  vg0   1   1   0 wz--n- 10.00g 96.00m /dev/sdb(0)

Qua lệnh kêểm tra trên chúng ta thấy /dev/sdb đang giữ volume group vg0.

Bước 4: Tạo Physical Volume mới

Để tạo Physical Volume mới cuúng ta thực hiện như sau:

[root@localhost ~]# pvcreate /dev/sdc -v
    Wiping internal VG cache
    Wiping cache of LVM-capable devices
    Wiping signatures on new PV /dev/sdc.
    Set up physical volume for "/dev/sdc" with 20971520 available sectors.
    Zeroing start of device /dev/sdc.
    Writing physical volume data to disk "/dev/sdc".
  Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvs
  PV         VG  Fmt  Attr PSize  PFree
  /dev/sda2  cl  lvm2 a--  19.00g     0
  /dev/sdb   vg0 lvm2 a--  10.00g 96.00m
  /dev/sdc       lvm2 ---  10.00g 10.00g

Sử dụng lệnh sau để thêm /dev/sdc vào volume group vg0:

[root@localhost ~]# vgextend vg0 /dev/sdc
  Volume group "vg0" successfully extended
[root@localhost ~]# vgs
  VG  #PV #LV #SN Attr   VSize  VFree
  cl    1   2   0 wz--n- 19.00g     0
  vg0   2   1   0 wz--n- 19.99g 10.09g

Để biết thêm thông tin về thiết bị nào được ánh xạ, sử dụng lệnh dmsetup.

[root@localhost ~]# lvs -o+devices
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  root     cl  -wi-ao---- 17.00g                                                     /dev/sda2(512)
  swap     cl  -wi-ao----  2.00g                                                     /dev/sda2(0)
  projects vg0 -wi-ao----  9.90g                                                     /dev/sdb(0)
[root@localhost ~]# dmsetup deps /dev/vg0/projects
1 dependencies	: (8, 16)
[root@localhost ~]# ls -l /dev | grep sd
brw-rw----. 1 root disk      8,   0 Apr 22 04:58 sda
brw-rw----. 1 root disk      8,   1 Apr 22 04:58 sda1
brw-rw----. 1 root disk      8,   2 Apr 22 04:58 sda2
brw-rw----. 1 root disk      8,  16 Apr 22 05:04 sdb
brw-rw----. 1 root disk      8,  32 Apr 22 05:04 sdc
brw-rw----. 1 root disk      8,  48 Apr 22 04:58 sdd

Bước 5: LVM Mirroring Method

Chúng ta dùng lệnh lvconvert để migration dữ liệu sang ổ mới. Khi quá trình migration hoàn tất. Dùng lvs -o+devices để kiểm tra thông tin.

[root@localhost ~]# lvconvert -m 1 /dev/vg0/projects /dev/sdc
  Logical volume vg0/projects successfully converted.
[root@localhost ~]# lvs -o+devices
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  root     cl  -wi-ao---- 17.00g                                                     /dev/sda2(512)
  swap     cl  -wi-ao----  2.00g                                                     /dev/sda2(0)
  projects vg0 rwi-aor---  9.90g                                    53.93            projects_rimage_0(0),projects_rimage_1(0)

Trong đó tùy chọn có ý nghĩa sau:

  • -m: mirror (Tạo ổ migration) 1: 1 mirror

Khi đã tạo 1 mirror mới thì bạn có thể bỏ /dev/sdb và kiểm tra lại với lvs -o+devices chúng ta sẽ thấy vg0 chỉ còn nối với /dev/sdc. Thực hiện như bên dưới:

[root@localhost ~]# lvconvert -m 0 /dev/vg0/projects /dev/sdb
  Logical volume vg0/projects successfully converted.
[root@localhost ~]# lvs -o+devices
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  root     cl  -wi-ao---- 17.00g                                                     /dev/sda2(512)
  swap     cl  -wi-ao----  2.00g                                                     /dev/sda2(0)
  projects vg0 -wi-a-----  9.90g                                                     /dev/sdc(1)
[root@localhost ~]# dmsetup deps /dev/vg0/projects
1 dependencies	: (8, 32)
[root@localhost ~]# ls -l /dev | grep sd
brw-rw----. 1 root disk      8,   0 Apr 22 04:58 sda
brw-rw----. 1 root disk      8,   1 Apr 22 04:58 sda1
brw-rw----. 1 root disk      8,   2 Apr 22 04:58 sda2
brw-rw----. 1 root disk      8,  16 Apr 22 05:11 sdb
brw-rw----. 1 root disk      8,  32 Apr 22 05:11 sdc
brw-rw----. 1 root disk      8,  48 Apr 22 05:07 sdd

Check lại nội dung đã tạo bên trong /projects để đảm bảo dữ liệu không bị mất.

[root@localhost ~]# cd /projects/
[root@localhost projects]# ls -lh
total 214M
drwx------. 2 root root  16K Apr 22 05:00 lost+found
-rw-r--r--. 1 root root   25 Apr 22 05:01 test.txt
-rwxr-xr-x. 1 root root 213M Apr 22 05:01 vyatta-livecd_VC6.5R1_i386.iso
[root@localhost projects]# cat test.txt
Hello
https://blogd.net/

Sau khi mọi thứ được tạo hoàn toàn chính sác bây giờ chúng ta xóa dev/sdb khỏi volume group và kiểm tra thiết bị nào phụ thuộc vào volume group của chúng ta.

[root@localhost ~]# vgreduce /dev/vg0/ /dev/sdb
[root@localhost ~]# vgs -o+devices
  VG  #PV #LV #SN Attr   VSize  VFree  Devices
  cl    1   2   0 wz--n- 19.00g     0  /dev/sda2(0)
  cl    1   2   0 wz--n- 19.00g     0  /dev/sda2(512)
  vg0   2   1   0 wz--n- 19.99g 10.09g /dev/sdc(1)
[root@localhost ~]# lvs
  LV       VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cl  -wi-ao---- 17.00g
  swap     cl  -wi-ao----  2.00g
  projects vg0 -wi-ao----  9.90g

Bước 6: LVM pvmove Mirroring Method

Phần này sẽ hướng dẫn dùng pvmove thay vì lvconvert

Chuẩn bị đầy đủ các bước từ 1 đến 4, tiếp theo chúng ta sẽ dùng lệnh sau:

[root@localhost ~]# pvmove -n /dev/vg0/projects /dev/sdb /dev/sdc

Lưu ý: Đây là cách đơn giản nhưng trong thực tế thì thường sử dụng Mirroring hơn pvmove

7. Lời kết

Qua bài trên, giúp cho chúng ta biết cách sử dụng Logical Volume Management, nó một công cụ để quản lý các thiết bị lưu trữ cung cấp khả năng mở rộng trên hệ điều hành Linux. Ngoài ra còn giúp chúng ta biết cách sử dụng các tính năng của LVM như: Snapshot, Thin Provisioning Volume, LVM Migration,... giúp chúng ta sử dụng LVM tốt hơn cho hệ thống chúng ta.