逻辑卷管理器(LVM:Logical Volume Manager)

          逻辑卷管理器(LVM:Logical Volume Manager)
1.PV:物理卷
要做逻辑卷时在硬盘进行分区的时候,一定要把分区的格式定义为8e,即(Linux LVM),并且将它转换成LVM最底层的物理卷(PV)。
2.VG:卷用户组
所谓的LVM就是将多个PV整合成一个大的VG,所以VG就是LVM组合起来的大磁盘。
每个VG最大仅能有65534个PE,最大可达256G的容量
3.PE:物理扩展块
LVM默认使4MB的PE块,这个是可以自己更改的,PE是整个LVM最小的存储块,其实我们的文件数据老师由写入PE来处理的。
4.LV:逻辑卷
最终的VG还是会被切成LV,这个LV就等于是最后的一个可以使用的大磁盘。
操作步骤
我在此操作中使用的磁盘分区为:/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
每个磁盘的容量是500M
1》pv阶段
pvcreate:将物理分区新建成为pv
pvscan:  查询目前系统里面任何且有pv的磁盘
pvdisplay:显示出目前系统上面的pv状态
pvremove:将pv属性删除
(1)将四个分区建立成为pv命令:pvcreate /dev/sd{b,c,d,e}1
[root@localhost ~]# pvcreate /dev/sd{b,c,d,e}1
  Physical volume "/dev/sdb1" successfully created
    Physical volume "/dev/sdc1" successfully created
      Physical volume "/dev/sdd1" successfully created
      Physical volume "/dev/sde1" successfully created

(2)查看pv磁盘命令:pvscan
   [root@localhost ~]# pvscan
     PV /dev/sdb1                      lvm2 [486.31 MB]
     PV /dev/sdc1                      lvm2 [486.31 MB]
     PV /dev/sdd1                      lvm2 [486.31 MB]
     PV /dev/sde1                      lvm2 [486.31 MB]
     Total: 4 [1.90 GB] / in use: 0 [0   ] / in no VG: 4 [1.90 GB]
(3)也可以使用pvdisplay来查看详细的信息
2》VG阶段
      vgcreate:  新建vg
     vgscan:   查询系统上面是否的vg
     vgdisplay: 显示系统上面的vg状态
     vgextend: 在vg里面增加额外的PV
     vgreduce: 在VG里面删除PV
     vgchange: 设置vg是否启动
     vgremove: 删除一个vg
(1)创建vg命令:vgcreate [-s N]  vg名称 pv名称
    -s:后面接的是pe的块的大小,可以使用m,g,t等单位
   [root@localhost ~]# vgcreate -s 16M codevg /dev/sd{b,c,d}1
       Volume group "codevg" successfully created
     剩余一个分区留着一会做另外的操作
(2) 现在可以使用vgdisplay来获得整个vg的pe块的数量,供下面的操作使用

3》LV阶段
      lvcreate:  新建lv
      lvscan:   查询系统上面的lv
      lvdisplay: 显示系统上面的lv状态
      lvextend: 在lv里面增加容量
      lvreduce: 在lv里面减少容量
      lvemove: 删除一个lv
      lvresize: 对lv进行容量大小的调整
(1)lv的创建命令:lvcreate [-l N] [-n lv名称] vg名称
     -l:后面可以接PE的个数
     -L:后面接PE的容量
     -n:后面接的就是lv的名称
   [root@localhost ~]# lvcreate -l 90 -n codelv codevg
      Logical volume "codelv" created
(2) 使用lvdisplay命令可以查看创建的lv
4》文件系统阶段
(1)现在就可以把这个lv当作一个大磁盘使用了,先对它进行格式化
        mkfs -t ext3 /dev/codevg/codelv
  (2) 挂载这个分区即可以正常使用这个分区
mount /dev/codevg/codelv /mnt/lvm
  (3)查看这个分区的大小
      [root@localhost mnt]# df -h /mnt/lvm
    文件系统              容量  已用 可用 已用% 挂载点
    /dev/mapper/codevg-codelv
                             1.4G   35M  1.3G   3% /mnt/lvm

5》放大lv的容量
(1)首先应该把你要增加的那个磁盘新建pv 命令:pvcreate /dev/sde1,这个在上面的操作中已经做过。这里可以省略
(2)加大vg的容量,使用vgextend命令
     vgextend codevg /dev/sde1
    如果现在查看pvscan的话,可以看到/dev/sde1的属性
     PV /dev/sde1   VG codevg   lvm2 [480.00 MB / 480.00 MB free]
   (3) 现在查看vgdisplay命令可以看到有30个pe未使用
   Alloc PE / Size       90 / 1.41 GB
      Free  PE / Size       30 / 480.00 MB
(4) 放大lv,利用lvresize的功能来增加
lvresize -l +30 /dev/codevg/codelv
(5)虽然现在已经把剩余的空间已经给了lv,但是如果你: df -h /mnt/lvm一下,你可以发现你的可用的空间并没有增加,也就是说你扩大的lv容量并没有应该到实际的空间中去
[root@localhost ~]# df -h /mnt/lvm
              文件系统              容量  已用 可用 已用% 挂载点
             /dev/sda3              14G  3.7G  9.2G  29% /
