lvm

这篇我们来认识一下lvm

它是Linux环境下对磁盘分区进行管理的一种机制,Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。


这篇我们主要讲

1.lvm的基本理解
2.针对不同文件系统lvm设备的扩大和缩减

3.lvm的快照

4.lvm的删除




(一)lvm的基本理解 



一.lvm名词定义

lvm    逻辑卷,可以让设备自由伸缩的一个设备管理软件
pv    物理卷 (安装lvm软件的物理分区为物理卷)
vg    物理卷组 (多个物理卷的组合)
pe    物理拓展,lvm最小的存储单元  (物理卷中的一个单位)

lvm    逻辑卷,时最终我们使用的可以伸缩的设备  (最后可使用的设备)



二.lvm的制作


0.[root@foundation114 ~]# watch -n 1 'pvs; echo ------------;vgs;echo -----------;lvs;echo -----------; df -h /zl' ##监控命令


1.[root@foundation114 ~]# fdisk /dev/vdb ##新建分区

Command (m for help): p
/dev/vdb1            2048     1026047      512000   83  Linux
/dev/vdb2         1026048     1640447      307200   83  Linux



2.Command (m for help): t ##修改分区标签为lvm

Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048     1026047      512000   8e  Linux LVM
/dev/vdb2         1026048     1640447      307200   8e  Linux LVM



3.[root@foundation114 ~]# pvcreate /dev/vdb1  ##在物理分区中安装lvm软件创建物理卷

  Physical volume "/dev/vdb1" successfully created



4.[root@foundation114 ~]# vgcreate vg0 /dev/vdb1 ## 用制作好的/dev/vdb1这个物理卷制作一个物理卷组 名字为vg0(自定义)

  Volume group "vg0" successfully created



5.[root@foundation114 ~]# lvcreate -L 100M -n lv0 vg0 ##名字为lv0(自定义名字)在vg0这个组中建立出lv0设备 -L 指定设备大小 -n 指定设备名字

  Logical volume "lv0" created



6.[root@foundation114 ~]# mkfs.xfs /dev/vg0/lv0 ##格式化设备

meta-data=/dev/vg0/lv0           isize=256    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0



7.[root@foundation114 ~]# mount /dev/vg0/lv0 /zl ##挂载设备 使设备投入使用

 PV         VG   Fmt  Attr PSize   PFree       ##物理卷组
  /dev/vdb1  vg0  lvm2 a--  496.00m 396.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree       ##逻辑卷
  vg0    1   1   0 wz--n- 496.00m 396.00m
-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert  ##lvm设备
  lv0  vg0  -wi-ao---- 100.00m
-----------
Filesystem         Size  Used Avail Use% Mounted on  ##lvm的文件系统
/dev/mapper/vg0-lv0   97M  5.2M   92M   6% /zl








(二)针对不同文件系统lvm设备的扩大和缩减

注意:扩大时 先修改设备再修改文件系统
         缩减时 先修改文件系统再修改设备
         在格式化设备时 要卸载设备


一.针对xfs文件系统


(1)当vg中容量剩余充足的时候


 

1.[root@foundation114 ~]# lvextend -L 400M /dev/vg0/lv0 ##扩大lvm设备到400M

  Extending logical volume lv0 to 400.00 MiB
  Logical volume lv0 successfully resized

  PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1  vg0  lvm2 a--  496.00m 96.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    1   1   0 wz--n- 496.00m 96.00m  
-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert  ##lvm扩大到400M
  lv0  vg0  -wi-ao---- 400.00m
-----------
Filesystem         Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0   97M  5.2M   92M   6% /zl    ##文件系统不会直接随着设备大小的改变而改变 需要手动更改



2.[root@foundation114 ~]# xfs_growfs /dev/vg0/lv0 ##设定文件系统大小和设备同步

meta-data=/dev/mapper/vg0-lv0    isize=256    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 25600 to 102400

 PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1  vg0  lvm2 a--  496.00m 96.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    1   1   0 wz--n- 496.00m 96.00m
-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 400.00m
-----------
Filesystem         Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0  397M  5.6M  392M   2% /zl





 

(2)当vg中剩余容量不足的时候

 

1.[root@foundation114 ~]# pvcreate /dev/vdb2    ##在pv中增加一块设备/dev/vdb2

  Physical volume "/dev/vdb2" successfully created

  PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1  vg0  lvm2 a--  496.00m  96.00m
  /dev/vdb2      lvm2 a--  300.00m 300.00m



2.[root@foundation114 ~]# vgextend vg0 /dev/vdb2  ##把新建立的/dev/vdb2添加到vg0中

  Volume group "vg0" successfully extended

 PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1  vg0  lvm2 a--  496.00m  96.00m
  /dev/vdb2  vg0  lvm2 a--  296.00m 296.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    2   1   0 wz--n- 792.00m 392.00m



