逻辑卷管理LVM

本文详细介绍逻辑卷管理(LVM)的概念、实现流程及应用场景,包括物理卷(PV)、卷组(VG)、逻辑卷(LV)的创建与管理,以及LVM快照的创建与还原过程。
(来源于网络整理)

简介 

逻辑卷管理LVM(Logical Volume Manager) 
   》LVM可以弹性调整文件系统的容量 
  》LVM 可以整合多个实体partition 让其看起来就像是一个磁盘而且还可以新增或移partition 到这个 LVM 管理的磁盘当中。 
 》LVM 的作法是将几个实体的partitions (或 disk) 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可使用分区 (LV), 最终挂载使用。       》LVM可以制作快照,关于快照的原理可以查看https://juejin.im/post/5b4d5db16fb9a04f844abe44.

名词解释: 

》Physical Volume, PV,逻辑卷 :
       partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过 pvcreate 的指令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是通过 fdisk 啦!
》Volume Group, VG, 卷组 :
       LVM 大磁盘就是将许多 PV 整合成这个 VG 。所以 VG 就是 LVM 组合起来的大磁盘。使用32位的 Linux 系统时,基本上 LV最大仅能支持到 65534 个 PE 而已,若使用默认的 PE 为 4MB 的情况下, 最大容量则仅能达到约 256GB 而已。
》Physical Extent, PE, 物理扩展块 :
        这是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是借由写入 PE来处理的。简单的说,这个 PE 就有点像文件系统里面的 block 大小
》Logical Volume, LV, 逻辑卷 :
       最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区,因此 LV的设备文件名通常指定为“ /dev/vgname/lvname ”的样式!

实现流程

依据写入机制的不同,而有两种方式:
      》线性模式 (linear):假如将 /dev/vda1, /dev/vdb1 这两个 partition 加入到 VG 当中,并且整个 VG 只有一个 LV 时,那么所谓的线性模式就是:当 /dev/vda1 的容量用完之后,/dev/vdb1 的硬盘才会被使用这也是所建议的模式。
      》交错模式 (triped):将一笔数据拆成两部分,分别写入 /dev/vda1 与 /dev/vdb1 的意思,如此一来,一份数据用两块硬盘来写入,理论上读写的性能会比较好。 


LVM实作流程
 》LVM 必需要核心有支持且需要安装 lvm2 这个软件。 

      sudo apt-get install lvm2  //安装lvm,才会有下面这些命令复制代码

》PV阶段
与 PV 有关的指令:
pvcreate :将实体 partition 创建成为 PV ;
pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
pvdisplay :显示出目前系统上面的 PV 状态;
pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。

# 创建PV

[root@CentOS ~]# pvcreate /dev/sdb{1,2,3,5}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created

# 检查是否存在PV  

[root@CentOS ~]# pvscan 
  PV /dev/sdb1                      lvm2 [2.01 GiB]
  PV /dev/sdb2                      lvm2 [2.01 GiB]
  Total: 4 [8.03 GiB] / in use: 0 [0   ] / in no VG: 4 [8.03 GiB]

# 详细列出每个PV的信息
[root@CentOS ~]# pvdisplay 
  "/dev/sdb1" is a new physical volume of "2.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               2.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               QTrS2e-1b6T-qjCV-3HDG-PcR0-dOeM-DV1V9W
1234567891011121314151617181920212223242526272829303132333435363738复制代码

  

》VG阶段
与VG有关的命令:
vgcreate :就是主要创建 VG 的指令啦!他的参数比较多,等一下介绍。
vgscan :搜寻系统上面是否有 VG 存在
vgdisplay :显示目前系统上面的 VG 状态;
vgextend :在 VG 内增加额外的 PV ;
vgreduce :在 VG 内移除 PV;
vgchange :设置 VG 是否启动 (active);
vgremove :删除一个 VG
与PV不同的是,VG的名字是自定义的,PV的分区是分区的设备文件名,VG就是组合的大磁盘,名称需要自定义。

# vgcreate -s 后面接PE的大小。单位可以使m,g,t(大小写均可)
# 将/dev/sdb1-3新建一个VG,且指定PE为16MB
[root@CentOS ~]# vgcreate -s 16M kevinvg /dev/sdb{1,2,3}
  Volume group "kevinvg" successfully created

# 检查是否存在VG
[root@CentOS ~]# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "kevinvg" using metadata type lvm2