(6) 现在我们可以使用命令resize2fs来让空间真实的扩充
resize2fs /dev/codevg/codelv
    可以使用参数:
     -t :强制进行resize的操作
      后面也可以加上大小,来说明要使用多少的空间
      [root@localhost lvm]# df -h /mnt/lvm
       文件系统              容量  已用 可用 已用% 挂载点
      /dev/mapper/codevg-codelv
                                1.9G   35M  1.8G   2% /mnt/lvm
(resize2fs这个命令不是很明白,请高手指教,但是我做了一个实验,发现如果对整个/dev/codevg/codelv再次进行一次格式化成ext3的话,也可以达到resize2fs所能达到的效果,但是既然是动态的扩充容量就一定不会格式化磁盘,所以不知道这个命令的作用是不是把刚刚扩充的容量和本先的容量的格式进行一次格式同步,也就是让新扩充的容量也变成ext3格式。)
6》缩小的lv的容量,去除/dev/sdd1
注:对于lv变量的扩充,现在的系统是支持再线挂载扩充的,但是,对于缩小容量是一定要先卸载之后才能做这个实验。
         (1)容量的缩小和容量的扩充是相反的,容量的缩小是把容量的扩充的步骤倒转过来,首先先整体降低磁盘的容量,还是resize2fs这个命令,因为我们现在每个磁盘是500M所以要剩余的空间的1440M,即命令
resize2fs /dev/codevg/codelv 1440M
这个1440M是剩余下还在使用的的,并不是要缩小的量。
(2) 下一步是将lv的容量降低,由pvdisplay可以知道/dev/sdd1有30个pe块,即减去这30个pe块
lvresize -l -30 /dev/codevg/codelv
确定之后就可以了
(3) 但是如果你pvdisplay一下你会发现,系统缩小的并还是/dev/sdd1这个磁盘,而是/dev/sde1这个最后的磁盘,这里就要去/dev/sdd1中的内容进行转移,转移到/dev/sde1中去,可以使用命令pvmove来进行,即
[root@localhost mnt]# pvmove /dev/sdd1 /dev/sde1
         /dev/sdd1: Moved: 100.0%
       (4)现在我们要把/dev/sdd1从codevg中删除出去
vgreduce codevg /dev/sdd1
       (5) 现在pvscan一下可以看到/dev/sdd1已经被抽离出来了,最后就把这个磁盘去除pv属性就行了
pvremove /dev/sdd1

    (6)现在磁盘缩小就已经成功了,可以对/dev/sdd1这个磁盘进行格式化,之后就可以自己随意的使用。    
7>>    LVM的系统快照
     (1) 系统快照就是指将当时的系统信息记录下来,就好像是照相记录一样,将来若有任  何数据改动了,则原始数据会被移动到快照区,没有被改动的区域则由快照区与文件系统共享.
     (2) 为系统做快照需要另外的一个磁盘,现在我们以上面操作删除的/etc/sdd1来做快照区,并且快照系统要和被做快照的系统在同一个vg内
     [root@localhost ~]# pvcreate /dev/sdd1
       Physical volume "/dev/sdd1" successfully created
    [root@localhost ~]# vgextend codevg /dev/sdd1
       Volume group "codevg" successfully extended
(3) 为系统做快照使用的命令是:lvcreate
    参数:
-s : 代表是snapshot快照功能
-n: 后面接快照的设备名称,也就是为快照做起一个名字
-l :  后面接要使用多少个pe来作快照区
(4) 建立快照
[root@localhost ~]# lvcreate -s -l 30 -n codess /dev/codevg/codelv
      Logical volume "codess" created
使用:lvdisplay可以查看快照的声明
      LV Write Access        read/write
      LV snapshot status     active destination for /dev/codevg/codelv
      LV Status              available
               # open                 0
              LV Size                1.41 GB
       Current LE             90
              COW-table size         480.00 MB
              COW-table LE           30
              Allocated to snapshot  0.00%
              Snapshot chunk size    4.00 KB
             Segments               1
(5)可以挂载这个快照来看看其中的内容是不是和系统中的内容是一样的
mkdir /mnt/lvmss
       Mount /dev/codevg/codess /mnt/lvmss
       如果使用df -h /mnt/lvmss查看一下这个快照的大小,你会发现它的大小是和原系统是一样大小.
(6) 利用快照系统做复原系统
有时候我们把系统内的一些东西破坏掉了,就可以使用这个快照来恢复系统原本的数据,但是因为系统快照和原系统中没有更改的内容是共享磁盘的,所以你不能在用tar备份快照数据前格式化原系统,这样或许你的快照空间不足的话,快照内的原系统就不会是完整的.也就不能进行恢复工作了.
先进行tar 备份 tar -jcv -f lvm.tar.bz2 /mnt/lvmss/.*
之后便可以进行格式化操作了
在还原时就可以直接使用tar解压命令进行解压
tar -jxv -f lvm.tar.bz2  -C /mnt/lvm
 

你可能感兴趣的:(备份,lvm,逻辑卷管理器)