Linux 使用lvm 管理磁盘

创建和查看 PV

1.创建 pv

[root@localhost opt]# pvcreate /dev/sdb{1,2,3,4}
WARNING: dos signature detected on /dev/sdb1 at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/sdb1.
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.
  Physical volume "/dev/sdb4" successfully created.

2.查看 pv

[root@localhost opt]# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda2  cl lvm2 a--  19.00g    0
  /dev/sdb1     lvm2 ---   5.00g 5.00g
  /dev/sdb2     lvm2 ---   5.00g 5.00g
  /dev/sdb3     lvm2 ---   5.00g 5.00g
  /dev/sdb4     lvm2 ---   5.00g 5.00g

3.查看详细信息

[root@localhost opt]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               cl
  PV Size               19.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4863
  Free PE               0
  Allocated PE          4863
  PV UUID               X5WbXW-4qUV-MoYO-1ws3-3y6J-36tz-M5CxPM

  "/dev/sdb1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               emcwLR-IKkM-9R2G-1rEF-y94t-GLrT-SGk2Qk

  "/dev/sdb3" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb3
  VG Name
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               6gwwXq-vzJD-wxOY-ACAj-mvTI-wyh5-AAZRdp

  "/dev/sdb2" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               btswJD-I59p-xxWQ-VyLr-Gobc-rVdJ-MqupEG

  "/dev/sdb4" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb4
  VG Name
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               RSP9tx-kWci-Yc9r-P6HF-yUxZ-p3ck-h2oM9g

这里主要观察 PE Size,可以看到是0

创建 vg

1.创建 vg,并且使用-s参数指定 PE 的大小

[root@localhost opt]# vgcreate -s 8M myvg /dev/sdb{1,2,3,4}
  Volume group "myvg" successfully created

2.使用 pvs 查看基本信息

[root@localhost opt]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  cl   lvm2 a--  19.00g    0
  /dev/sdb1  myvg lvm2 a--   4.99g 4.99g
  /dev/sdb2  myvg lvm2 a--   4.99g 4.99g
  /dev/sdb3  myvg lvm2 a--   4.99g 4.99g
  /dev/sdb4  myvg lvm2 a--   4.99g 4.99g

3.查看详细信息

[root@localhost opt]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               myvg
  PV Size               5.00 GiB / not usable 8.00 MiB
  Allocatable           yes
  PE Size               8.00 MiB
  Total PE              639
  Free PE               639
  Allocated PE          0
  PV UUID               emcwLR-IKkM-9R2G-1rEF-y94t-GLrT-SGk2Qk

  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               myvg
  PV Size               5.00 GiB / not usable 8.00 MiB
  Allocatable           yes
  PE Size               8.00 MiB
  Total PE              639
  Free PE               639
  Allocated PE          0
  PV UUID               btswJD-I59p-xxWQ-VyLr-Gobc-rVdJ-MqupEG

  --- Physical volume ---
  PV Name               /dev/sdb3
  VG Name               myvg
  PV Size               5.00 GiB / not usable 8.00 MiB
  Allocatable           yes
  PE Size               8.00 MiB
  Total PE              639
  Free PE               639
  Allocated PE          0
  PV UUID               6gwwXq-vzJD-wxOY-ACAj-mvTI-wyh5-AAZRdp

  --- Physical volume ---
  PV Name               /dev/sdb4
  VG Name               myvg
  PV Size               5.00 GiB / not usable 6.98 MiB
  Allocatable           yes
  PE Size               8.00 MiB
  Total PE              639
  Free PE               639
  Allocated PE          0
  PV UUID               RSP9tx-kWci-Yc9r-P6HF-yUxZ-p3ck-h2oM9g

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               cl
  PV Size               19.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4863
  Free PE               0
  Allocated PE          4863
  PV UUID               X5WbXW-4qUV-MoYO-1ws3-3y6J-36tz-M5CxPM

4.查看指定设备

[root@localhost opt]# pvdisplay /dev/sdb3
  --- Physical volume ---
  PV Name               /dev/sdb3
  VG Name               myvg
  PV Size               5.00 GiB / not usable 8.00 MiB
  Allocatable           yes
  PE Size               8.00 MiB
  Total PE              639
  Free PE               639
  Allocated PE          0
  PV UUID               6gwwXq-vzJD-wxOY-ACAj-mvTI-wyh5-AAZRdp

创建和使用 lv

1.创建 lv,名称为 linux,大小为5g 从刚才创建的 myvg 卷组中拿出5g 的大小创建逻辑卷。

[root@localhost opt]# lvcreate -L 5G -n linux myvg
WARNING: LVM2_member signature detected on /dev/myvg/linux at offset 536. Wipe it? [y/n]: y
  Wiping LVM2_member signature on /dev/myvg/linux.
  Logical volume "linux" created.