# 检查PV(用掉三个PV,剩余一个)
[root@CentOS ~]# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "kevinvg" using metadata type lvm2
[root@CentOS ~]# pvscan 
  PV /dev/sdb1   VG kevinvg         lvm2 [2.00 GiB / 2.00 GiB free]
  PV /dev/sdb2   VG kevinvg         lvm2 [2.00 GiB / 2.00 GiB free]
  PV /dev/sdb3   VG kevinvg         lvm2 [2.00 GiB / 2.00 GiB free]
  PV /dev/sdb5                      lvm2 [2.01 GiB]
  Total: 4 [8.01 GiB] / in use: 3 [6.00 GiB] / in no VG: 1 [2.01 GiB]

# 显示VG状态

[root@CentOS ~]# vgdisplay 
  --- Volume group ---
  VG Name               kevinvg
  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               6.00 GiB
  PE Size               16.00 MiB
  Total PE              384
  Alloc PE / Size       0 / 0   
  Free  PE / Size       384 / 6.00 GiB
  VG UUID               lyvGeK-tLmy-OCx9-wnVN-EQis-TJSX-I9Ykut

# 假设要给kevinvg这个VG增加容量(使用LVM格式的/dev/sdb5):

[root@CentOS ~]# vgextend kevinvg /dev/sdb5
  Volume group "kevinvg" successfully extended

# 显示VG状态

[root@CentOS ~]# vgdisplay 
  --- Volume group ---
  VG Name               kevinvg
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               8.00 GiB
  PE Size               16.00 MiB
  Total PE              512
  Alloc PE / Size       0 / 0   
  Free  PE / Size       512 / 8.00 GiB
  VG UUID               lyvGeK-tLmy-OCx9-wnVN-EQis-TJSX-I9Ykut
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980复制代码


》LV阶段
创造出 VG 这个大磁盘之后,再来就是要创建分区啦!这个分的区就是所谓的 LV 。假设要将刚刚那个 kevinvg 磁盘,分区成为 kevinlv ,整个 VG 的容量都被分配到 vbirdlv 里面去。
与LV有关的命令
lvcreate :创建 LV 啦!
lvscan :查询系统上面的 LV ;
lvdisplay :显示系统上面的 LV 状态啊!
lvextend :在 LV 里面增加容量!
lvreduce :在 LV 里面减少容量;
lvremove :删除一个 LV !
lvresize :对 LV 进行容量大小的调整!

# 删除LV用法:lvremove /dev/kevinvg/kevinlv
# lvcreate -L:后面接容量(M,G,T),最小单位PE,必须是PE的倍数
# lvcreate -l:后面接PE的个数,需要自行计算PE数量
# lvcreate -n:后面接LV的名称
# 将整个kevinvg全部分给kevinlv,注意PE共有512个(vgdisplay查看)

[root@CentOS ~]# lvcreate -l 512 -n kevinlv kevinvg
  Logical volume "kevinlv" created

# PE为16M,共512个,总大小8G,故也可以使用如下命令:
# lvcreate -L 8G -n kevinlv kevinvg
# 查看kevinlv设备文件(显示连接文件)

[root@CentOS ~]# ll /dev/kevinvg/kevinlv 
lrwxrwxrwx. 1 root root 7 Mar 19 00:07 /dev/kevinvg/kevinlv -> ../dm-0

# 查看lv状态