3.[root@foundation114 ~]# lvextend -L 700M /dev/vg0/lv0 ##扩大lvm设备到700M

  Extending logical volume lv0 to 700.00 MiB
  Logical volume lv0 successfully resized

  PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1  vg0  lvm2 a--  496.00m     0
  /dev/vdb2  vg0  lvm2 a--  296.00m 92.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    2   1   0 wz--n- 792.00m 92.00m
-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 700.00m
-----------
Filesystem         Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0  397M  5.6M  392M   2% /zl



4.[root@foundation114 ~]# xfs_growfs /dev/vg0/lv0 ##设定文件系统大小和设备同步

meta-data=/dev/mapper/vg0-lv0    isize=256    agcount=16, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=102400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 102400 to 179200

  PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1  vg0  lvm2 a--  496.00m     0
  /dev/vdb2  vg0  lvm2 a--  296.00m 92.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    2   1   0 wz--n- 792.00m 92.00m
-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 700.00m
-----------
Filesystem         Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0  697M  6.0M  691M   1% /zl





二.针对xfs文件系统


 

0.[root@foundation114 ~]# umount /dev/vg0/lv0  ####卸载设备,因为文件系统拉伸缩减不支持在线操作

[root@foundation114 ~]# mkfs.ext4 /dev/vg0/lv0  ##格式化文件 将xfs改为ext4
[root@foundation114 ~]# blkid
/dev/vda1: UUID="9bf6b9f7-92ad-441b-848e-0257cbb883d1" TYPE="xfs" 
/dev/vdb1: UUID="h4g0uU-8CXy-DaC8-2dxW-Icpb-LzfV-LznnT4" TYPE="LVM2_member" 
/dev/vdb2: UUID="NU2g9M-r31f-hIxo-PLSt-VJzY-gJr3-f1P1n6" TYPE="LVM2_member" 
/dev/mapper/vg0-lv0: UUID="bec1c795-d3e5-4154-9deb-9c4a39bc3cd0" TYPE="ext4"



(1)对设备


##拉伸

1.[root@foundation114 ~]# lvextend -L 750M /dev/vg0/lv0     ##扩大lvm设备到750M

  Rounding size to boundary between physical extents: 752.00 MiB
  Extending logical volume lv0 to 752.00 MiB
  Logical volume lv0 successfully resized

  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 752.00m
-----------
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0  673M  1.4M  623M   1% /zl     ##文件系统没有改变



2.[root@foundation114 ~]# resize2fs  /dev/vg0/lv0   ##设定文件系统大小和设备同步

resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg0/lv0 is mounted on /zl; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/lv0 is now 192512 blocks long.

-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 752.00m
-----------
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0  725M  1.4M  675M   1% /zl



##缩减

1.[root@foundation114 ~]# umount /zl    ##卸载设备,因为文件系统缩减不支持在线操作

2.[root@foundation114 ~]# e2fsck -f /dev/vg0/lv0   ##检测文件系统,确定文件系统中已有数据大小防止过度缩减

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/lv0: 11/44832 files (0.0% non-contiguous), 7272/192512 blocks



3.[root@foundation114 ~]# resize2fs /dev/vg0/lv0 200M ##把文件系统缩减到200M

resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 51200 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 51200 blocks long.



4.[root@foundation114 ~]# mount /dev/vg0/lv0 /zl    ##挂载设备 查看文件系统大小

-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 752.00m
-----------
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0  181M  720K  167M   1% /zl



5.[root@foundation114 ~]# lvreduce -L 200M  /dev/vg0/lv0 ##设备缩减到200M

  WARNING: Reducing active and open logical volume to 200.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv0? [y/n]: y
  Reducing logical volume lv0 to 200.00 MiB
  Logical volume lv0 successfully resized
-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 200.00m
-----------
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0  181M  720K  167M   1% /zl





(2)对卷组

0.当要移除分区 需要把分区中的数据迁移到其他的物理卷(pv)中

 PV         VG   Fmt  Attr PSize   PFree       
  /dev/vdb1  vg0  lvm2 a--  496.00m 296.00m  ##使用了200M
  /dev/vdb2  vg0  lvm2 a--  296.00m 296.00m  ##没有使用
[root@foundation114 ~]# pvmove /dev/vdb1 /dev/vdb2  ##将1中数据迁移到2中
  /dev/vdb1: Moved: 22.0%
  /dev/vdb1: Moved: 100.0%
  PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1  vg0  lvm2 a--  496.00m 496.00m ##没有使用
  /dev/vdb2  vg0  lvm2 a--  296.00m  96.00m ##使用了200M