2.查看基本信息

[root@localhost opt]# 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
  linux myvg -wi-a-----  5.00g

3.查看详细信息

[root@localhost opt]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg/linux
  LV Name                linux
  VG Name                myvg
  LV UUID                1OmSKi-VHPj-Tbnb-P4IV-2hAQ-u4Il-hc1yl2
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-04-22 10:49:03 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             640
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/cl/swap
  LV Name                swap
  VG Name                cl
  LV UUID                gQsXBL-tMOS-fzaJ-9Rml-U3mv-ubAF-XNc5og
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-04-18 09:42:07 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/cl/root
  LV Name                root
  VG Name                cl
  LV UUID                tYWq97-Irfv-N3bk-ilqa-SSMH-lZij-G7M9ey
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-04-18 09:42:07 +0800
  LV Status              available
  # open                 1
  LV Size                17.00 GiB
  Current LE             4351
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

4.指定设备查看

[root@localhost opt]# lvdisplay /dev/myvg/linux
  --- Logical volume ---
  LV Path                /dev/myvg/linux
  LV Name                linux
  VG Name                myvg
  LV UUID                1OmSKi-VHPj-Tbnb-P4IV-2hAQ-u4Il-hc1yl2
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-04-22 10:49:03 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             640
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

使用创建的 lv

1.格式化

[root@localhost opt]# mkfs.xfs /dev/
Display all 177 possibilities? (y or n)
[root@localhost opt]# mkfs.xfs /dev/myvg/linux
meta-data=/dev/myvg/linux        isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

2.挂载

[root@localhost opt]# mkdir /data
[root@localhost opt]# mount /dev/myvg/linux /data/
[root@localhost opt]# cd /data/
[root@localhost data]# ls

增加容量

lvm 支持在线缩小。

1.先查看 lv 大小

[root@localhost data]# 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
  linux myvg -wi-ao----  5.00g

2.然后增加5g

[root@localhost data]# lvextend -L +5G /dev/myvg/linux
  Size of logical volume myvg/linux changed from 5.00 GiB (640 extents) to 10.00 GiB (1280 extents).
  Logical volume myvg/linux successfully resized.
[root@localhost data]# 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
  linux myvg -wi-ao---- 10.00g

3.查看增加后的容量

[root@localhost data]# 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
  linux myvg -wi-ao---- 10.00g

使用lvresize 增加 lv 大小
1.查看目前的 lvs 大小

[root@localhost data]# 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
  linux myvg -wi-ao----  5.00g
  lv1   myvg -wi-ao---- 11.00g

2.目前11g,增加到12g,这里的-L 后大小一定要比当前的大小大,否则则是缩小逻辑卷的大小,另外也可以使用+来增加。

[root@localhost data]# lvresize -L 12G /dev/myvg/lv1
  Size of logical volume myvg/lv1 changed from 11.00 GiB (2816 extents) to 12.00 GiB (3072 extents).
  Logical volume myvg/lv1 successfully resized.

3.查看 lvs 大小。

[root@localhost data]# 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
  linux myvg -wi-ao----  5.00g
  lv1   myvg -wi-ao---- 12.00g

4.查看目前挂载的目录,发现还是11G

[root@localhost data]# df -h /ext4/
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/myvg-lv1   11G   25M   11G   1% /ext4

5.使用resize2fs 刷新磁盘

[root@localhost data]# resize2fs /dev/myvg/lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/lv1 is mounted on /ext4; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/myvg/lv1 is now 3145728 blocks long.

6.再次查看

[root@localhost data]# df -h /ext4/
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/myvg-lv1   12G   25M   12G   1% /ext4

增加后一定要使用resize2fs 刷新磁盘,否则容量不正确。

减小容量

1.查看容量

[root@localhost data]# 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
  linux myvg -wi-ao---- 10.00g

2.减小容量

注意:缩小容量前一定要先卸载对应的逻辑卷

先查看

