ILD

Logical volume manager (LV)
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2024-9-11 站点:Inside Linux Development


Logical Volumes

LVM支持3种LV。

linear LV

striped LV

mirrored LV


线性就是没有RAID功能,直接扩容多个PV。

striped相当于RAID0,数据分片存储到多个PV上,可以提升并发IO能力。

mirrored相当于RAID1。


create logical volumes

命令:lvcreate


没有没有指定name,默认为lvol#


创建线性LV

使用-L, -l 选项创建,创建线性LV。

-L指定一个数字大小,可以带单位,如10G

-l指定一个百分比,可以是总量(VG)的百分比,也可以是剩余空间(FREE)的百分比,比如60%VG,100%FREE。


# lvcreate -l 30%VG -n lv0 vg0

  Logical volume "lv0" created.


# ls -l /dev/vg0/lv0

lrwxrwxrwx 1 root root 7 Sep 11 15:12 /dev/vg0/lv0 -> ../dm-0


# ls /dev/mapper/ -l

total 0

crw------- 1 root root 10, 236 Aug 26 14:42 control

lrwxrwxrwx 1 root root       7 Sep 11 17:25 vg0-lv0 -> ../dm-0

lrwxrwxrwx 1 root root       7 Sep 11 16:47 vg0-lv1_rename -> ../dm-1


创建线性LV的时候,还可以指定使用特定的PV,或者特定PV的某个PE范围。如:

lvcreate -L 1500 -ntestlv testvg /dev/sdg1

lvcreate -l 100 -n testlv testvg /dev/sda1:0-25 /dev/sdb1:50-125


创建striped LV

-i选项指定分成几个片,-I选项指定分片的大小,一般是4-512KB


创建10个PE的lv1,类型是striped,分成2个片,一个片16K:

# lvcreate -l 10 -i2 -I16 -n lv1 vg0

  Logical volume "lv1" created.


创建mirrored LV

-m选项,指定mirror几份,-m1,表示有两个copy。


创建10个PE的lv2,类型是mirror,复制1份

# lvcreate -l 10 -m1 -n lv2 vg0

  Logical volume "lv2" created.


-R选项,可以指定regions的大小,默认是512KB。

LVM维护一个很小的log,用来追踪哪个regions用来同步mirror。默认情况下,这个log保存在磁盘。

使用--corelog可以用来保存到内存。但是重启后,整个mirror需要重新同步。


change lv type

mirrored和linear可以互相转换。使用lvconvert命令,-m1转成mirrored,-m0转成linear。


比如

# lvconvert -m0 vg0/lv2

Are you sure you want to convert raid1 LV vg0/lv2 to type linear losing all resilience? [y/n]: y

  Logical volume vg0/lv2 successfully converted.


display lv

和pv/vg一样,lv也有3个命令显示:lvs, lvdisplay, lvscan

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# lvs
  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0 -wi-a----- 80.00m
  lv1  vg0 -wi-a----- 40.00m
  lv2  vg0 -wi-a----- 40.00m
 
# lvscan
  ACTIVE            '/dev/vg0/lv0' [80.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv1' [40.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv2' [40.00 MiB] inherit
 
# lvdisplay vg0/lv0
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                Sxcs1Y-8OJO-MBHh-73Vu-7cfz-qPz6-xC0Bdt
  LV Write Access        read/write
  LV Creation host, time yuan-vm, 2024-09-11 15:12:43 +0800
  LV Status              available
  # open                 0
  LV Size                80.00 MiB
  Current LE             20
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0


remove lv

使用lvremove命令移除logical volume。


# lvremove vg0/lv2

Do you really want to remove and DISCARD active logical volume vg0/lv2? [y/n]: y

  Logical volume "lv2" successfully removed


rename lv

使用lvname命令,重命名一个lv


# lvrename vg0 lv1 lv1_rename

  Renamed "lv1" to "lv1_rename" in volume group "vg0"


change lv

使用lvchange命令,可以设置lv的一些属性。具体见lvchange的manual。


shrink lv

使用lvreduce命令可以缩小一个lv的大小。

首先需要注意的是,如果lv已经挂载了文件系统,首先需要收缩文件系统。否则存在文件丢失的风险。


有一个选项 --resize-fs 可以帮我们一条命令缩小,也不用umount。


# lvreduce -l -5 --resize-fs vg0/lv0

Do you want to unmount "/work/lvm/lv0" ? [Y|n] y

fsck from util-linux 2.34

/dev/mapper/vg0-lv0: 12/20480 files (8.3% non-contiguous), 1684/20480 blocks

resize2fs 1.45.5 (07-Jan-2020)

Resizing the filesystem on /dev/mapper/vg0-lv0 to 15360 (4k) blocks.

The filesystem on /dev/mapper/vg0-lv0 is now 15360 (4k) blocks long.


  Size of logical volume vg0/lv0 changed from 80.00 MiB (20 extents) to 60.00 MiB (15 extents).

  Logical volume vg0/lv0 successfully resized.


上面这条命令,将lv0缩小5个LE。挂载的前后大小,可以看到变小了20M。

# df -h lv0

Filesystem           Size  Used Avail Use% Mounted on

/dev/mapper/vg0-lv0   74M   28K   68M   1% /work/lvm/lv0


# df -h lv0

Filesystem           Size  Used Avail Use% Mounted on

/dev/mapper/vg0-lv0   54M   28K   50M   1% /work/lvm/lv0


grow lv

使用lvextend命令,可以扩大一个lv的大小。扩大之后,还需要扩大关联的文件系统的大小。


# lvextend -l +5 --resize-fs vg0/lv0

  Size of logical volume vg0/lv0 changed from 60.00 MiB (15 extents) to 80.00 MiB (20 extents).

  Logical volume vg0/lv0 successfully resized.

resize2fs 1.45.5 (07-Jan-2020)

Filesystem at /dev/mapper/vg0-lv0 is mounted on /work/lvm/lv0; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 1

The filesystem on /dev/mapper/vg0-lv0 is now 20480 (4k) blocks long.




Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.