1.[root@foundation114 ~]# vgreduce vg0 /dev/vdb1 ##把vg0中的/dev/vdb1删除

  Removed "/dev/vdb1" from volume group "vg0"
 PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1       lvm2 a--  500.00m 500.00m
  /dev/vdb2  vg0  lvm2 a--  296.00m  96.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    1   1   0 wz--n- 296.00m 96.00m  ##逻辑卷中pv只剩一个了
-----------



2.[root@foundation114 ~]# pvremove /dev/vdb1   ##把/dev/vdb1上的lvm管理信息删除

  Labels on physical volume "/dev/vdb1" successfully wiped
  PV         VG   Fmt  Attr PSize   PFree   ##没有/dev/vdb1信息
  /dev/vdb2  vg0  lvm2 a--  296.00m 96.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    1   1   0 wz--n- 296.00m 96.00m









(四)lvm的快照

 

0.在设备挂载目录下建立文件

[root@foundation114 zl]# touch file{1..5}
[root@foundation114 zl]# ls
file1  file2  file3  file4  file5  lost+found



1.[root@foundation114 ~]# umount /zl ##卸载设备 使设备中的原始数据不被更改


2.[root@foundation114 ~]# lvcreate -L 20M -n lv0backup -s /dev/vg0/lv0 ##给/dev/vg0/lv0建立快照,-L 指定快照大小,-n指定快照名字 -s指定快照模板设备

  Logical volume "lv0backup" created



3.[root@foundation114 ~]# mount /dev/vg0/lv0backup /zl ##将快照挂载在目录上 因为快照看的时原设备的文件 所以不需要格式化快照

4.[root@foundation114 ~]# cd /zl

[root@foundation114 zl]# ls
file1  file2  file3  file4  file5  lost+found



注意:当快照设备里的数据被更改,如果想还原,删除快照设备,在重新建立快照即可

 

0.[root@foundation114 zl]# rm -fr *

[root@foundation114 zl]#ls



1.[root@foundation114 ~]# umount /zl  ##卸载设备

2.[root@foundation114 ~]# lvremove /dev/vg0/lv0backup##移除快照

Do you really want to remove active logical volume lv0backup? [y/n]: y
  Logical volume "lv0backup" successfully removed



3.[root@foundation114 ~]# lvcreate -L 20M -n lv0backup -s /dev/vg0/lv0##新建快照

  Logical volume "lv0backup" created

4.[root@foundation114 ~]# mount /dev/vg0/lv0backup /zl##挂载设备

[root@foundation114 ~]# cd /zl ##查看文件 已恢复
[root@foundation114 zl]# ls
file1  file2  file3  file4  file5  lost+found








(五)删除lvm



0.状态显示



一.正常删除

1.[root@foundation114 ~]# umount /zl ##卸载设备

2.[root@foundation114 ~]# lvremove /dev/vg0/lv0backup ##移除lvm

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



3.[root@foundation114 ~]# vgremove /dev/vg0 ##移除vg

  Volume group "vg0" successfully removed



4.[root@foundation114 ~]# pvremove /dev/vdb2 ##移除pv

  Labels on physical volume "/dev/vdb2" successfully wiped
[root@foundation114 ~]# pvremove /dev/vdb1
  Labels on physical volume "/dev/vdb1" successfully wiped



5.[root@foundation114 ~]# fdisk /dev/vdb  ##删除分区

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): d
Selected partition 1
Partition 1 is deleted



6.[root@foundation114 ~]# fdisk -l ##查看 已删除

Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 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: 0x00013f3e
   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    20970332    10484142+  83  Linux
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 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: 0x8466bcb2
   Device Boot      Start         End      Blocks   Id  System




二.错误删除并排错

0.1.状态



0.2.[root@foundation114 ~]# fdisk /dev/vdb  ##再未将设备移除lvm vg pv时 直接删除分区

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): d
Partition number (1,2, default 2): 2
Partition 2 is deleted

[root@foundation114 ~]# partprobe  ##同步分区表后

##出现如下报错 设备丢失


###解决

[root@foundation114 ~]# vgreduce vg0 --removemissing  ##删除vg0中丢失的设备
  PV rs6qJv-IZmF-2gmb-ZGul-aLkB-0etA-2XcI7V not recognised. Is the device missing?
  PV rs6qJv-IZmF-2gmb-ZGul-aLkB-0etA-2XcI7V not recognised. Is the device missing?
  Wrote out consistent volume group vg0



##删除所有报错设备
  PV         VG   Fmt  Attr PSize   PFree
  /dev/vdb1  vg0  lvm2 a--  496.00m 196.00m
------------
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    1   1   0 wz--n- 496.00m 196.00m
-----------
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 300.00m
-----------
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0  297M   16M  282M   6% /zl


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值