[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
  lv_xfs myvg -wi-a-----  7.00g
  mylv1  myvg -wi-ao----  5.00g

查看挂载的容量

[root@localhost /]# df -h /mnt/data
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv1  4.8G   20M  4.6G   1% /mnt/data

先缩小文件系统的大小,提示需要先 umount

[root@localhost /]# resize2fs /dev/myvg/mylv1 400M
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv1 is mounted on /mnt/data; on-line resizing required
resize2fs: On-line shrinking not supported

取消挂载

[root@localhost /]# umount /mnt/data

再次运行刚才的命令,提示需要运行 e2fsck -f /dev/myvg/mylv1

[root@localhost /]# resize2fs /dev/myvg/mylv1 400M
resize2fs 1.42.9 (28-Dec-2013)
Please run 'e2fsck -f /dev/myvg/mylv1' first.

执行e2fsck -f /dev/myvg/mylv1

[root@localhost /]# e2fsck -f /dev/myvg/mylv1
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/myvg/mylv1: 11/327680 files (0.0% non-contiguous), 58462/1310720 blocks

再次执行刚才的命令

[root@localhost /]# resize2fs /dev/myvg/mylv1 400M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv1 to 102400 (4k) blocks.
The filesystem on /dev/myvg/mylv1 is now 102400 blocks long.

OK,成功了,然后在缩小逻辑卷

[root@localhost /]# lvresize -L 400M /dev/myvg/mylv1
  WARNING: Reducing active logical volume to 400.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv1? [y/n]: y
  Size of logical volume myvg/mylv1 changed from 5.00 GiB (1280 extents) to 400.00 MiB (100 extents).
  Logical volume myvg/mylv1 successfully resized.

查看 lv 的大小,已经是400M 了

[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
  lv_xfs myvg -wi-a-----   7.00g
  mylv1  myvg -wi-a----- 400.00m

重新挂载

[root@localhost /]# mount /dev/myvg/mylv1 /mnt/data

查看挂载后的大小,一切正常

[root@localhost /]# df -h /mnt/data
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv1  264M  7.6M  229M   4% /mnt/data

4.xfs 格式扩容或减小挂载出错

[root@localhost /]# resize2fs /dev/myvg/lv_xfs
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/myvg/lv_xfs
Couldn't find valid filesystem superblock.
#xfs 格式需要使用 xfs_growfs命令
[root@localhost /]# xfs_growfs /dev/myvg/lv_xfs
meta-data=/dev/mapper/myvg-lv_xfs isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1310720 to 1835008
[root@localhost /]# clear
[root@localhost /]# df -h /mnt/data1/
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/myvg-lv_xfs  7.0G   33M  7.0G   1% /mnt/data1
[root@localhost /]#

删除

删除的顺序是先 lv–> vg —> pv 的顺序

删除 lv

1.先卸载

[root@localhost /]# umount /dev/myvg/linux

2.删除 lv

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

3.查看 lv

[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

删除 vg

1.删除 vg

[root@localhost /]# vgremove myvg
  Volume group "myvg" successfully removed

2.查看 vg

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

删除 pv

1.删除 pv

[root@localhost /]# pvremove /dev/sdb{1,2,3,4}
  Labels on physical volume "/dev/sdb1" successfully wiped.
  Labels on physical volume "/dev/sdb2" successfully wiped.
  Labels on physical volume "/dev/sdb3" successfully wiped.
  Labels on physical volume "/dev/sdb4" successfully wiped.

2.查看 pv

[root@localhost /]# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda2  cl lvm2 a--  19.00g    0

扩充 VG

1.先分区

[root@localhost /]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.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/sdc: 21.5 GB, 21474836480 bytes, 41943040 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
Disk label type: dos
Disk identifier: 0x07c19514

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41943039    20970496    5  Extended
/dev/sdc5            4096     1028095      512000   83  Linux

Command (m for help): n
Partition type:
   p   primary (0 primary, 1 extended, 3 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 6
First sector (1030144-41943039, default 1030144):
Using default value 1030144
Last sector, +sectors or +size{K,M,G} (1030144-41943039, default 41943039):
Using default value 41943039
Partition 6 of type Linux and of size 19.5 GiB is set

Command (m for help): p

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 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
Disk label type: dos
Disk identifier: 0x07c19514

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41943039    20970496    5  Extended
/dev/sdc5            4096     1028095      512000   83  Linux
/dev/sdc6         1030144    41943039    20456448   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

2.添加 pv

[root@localhost /]# pvcreate /dev/sdc6
  Physical volume "/dev/sdc6" successfully created.

3.查看 pv

[root@localhost /]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  cl   lvm2 a--  19.00g     0
  /dev/sdb1  myvg lvm2 a--  10.00g  9.61g
  /dev/sdb2  myvg lvm2 a--  10.00g  3.00g
  /dev/sdc6       lvm2 ---  19.51g 19.51g

4.扩充 vg,将 sdc6的容量添加到 vg 卷组 myvg 中

[root@localhost /]# vgextend myvg /dev/sdc6
  Volume group "myvg" successfully extended
[root@localhost /]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  cl     1   2   0 wz--n- 19.00g     0
  myvg   3   2   0 wz--n- 39.50g 32.11g

重读分区表

如图分区后提示分区不存在,则输入partprobe 刷新分区表

[root@localhost /]# partprobe