[root@CentOS ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/kevinvg/kevinlv
  LV Name                kevinlv
  VG Name                kevinvg
  LV UUID                1S91aJ-gdgu-lqKS-NtG8-sIhr-xTbn-O0kgJM
  LV Write Access        read/write
  LV Creation host, time CentOS, 2017-03-19 00:07:30 -0400
  LV Status              available
  # open                 0
  LV Size                8.00 GiB   # LV容量
  Current LE             512
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051复制代码

要特别注意的是, VG 的名称为 vbirdvg , 但是 LV 的名称必须使用全名!亦即是 /dev/vbirdvg/vbirdlv 才对! 后续的处理都是这样的!这点初次接触 LVM 的朋友很容易搞错!
》格式化挂载文件系统阶段

# 格式化LV(需要全名)

[root@CentOS ~]# mkfs -t ext3 /dev/kevinvg/kevinlv

# 挂载LV(需要全名)

[root@CentOS ~]# mkdir /mnt/lvm
[root@CentOS ~]# mount /dev/kevinvg/kevinlv /mnt/lvm/
[root@CentOS ~]# df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/sda2                    9.9G  7.0G  2.4G  75% /
tmpfs                        504M   84K  504M   1% /dev/shm
/dev/sda1                    194M   28M  157M  15% /boot
/dev/sda3                    9.9G  1.5G  7.9G  16% /home
/dev/mapper/kevinvg-kevinlv  7.9G  147M  7.4G   2% /mnt/lvm

# 复制文件
[root@CentOS ~]# cp -a /etc /var/log/ /mnt/lvm
123456789101112131415161718192021复制代码

LV的名称构建成/dev/kevinvg/kevinlv是为了让用户能够直观地找到我们所需要的数据,实际上LVM使用的设备放置在/dev/mapper目录下。


放大LV容量
具体流程:
》用fdisk设置新的具有8e system ID的分区
》利用pvcreate创建PV
》利用vgentend将PV加入我们的kevinvg
》利用lvreszie将新加入的PV内的PE加入kevinlv
》通过resize2fs将文件系统的容量确实增加
文件系统格式化的时候新建的是多个block group,因此我们可以通过文件系统当中增加block group的方式来增减文件系统的量,而增减block group就是利用resize2fs。
重启后出现无法创建的情况,后来发现是自动开启RAID(/dev/md127)

# 使用fdisk创建一个新的大小为3G的LVM分区(/dev/sdb6):

[root@CentOS ~]# fdisk /dev/sdb
   Device Boot      Start         End      Blocks   Id  
/dev/sdb6            1049        1441     3156741   8e  Linux LVM
[root@CentOS ~]# partprobe  /dev/sdb
[root@CentOS ~]# fdisk -l


# 新建新的PV

[root@CentOS ~]# pvcreate /dev/sdb6
  Physical volume "/dev/sdb6" successfully created

# 查看PV状态

[root@CentOS ~]# pvscan 
  PV /dev/sdb1   VG kevinvg         lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb2   VG kevinvg         lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb3   VG kevinvg         lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb5   VG kevinvg         lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb6                      lvm2 [3.01 GiB]
  Total: 5 [11.01 GiB] / in use: 4 [8.00 GiB] / in no VG: 1 [3.01 GiB]


# 放大VG

[root@CentOS ~]# vgextend kevinvg /dev/sdb6
  Volume group "kevinvg" successfully extended

# 查看pv状态

[root@CentOS ~]# pvdisplay 


# 查看VG状态

[root@CentOS ~]# vgdisplay 
  --- Volume group ---
  VG Name               kevinvg
  System ID             
  Format                lvm2
  Metadata Areas        5
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                5
  Act PV                5
  VG Size               11.00 GiB
  PE Size               16.00 MiB
  Total PE              704
  Alloc PE / Size       512 / 8.00 GiB
  Free  PE / Size       192 / 3.00 GiB
  VG UUID               lyvGeK-tLmy-OCx9-wnVN-EQis-TJSX-I9Ykut


# 放大LV(查看上面空闲192个PE)

[root@CentOS ~]# lvresize -l +192 /dev/kevinvg/kevinlv 
  Extending logical volume kevinlv to 11.00 GiB
  Logical volume kevinlv successfully resized

# 查看lv状态

[root@CentOS ~]# lvdisplay 

# 查看磁盘

[root@CentOS ~]# df /mnt/lvm/
Filesystem                  1K-blocks   Used Available Use% Mounted on
/dev/mapper/kevinvg-kevinlv   8256952 200764   7636760   3% /mnt/lvm

# 注意:1K-blocks:8256952 



# 查看文件系统

[root@CentOS ~]# dumpe2fs /dev/kevinvg/kevinlv 


# resize2fs -f:强行进行resize操作


# 用法:resize2fs [-f] [device] [size](size必须带单位M,G)


# 完整地将整个LV人类扩充到整个文件系统

[root@CentOS ~]# resize2fs /dev/kevinvg/kevinlv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/kevinvg/kevinlv is mounted on /mnt/lvm; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/kevinvg/kevinlv to 2883584 (4k) blocks.
The filesystem on /dev/kevinvg/kevinlv is now 2883584 blocks long.

[root@CentOS ~]# df /mnt/lvm/
Filesystem                  1K-blocks   Used Available Use% Mounted on
/dev/mapper/kevinvg-kevinlv  11353328 202808  10573844   2% /mnt/lvm

# 注意:1K-blocks: 11353328

[root@CentOS ~]# ll /mnt/lvm/
total 32
drwxr-xr-x. 154 root root 12288 Mar 19 02:17 etc
drwxr-xr-x.  20 root root  4096 Mar 19 02:05 log
drwx------.   2 root root 16384 Mar 19 02:17 lost+found


# 查看文件系统

[root@CentOS ~]# dumpe2fs /dev/kevinvg/kevinlv 

# 发现后续的blockgroup增加了
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120复制代码


缩小LV容量

假设我们想将/dev/sdb6抽离出来

#先找出/dev/sdb6的容量大小,并尝试计算系统缩小到多少


# 查看PV详细信息

[root@CentOS ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb6
  VG Name               kevinvg
  PV Size               3.01 GiB / not usable 10.75 MiB
  Allocatable           yes (but full)
  PE Size               16.00 MiB
  Total PE              192
  Free PE               0
  Allocated PE          192
  PV UUID               vMlc0C-KrSk-29ka-aeyw-nSVE-Q80o-LYKBte

# 内含192个PE,每个PE16M,计算得共3G大小



# 查看PV状态

[root@CentOS ~]# pvscan 
  PV /dev/sdb1   VG kevinvg   lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb2   VG kevinvg   lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb3   VG kevinvg   lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb5   VG kevinvg   lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb6   VG kevinvg   lvm2 [3.00 GiB / 0    free]
  Total: 5 [11.00 GiB] / in use: 5 [11.00 GiB] / in no VG: 0 [0   ]

# 计算得去掉/dev/sdb6后的总容量:2+2+2+2=8G



# 直接降低PV文件系统容量:

[root@CentOS ~]# resize2fs /dev/kevinvg/kevinlv 8G
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/kevinvg/kevinlv is mounted on /mnt/lvm; on-line resizing required
On-line shrinking from 2883584 to 2097152 not supported.

# 发现不可以在线修改缩小文件系统



# 卸载重新来做PV容量缩小

[root@CentOS ~]# umount /mnt/lvm/
[root@CentOS ~]# resize2fs /dev/kevinvg/kevinlv 8G
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/kevinvg/kevinlv' first.

# 系统要求使用e2fsck -f 磁盘检查

[root@CentOS ~]# e2fsck -f /dev/kevinvg/kevinlv
e2fsck 1.41.12 (17-May-2010)
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/kevinvg/kevinlv: 3616/720896 files (0.0% non-contiguous), 95954/2883584 blocks

# 继续缩小PV容量步骤

[root@CentOS ~]# resize2fs /dev/kevinvg/kevinlv 8G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/kevinvg/kevinlv to 2097152 (4k) blocks.
The filesystem on /dev/kevinvg/kevinlv is now 2097152 blocks long.


# 重新挂载磁盘

[root@CentOS ~]# mount /dev/kevinvg/kevinlv /mnt/lvm/
[root@CentOS ~]# df /mnt/lvm/
Filesystem                  1K-blocks   Used Available Use% Mounted on
/dev/mapper/kevinvg-kevinlv   8256952 200764   7636788   3% /mnt/lvm

# 1K-blocks:8256952



# 查看/dev/sdb6这个PV上有多少PE

[root@CentOS ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb6
  VG Name               kevinvg
  PV Size               3.01 GiB / not usable 10.75 MiB
  Allocatable           yes (but full)
  PE Size               16.00 MiB
  Total PE              192
  Free PE               0
  Allocated PE          192
  PV UUID               vMlc0C-KrSk-29ka-aeyw-nSVE-Q80o-LYKBte

# 降低LV容量

[root@CentOS ~]# lvresize -l 192 /dev/kevinvg/kevinlv 
  WARNING: Reducing active and open logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce kevinlv? [y/n]: y
  Reducing logical volume kevinlv to 3.00 GiB
  Logical volume kevinlv successfully resized


# 查看lv详细信息

[root@CentOS ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/kevinvg/kevinlv
  LV Name                kevinlv
  VG Name                kevinvg
  LV UUID                iAQGBD-rciQ-2M93-VsFV-50yh-5LSB-pBqZXx
  LV Write Access        read/write
  LV Creation host, time CentOS, 2017-03-19 02:14:41 -0400
  LV Status              available
  # open                 1
  LV Size                3.00 GiB  # LV大小
  Current LE             192
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0


# 将/dev/sdb6移出VG,需要先确定/defv/sdb6完全不被使用

[root@CentOS ~]# vgreduce kevinvg /dev/sdb6
  Removed "/dev/sdb6" from volume group "kevinvg"
[root@CentOS ~]# pvremove /dev/sdb6
  Labels on physical volume "/dev/sdb6" successfully wiped
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136复制代码


LVM的系统快照

快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何数据更动了,则原始数据会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。
LVM 的磁盘快照是非常棒的“备份工具”,因为他只有备份有被更动到的数据, 文件系统内没有被变更的数据依旧保持在原本的区块内,但是 LVM 快照功能会知道那些数据放置在哪里, 因此“快照”当时的文件系统就得以“备份”下来,且快照所占用的容量又非常小。
快照区与原本的 LV 共享很多 PE 区块,因此快照区与被快照的 LV 必须要在同一个 VG 上头。
下面我们针对传统 LV 磁盘进行快照的创建,大致流程为:
   》预计被拿来备份的原始 LV 为 /dev/vbirdvg/vbirdlv
   》使用传统方式快照创建,原始碟为 /dev/vbirdvg/vbirdlv,快照名称为 vbirdsnap1,容量为 vbirdvg 的所有剩余容量
   》传统快照区的创建

# 创建快照区
# 先将de/sdb6加入到VG后,才能继续新建快照区
# 先查看VG还剩多少容量

[root@CentOS ~]# vgdisplay 
  Free  PE / Size       0 / 0

# 若没有空余容量,则新增PV后加入VG

[root@CentOS ~]# pvcreate /dev/sdb10
  Physical volume "/dev/sdb10" successfully created
[root@CentOS ~]# vgextend kevinvg /dev/sdb10
  Volume group "kevinvg" successfully extended
[root@CentOS ~]# vgdisplay 
  Free  PE / Size       128 / 2.00 GiB
  # 空闲128个PE

# 创建快照区,取名kevinss,给60个PE
# lvcreate -s:快照(snapshot)


# lvcreate -n:后面接设备名


# lvcreate -l:后面接多少个PE

[root@CentOS ~]# lvcreate -l 60 -s -n kevinss /dev/kevinvg/kevinlv 
  Logical volume "kevinss" created

# 快照区的VG与原本的/dev/kevinvg/kevinlv容量相同

[root@CentOS ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/kevinvg/kevinss
  LV Name                kevinss
  VG Name                kevinvg
  LV UUID                ElEX59-bnfx-A8c1-9Vn5-9y27-AfRD-gmpbh5
  LV Write Access        read/write
  LV Creation host, time CentOS, 2017-03-19 03:31:21 -0400
  LV snapshot status     active destination for kevinlv
  LV Status              available
  # open                 0
  LV Size                9.00 GiB
  Current LE             576
  COW-table size         960.00 MiB
  COW-table LE           60
  Allocated to snapshot  0.00%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

# 如果将设备挂载时会发现两个设备数据完全相同

[root@CentOS ~]# mkdir /mnt/snapshot
[root@CentOS ~]# 
[root@CentOS ~]# mount /dev/kevinvg/kevinss /mnt/snapshot/
[root@CentOS ~]# df
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/sda2                    10321208 8213352   1583568  84% /
tmpfs                          515264      84    515180   1% /dev/shm
/dev/sda1                      198337   28183    159914  15% /boot
/dev/sda3                    10321208 1549940   8246980  16% /home
/dev/mapper/kevinvg-kevinlv   9289080  203060   8614164   3% /mnt/lvm
/dev/mapper/kevinvg-kevinss   9289080  203060   8614164   3% /mnt/snapshot
[root@CentOS ~]# umount /mnt/snapshot/
    
# 利用快照区复原系统
# 要注意的是,你要复原的数据量不能够高于快照区所能负载的实际容量。
# 将原本的/dev/kevinvh/kevinlv内容做更改,增减一些目录

[root@CentOS ~]# df /mnt/lvm/
Filesystem                  1K-blocks   Used Available Use% Mounted on
/dev/mapper/kevinvg-kevinlv   9289080 203060   8614164   3% /mnt/lvm
[root@CentOS ~]# df /mnt/lvm/
Filesystem                  1K-blocks   Used Available Use% Mounted on
/dev/mapper/kevinvg-kevinlv   9289080 203060   8614164   3% /mnt/lvm
[root@CentOS ~]# ll /mnt/lvm/
total 32
drwxr-xr-x. 154 root root 12288 Mar 19 03:25 etc
drwxr-xr-x.  20 root root  4096 Mar 19 02:05 log
drwx------.   2 root root 16384 Mar 19 03:25 lost+found
[root@CentOS ~]# rm -rf /mnt/lvm/log/
[root@CentOS ~]# cp -a /boot/ /lib/ /sbin/ /mnt/lvm/
[root@CentOS ~]# ll /mnt/lvm/
total 56
dr-xr-xr-x.   5 root root  4096 Mar  1 16:44 boot
drwxr-xr-x. 154 root root 12288 Mar 19 03:25 etc
dr-xr-xr-x.  20 root root 12288 Mar  1 20:23 lib
drwx------.   2 root root 16384 Mar 19 03:25 lost+found
dr-xr-xr-x.   2 root root 12288 Mar  1 20:24 sbin
[root@CentOS ~]# lvdisplay /dev/kevinvg/kevinss 
  Allocated to snapshot  19.46%


# 利用快照区原本的文件系统备份

[root@CentOS ~]# df
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/sda2                    10321208 8213320   1583600  84% /
tmpfs                          515264      84    515180   1% /dev/shm
/dev/sda1                      198337   28183    159914  15% /boot
/dev/sda3                    10321208 1549940   8246980  16% /home
/dev/mapper/kevinvg-kevinlv   9289080  385800   8431424   5% /mnt/lvm
/dev/mapper/kevinvg-kevinss   9289080  203060   8614164   3% /mnt/snapshot
[root@CentOS ~]# mkdir -p /backups
[root@CentOS ~]# cd /mnt/snapshot/
[root@CentOS snapshot]# tar -jcv -f /backups/lvm.tar.bz2 *

# 进行还原,这里是采用备份的方式进行还原。
# 将kevinss卸除并删除

[root@CentOS ~]# umount /mnt/snapshot/
[root@CentOS ~]# lvremove /dev/kevinvg/kevinss
Do you really want to remove active logical volume kevinss? [y/n]: y
  Logical volume "kevinss" successfully removed
[root@CentOS ~]# umount /mnt/lvm/
[root@CentOS ~]# mkfs -t ext4 /dev/kevinvg/kevinlv 
[root@CentOS ~]# mount /dev/kevinvg/kevinlv /mnt/lvm/
[root@CentOS ~]# tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm/
[root@CentOS ~]# ll /mnt/lvm/
total 32
drwxr-xr-x. 154 root root 12288 Mar 19 03:25 etc
drwxr-xr-x.  20 root root  4096 Mar 19 02:05 log
drwx------.   2 root root 16384 Mar 19 03:25 lost+found

# 与最初的文件相比是相同的
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148复制代码

利用快照区进行各项练习与测试的任务,再以原系统还原系统换个角度来想想,我们将原本的 vbirdlv 当作备份数据,然后将 vbirdsnap1 当作实际在运行中的数据, 任何测试的动作都在 vbirdsnap1 这个快照区当中测试,那么当测试完毕要将测试的数据删除时,只要将快照区删去即可! 而要复制一个 vbirdlv 的系统,再作另外一个快照区即可!这样是否非常方便啊? 这对于教学环境中每年都要帮学生制作一个练习环境主机的测试,非常有帮助

# 新建一个大一些的快照区,让我们将/dev/sdb10的PE全部给快照区

[root@CentOS ~]# pvscan 
  PV /dev/sdb6    VG kevinvg   lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb7    VG kevinvg   lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb8    VG kevinvg   lvm2 [3.00 GiB / 0    free]
  PV /dev/sdb9    VG kevinvg   lvm2 [2.00 GiB / 0    free]
  PV /dev/sdb10   VG kevinvg   lvm2 [2.00 GiB / 2.00 GiB free]
  Total: 5 [11.00 GiB] / in use: 5 [11.00 GiB] / in no VG: 0 [0   ]
[root@CentOS ~]# vgdisplay 
  Free  PE / Size       128 / 2.00 GiB
[root@CentOS ~]# lvcreate -s -l 128 -n kevinss /dev/kevinvg/kevinlv 
  Logical volume "kevinss" created
[root@CentOS ~]# lvdisplay /dev/kevinvg/kevinss 
  Current LE             576
  COW-table size         2.00 GiB
  COW-table LE           128

# 隐藏kevinlv,挂载kevinss

[root@CentOS ~]# umount /mnt/lvm/
[root@CentOS ~]# mount /dev/kevinvg/kevinss /mnt/snapshot/
[root@CentOS ~]# df /mnt/snapshot/
Filesystem                  1K-blocks   Used Available Use% Mounted on
/dev/mapper/kevinvg-kevinss   9289080 203188   8614036   3% /mnt/snapshot

# 开始恶搞

[root@CentOS ~]# rm -rf /mnt/snapshot/etc/ /mnt/snapshot/log/
[root@CentOS ~]# cp -a /boot/ /lib/ /sbin/ /mnt/snapshot/
[root@CentOS ~]# df /mnt/snapshot/
Filesystem                  1K-blocks   Used Available Use% Mounted on
/dev/mapper/kevinvg-kevinss   9289080 342852   8474372   4% /mnt/snapshot
[root@CentOS ~]# ll /mnt/snapshot/
total 44
dr-xr-xr-x.  5 root root  4096 Mar  1 16:44 boot
dr-xr-xr-x. 20 root root 12288 Mar  1 20:23 lib
drwx------.  2 root root 16384 Mar 19 03:25 lost+found
dr-xr-xr-x.  2 root root 12288 Mar  1 20:24 sbin

[root@CentOS ~]# mount /dev/kevinvg/kevinlv /mnt/lvm/
[root@CentOS ~]# ll /mnt/lvm/
total 32
drwxr-xr-x. 154 root root 12288 Mar 19 03:25 etc
drwxr-xr-x.  20 root root  4096 Mar 19 02:05 log
drwx------.   2 root root 16384 Mar 19 03:25 lost+found

# 不论在快照区做什么,都不会影响原本的数据
# 假设快照区玩坏了,需要还原,
# 还原原本不能快照区的数据,回到与原文件系统相同的信息

[root@CentOS ~]# umount /mnt/snapshot/
[root@CentOS ~]# lvremove /dev/kevinvg/kevinss 
Do you really want to remove active logical volume kevinss? [y/n]: y
  Logical volume "kevinss" successfully removed
[root@CentOS ~]# lvcreate -s -l 128 -n kevinss /dev/kevinvg/kevinlv 
  Logical volume "kevinss" created
[root@CentOS ~]# mount /dev/kevinvg/kevinss /mnt/snapshot/
[root@CentOS ~]# ll /mnt/snapshot/
total 32
drwxr-xr-x. 154 root root 12288 Mar 19 03:25 etc
drwxr-xr-x.  20 root root  4096 Mar 19 02:05 log
drwx------.   2 root root 16384 Mar 19 03:25 lost+found
[root@CentOS ~]# 

# 数据已恢复

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374复制代码


LVM相关命令汇整与LVM的关闭

会玩 LVM 还不行!你必须要会移除系统内的 LVM 喔!因为你的实体 partition 已经被使用到LVM 去, 如果你还没有将 LVM 关闭就直接将那些 partition 删除或转为其他用途的话,系统是会发生很大的问题的! 所以啰,你必须要知道如何将 LVM 的设备关闭并移除才行! 依据以下的流程来处理即可:
    》先卸载系统上面的 LVM 文件系统 (包括快照与所有 LV);
    》使用 lvremove 移除 LV ;
    》使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;
    》使用 vgremove 移除 VG:
    》使用 pvremove 移除 PV;
    》最后,使用 fdisk 修改 ID 回来。

[root@CentOS ~]# umount /mnt/lvm/
[root@CentOS ~]# umount /mnt/snapshot/

# 先移除快照

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

# 再还原系统

[root@CentOS ~]# lvremove /dev/kevinvg/kevinlv 
Do you really want to remove active logical volume kevinlv? [y/n]: y
  Logical volume "kevinlv" successfully removed
[root@CentOS ~]# vgchange -a n kevinvg
  0 logical volume(s) in volume group "kevinvg" now active
[root@CentOS ~]# vgremove kevinvg
  Volume group "kevinvg" successfully removed
[root@CentOS ~]# pvremove /dev/sdb{6,7,8,9,10}
  Labels on physical volume "/dev/sdb6" successfully wiped
  Labels on physical volume "/dev/sdb7" successfully wiped
  Labels on physical volume "/dev/sdb8" successfully wiped
  Labels on physical volume "/dev/sdb9" successfully wiped
  Labels on physical volume "/dev/sdb10" successfully wiped
12345678910111213141516171819202122232425复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值