LVM 逻辑卷 (logica volume manager)

来源:互联网 发布:怀化学院教务网络管理 编辑:程序博客网 时间:2024/06/15 00:53
逻辑卷轴管理员 (Logical Volume Manager)

        想像一个情况,你在当初规划主机的时候将 /home 只给他 50G ,等到使用者众多之后导致这个 filesystem 不够大, 此时你能怎么作?

        多数的朋友都是这样:再加一颗新硬盘,然后重新分割、格式化,将 /home 的数据完整的复制过来, 然后将原本的 partition 卸载重新挂载新的 partition 。啊!好忙碌啊!若是第二次分割却给的容量太多!导致很多磁碟容量被浪费了! 你想要将这个 partition 缩小时,又该如何作?

        将上述的流程再搞一遍!唉~烦死了,尤其复制很花时间ㄟ~有没有更简单的方法呢? 有的!那就是我们这个小节要介绍的 LVM 这玩意儿!

        LVM 的重点在於『可以弹性的调整 filesystem 的容量!』而并非在於效能与数据保全上面。 需要文件的读写效能或者是数据的可靠性,请参考前面的 RAID 小节。 LVM 可以整合多个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁碟一样!而且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁碟当中。 如此一来,整个磁碟空间的使用上,实在是相当的具有弹性啊! 


        在讲解之前,先说一个问题,当我们新插入一块硬盘时,系统是无法辨识的,
一般情况下需要重启操作系统来识别。
Linux主机对磁盘设备进行重新配置的方式包括: 
?重启系统 
?卸载并重新加载HBA驱动模块 
?Echo /proc下的SCSI设备列表 
?通过/sys下的属性设置运行SCSI扫描 
?通过HBA厂商脚本运行SCSI扫描 

      在此说下非重启的方法让系统辨识新硬盘。
        这里的硬盘使用的是scsi方式  

      1. 第一种方法  Echo /proc下的SCSI设备列表

列出已经发现的SCSI磁盘

[root@localhost /]# cat /proc/scsi/scsi

Attached devices:

Host: scsi1 Channel: 00 Id: 00 Lun: 00

  Vendor: NECVMWar Model: VMware IDE CDR10 Rev: 1.00

  Type:   CD-ROM                           ANSI  SCSI revision: 05

Host: scsi2 Channel: 00 Id: 00 Lun: 00

  Vendor: VMware,  Model: VMware Virtual S Rev: 1.0

  Type:   Direct-Access                    ANSI  SCSI revision: 02

Host: scsi2 Channel: 00 Id: 01 Lun: 00

  Vendor: VMware,  Model: VMware Virtual S Rev: 1.0

  Type:   Direct-Access   

      

         [root@localhost /]#echo "scsi add-single-device a b c d">/proc/scsi/scsi

a是硬盘所在SCSI控制器号(我的VM有2个SCSI控制器,所以就是1);

b是硬盘所在SCSI通道的编号(一般单通道的就是0,多通道的要看是哪个通道了);

c是硬盘的SCSI ID号(可以通过具体插入的硬盘插槽来判断);

d是硬盘的lun号(默认情况都是0)



  2.第二种方法  通过/sys下的属性设置运行SCSI扫描

/sys下SCSI扫描

2.6内核中,HBA驱动将SCAN功能导出至/sys目录下,可用来重新扫描该接口下的SCSI磁盘设备。命令如下:

[root@localhost /]# cd /sys/class/scsi_host/

[root@localhost scsi_host]# ls

  host0  host1  host2


各自扫描一次

[root@localhost scsi_host]# echo "- - -">host0/scan

[root@localhost scsi_host]# echo "- - -">host1/scan

[root@localhost scsi_host]# echo "- - -">host2/scan


‘- - -’代表channel,target和LUN编号。以上命令会导致分区下所有channel,target以及可见LUN被扫描。

RHEL5 或SUSE10:

echo ‘- - -’  > /sys/class/scsi_host/host0/scan         

/sys/class/scsi_host/ 下面有几个host 就扫描几次

RHEL4 或SUSE9:

echo 1 >> /sys/class/scsi_host/host0/issue_lip    

同样是/sys/class/scsi_host/ 下面有几个host 就执行几次

echo ‘- - -’ >> /sys/class/scsi_host/host0/scan



什么是 LVM: PV, PE, VG, LV 的意义

LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷轴管理员。之所以称为『卷轴』可能是因为可以将 filesystem 像卷轴一样伸长或缩短之故吧!LVM 的作法是将几个实体的 partitions (或 disk) 透过软件组合成为一块看起来是独立的大磁碟 (VG) ,然后将这块大磁碟再经过分割成为可使用分割槽 (LV), 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关! 底下我们就得要针对这几个项目来好好聊聊!

  • Physical Volume, PV, 实体卷轴

       我们实际的 partition 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过 pvcreate 的命令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是透过 fdisk 啦!

  • Volume Group, VG, 卷轴群组

        所谓的 LVM 大磁碟就是将许多 PV 整合成这个 VG !所以 VG 就是 LVM 组合起来的大磁碟!这么想就好了。 那么这个大磁碟最大可以到多少容量呢?这与底下要说明的 PE 有关喔~因为每个 VG 最多仅能包含 65534 个 PE 而已。 如果使用 LVM 默认的参数,则一个 VG 最大可达 256GB 的容量啊!(参考底下的 PE 说明)

  • Physical Extend, PE, 实体延伸区块

        LVM 默认使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,因此默认的 LVM VG 会有 4M*65534/(1024M/G)=256G。 这个 PE 很有趣喔!他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是藉由写入 PE 来处理的。 简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。 这样说应该就比较好理解了吧?所以调整 PE 会影响到 VG 的最大容量!

  • Logical Volume, LV, 逻辑卷轴

        最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分割槽的咚咚了!那么 LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV 的装置档名通常指定为『 /dev/vgname/lvname 』的样式!

此外,我们刚刚有谈到 LVM 可弹性的变更 filesystem 的容量,那是如何办到的?其实他就是透过『交换 PE 』来进行数据转换, 将原本 LV 内的 PE 移转到其他装置中以降低 LV 容量,或将其他装置的 PE 加到此 LV 中以加大容量! VG、LV 与 PE 的关系有点像下图:

LVM 逻辑卷 (logica volume manager) - 朝鲜程序员 - 朝鲜程序员的博客


 
  • 实作流程

        通过 PV, VG, LV 的规划之后,再利用 mkfs 就可以将你的 LV 格式化成为可以利用的文件系统了!而且这个文件系统的容量在未来还能够进行扩充或减少, 而且里面的数据还不会被影响!

LVM 逻辑卷 (logica volume manager) - 朝鲜程序员 - 朝鲜程序员的博客
 

        如此一来,我们就可以利用 LV 这个玩意儿来进行系统的挂载了。不过,你应该要觉得奇怪的是, 那么我的数据写入这个 LV 时,到底他是怎么写入硬盘当中的?依据写入机制的不同,而有两种方式:

  • 线性模式 (linear):假如我将 /dev/hda1, /dev/hdb1 这两个 partition 加入到 VG 当中,并且整个 VG 只有一个 LV 时,那么所谓的线性模式就是:当 /dev/hda1 的容量用完之后,/dev/hdb1 的硬盘才会被使用到, 这也是我们所建议的模式。

  • 交错模式 (triped):那什么是交错模式?很简单啊,就是我将一笔数据拆成两部分,分别写入 /dev/hda1 与 /dev/hdb1 的意思,感觉上有点像 RAID 0 啦!如此一来,一份数据用两颗硬盘来写入,理论上,读写的效能会比较好。

        基本上,LVM 最主要的用处是在实现一个可以弹性调整容量的文件系统上, 而不是在创建一个效能为主的磁碟上,所以,我们应该利用的是 LVM 可以弹性管理整个 partition 大小的用途上,而不是著眼在效能上的。因此, LVM 默认的读写模式是线性模式啦! 如果你使用 triped 模式,要注意,当任何一个 partition 损坏时,所有的数据都会『损毁』的! 所以啦,不是很适合使用这种模式啦!如果要强调效能与备份,那么就直接使用 RAID 即可, 不需要用到 LVM 。






小标题的图示LVM 实作流程

        LVM 必需要核心有支持且需要安装 lvm2 这个软件,CentOS 与其他较新的 distributions 已经默认将 lvm 的支持与软件都安装妥当了!

      我的要求有点像这样:

  • 先分割出 4 个 partition ,每个 partition 的容量均为 1.5GB 左右,且 system ID 需要为 8e;
  • 全部的 partition 整合成为一个 VG,VG 名称配置为 vbirdvg;且 PE 的大小为 16MB;
  • 全部的 VG 容量都丢给 LV ,LV 的名称配置为 vbirdlv;
  • 最终这个 LV 格式化为 ext3 的文件系统,且挂载在 /mnt/lvm 中

(注意:修改系统识别码请使用 t 这个 fdisk 内的命令来处理即可)

[root@www ~]# fdisk /dev/hda  <==其他流程请自行参考第八章处理[root@www ~]# partprobe       <==别忘记这个动作了!粉重要![root@www ~]# fdisk -lDisk /dev/hda: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System/dev/hda1   *           1          13      104391   83  Linux/dev/hda2              14        1288    10241437+  83  Linux/dev/hda3            1289        1925     5116702+  83  Linux/dev/hda4            1926        5005    24740100    5  Extended/dev/hda5            1926        2052     1020096   82  Linux swap / Solaris/dev/hda6            2053        2235     1469916   8e  Linux LVM/dev/hda7            2236        2418     1469916   8e  Linux LVM/dev/hda8            2419        2601     1469916   8e  Linux LVM/dev/hda9            2602        2784     1469916   8e  Linux LVM

       上面的 /dev/hda{6,7,8,9} 这四个分区就是我们的实体分区! 注意看,那个 8e 的出现会导致 system 变成『 Linux LVM 』!其实没有配置成为 8e 也没关系, 不过某些 LVM 的侦测命令可能会侦测不到该 partition 就是了!接下来,就一个一个的处理各流程吧!




  • PV 阶段

要创建 PV 其实很简单,只要直接使用 pvcreate 即可!

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

那就直接来瞧一瞧吧!

# 1. 检查有无 PV 在系统上,然后将 /dev/hda6~/dev/hda9 创建成为 PV 格式[root@www ~]# pvscan  No matching physical volumes found <==找不到任何的 PV 存在喔![root@www ~]# pvcreate /dev/hda{6,7,8,9}  Physical volume "/dev/hda6" successfully created  Physical volume "/dev/hda7" successfully created  Physical volume "/dev/hda8" successfully created  Physical volume "/dev/hda9" successfully created# 这个命令可以一口气创建这四个 partition 成为 PV 啦!注意大括号的用途[root@www ~]# pvscan  PV /dev/hda6         lvm2 [1.40 GB]  PV /dev/hda7         lvm2 [1.40 GB]  PV /dev/hda8         lvm2 [1.40 GB]  PV /dev/hda9         lvm2 [1.40 GB]  Total: 4 [5.61 GB] / in use: 0 [0   ] / in no VG: 4 [5.61 GB]# 这就分别显示每个 PV 的资讯与系统所有 PV 的资讯。尤其最后一行,显示的是:# 整体 PV 的量 / 已经被使用到 VG 的 PV 量 / 剩余的 PV 量# 2. 更详细的列示出系统上面每个 PV 的个别资讯:[root@www ~]# pvdisplay  "/dev/hda6" is a new physical volume of "1.40 GB"  --- NEW Physical volume ---  PV Name               /dev/hda6  <==实际的 partition 装置名称  VG Name                          <==因为尚未分配出去,所以空白!  PV Size               1.40 GB    <==就是容量说明  Allocatable           NO         <==是否已被分配,结果是 NO  PE Size (KByte)       0          <==在此 PV 内的 PE 大小  Total PE              0          <==共分割出几个 PE  Free PE               0          <==没被 LV 用掉的 PE  Allocated PE          0          <==尚可分配出去的 PE 数量  PV UUID               Z13Jk5-RCls-UJ8B-HzDa-Gesn-atku-rf2biN....(底下省略)....# 由於 PE 是在创建 VG 时才给予的参数,因此在这里看到的 PV 里头的 PE 都会是 0# 而且也没有多余的 PE 可供分配 (allocatable)。





  • VG 阶段

创建 VG 及 VG 相关的命令也不少,我们来看看:

  • vgcreate :就是主要创建 VG 的命令啦!他的参数比较多,等一下介绍。
  • vgscan :搜寻系统上面是否有 VG 存在?
  • vgdisplay :显示目前系统上面的 VG 状态;
  • vgextend :在 VG 内添加额外的 PV ;
  • vgreduce :在 VG 内移除 PV;
  • vgchange :配置 VG 是否启动 (active);
  • vgremove :删除一个 VG 啊!

        与 PV 不同的是, VG 的名称是自订的!我们知道 PV 的名称其实就是 partition 的装置档名, 但是这个 VG 名称则可以随便你自己取啊!在底下的例子当中,我将 VG 名称取名为 vbirdvg 。创建这个 VG 的流程是这样的:

[root@www ~]# vgcreate [-s N[m | g | t ]]  VG名称  PV名称选项与参数:-s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可)# 1. 将 /dev/hda6-8 创建成为一个 VG,且指定 PE 为 16MB 喔![root@www ~]# vgcreate -s 16M vbirdvg /dev/hda{6,7,8}  Volume group "vbirdvg" successfully created[root@www ~]# vgscan  Reading all physical volumes.  This may take a while...  Found volume group "vbirdvg" using metadata type lvm2# 确实存在这个 vbirdvg 的 VG 啦![root@www ~]# pvscan  PV /dev/hda6   VG vbirdvg   lvm2 [1.39 GB / 1.39 GB free]  PV /dev/hda7   VG vbirdvg   lvm2 [1.39 GB / 1.39 GB free]  PV /dev/hda8   VG vbirdvg   lvm2 [1.39 GB / 1.39 GB free]  PV /dev/hda9                lvm2 [1.40 GB]  Total: 4 [5.57 GB] / in use: 3 [4.17 GB] / in no VG: 1 [1.40 GB]# 嘿嘿!发现没!有三个 PV 被用去,剩下一个 /dev/hda9 的 PV 没被用掉![root@www ~]# vgdisplay  --- Volume group ---  VG Name               vbirdvg  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               4.17 GB   <==整体的 VG 容量有这么大  PE Size               16.00 MB  <==内部每个 PE 的大小  Total PE              267       <==总共的 PE 数量共有这么多!  Alloc PE / Size       0 / 0  Free  PE / Size       267 / 4.17 GB  VG UUID               4VU5Jr-gwOq-jkga-sUPx-vWPu-PmYm-dZH9EO# 最后那三行指的就是 PE 能够使用的情况!由於尚未切出 LV,因此所有的 PE # 均可自由使用。

这样就创建一个 VG 了!假设我们要添加这个 VG 的容量,因为我们还有 /dev/hda9 :

# 2. 将剩余的 PV (/dev/hda9) 加给 vbirdvg 吧![root@www ~]# vgextend vbirdvg /dev/hda9  Volume group "vbirdvg" successfully extended[root@www ~]# vgdisplay....(前面省略)....  VG Size               5.56 GB  PE Size               16.00 MB  Total PE              356  Alloc PE / Size       0 / 0  Free  PE / Size       356 / 5.56 GB  VG UUID               4VU5Jr-gwOq-jkga-sUPx-vWPu-PmYm-dZH9EO# 基本上,不难吧!这样就可以抽换整个 VG 的大小啊!

我们多了一个装置!接下来为这个 vbirdvg 进行分割吧!透过 LV 功能来处理!




  • LV 阶段

创造出 VG 这个大磁盘之后,再来就是要创建分区啦!这个分区就是所谓的 LV !假设我要将刚刚那个 vbirdvg 磁盘,分割成为 vbirdlv ,整个 VG 的容量都被分配到 vbirdlv 里面去!先来看看能使用的命令

  • lvcreate :创建 LV ;
  • lvscan :查询系统上面的 LV ;
  • lvdisplay :显示系统上面的 LV 状态!
  • lvextend :在 LV 里面添加容量!
  • lvreduce :在 LV 里面减少容量;
  • lvremove :删除一个 LV !
  • lvresize :对 LV 进行容量大小的调整!
[root@www ~]# lvcreate [ -L N [ m | g | t ]]  [-n LV名称] VG名称[root@www ~]# lvcreate [-l N] [-n LV名称] VG名称选项与参数:-L  :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE,      因此这个数量必须要是 PE 的倍数,若不相符,系统会自行计算最相近的容量。-l  :后面可以接 PE 的『个数』,而不是数量。若要这么做,得要自行计算 PE 数。-n  :后面接的就是 LV 的名称啦!更多的说明应该可以自行查阅吧! man lvcreate # 1. 将整个 vbirdvg 通通分配给 vbirdlv 啊,要注意, PE 共有 356 个。[root@www ~]# lvcreate -l 356 -n vbirdlv vbirdvg  Logical volume "vbirdlv" created# 由於本案例中每个 PE 为 16M ,因此上述的命令也可以使用如下的方式来创建:# lvcreate -L 5.56G -n vbirdlv vbirdvg[root@www ~]# ll /dev/vbirdvg/vbirdlvlrwxrwxrwx 1 root root 27 Mar 11 16:49 /dev/vbirdvg/vbirdlv ->/dev/mapper/vbirdvg-vbirdlv# 看见了没有啊!这就是我们最重要的一个玩意儿了![root@www ~]# lvdisplay  --- Logical volume ---  LV Name                /dev/vbirdvg/vbirdlv  <==这个才是 LV 的全名!  VG Name                vbirdvg  LV UUID                8vFOPG-Jrw0-Runh-ug24-t2j7-i3nA-rPEyq0  LV Write Access        read/write  LV Status              available  # open                 0  LV Size                5.56 GB               <==这个 LV 的容量这么大!  Current LE             356  Segments               4  Allocation             inherit  Read ahead sectors     auto  - currently set to     256  Block device           253:0

如此一来,整个 partition 也准备好啦!接下来,就是针对这个 LV 来处理啦!要特别注意的是, VG 的名称为 vbirdvg , 但是 LV 的名称必须使用全名!亦即是 /dev/vbirdvg/vbirdlv 才对! 后续的处理都是这样的!这点初次接触 LVM 的朋友很容易搞错!



  • 文件系统阶段


# 1. 格式化、挂载与观察我们的 LV 吧![root@www ~]# mkfs -t ext3 /dev/vbirdvg/vbirdlv <==注意 LV 全名![root@www ~]# mkdir /mnt/lvm[root@www ~]# mount /dev/vbirdvg/vbirdlv /mnt/lvm[root@www ~]# dfFilesystem           1K-blocks      Used Available Use% Mounted on/dev/hda2              9920624   3858984   5549572  42% //dev/hda3              4956316   1056996   3643488  23% /home/dev/hda1               101086     21408     74459  23% /boottmpfs                   371332         0    371332   0% /dev/shm/dev/mapper/vbirdvg-vbirdlv                       5741020    142592   5306796   3% /mnt/lvm[root@www ~]# cp -a /etc /var/log /mnt/lvm

其实 LV 的名称建置成为 /dev/vbirdvg/vbirdlv 是为了让使用者直觉式的找到我们所需要的数据, 实际上 LVM 使用的装置是放置到 /dev/mapper/ 目录下的!所以你才会看到上表当中的特殊字体部分。 透过这样的功能,我们现在已经建置好一个 LV 了!你可以自由的应用 /mnt/lvm 内的所有资源!




小标题的图示放大 LV 容量

如果要放大 LV 的容量时, 该如何进行完整的步骤呢?你只要这样做即可:

扩展操作可以在线执行。

  1. 用 fdisk 配置新的具有 8e system ID 的 partition
  2. 利用 pvcreate 建置 PV
  3. 利用 vgextend 将 PV 加入我们的 vbirdvg
  4. 利用 lvresize 将新加入的 PV 内的 PE 加入 vbirdlv 中
  5. 透过 resize2fs 将文件系统的容量确实添加!

其中最后一个步骤最重要!我们在第八章当中知道, 整个文件系统在最初格式化的时候就创建了 inode/block/superblock 等资讯,要改变这些资讯是很难的! 不过因为文件系统格式化的时候建置的是多个 block group ,因此我们可以透过在文件系统当中添加 block group 的方式来增减文件系统的量!而增减 block group 就是利用 resize2fs 啦!所以最后一步是针对文件系统来处理的, 前面几步则是针对 LVM 的实际容量大小!

# 1. 处理出一个 3GB 的新的 partition ,在我的系统中应该是 /dev/hda10[root@www ~]# fdisk /dev/hda <==其他的动作请自行处理[root@www ~]# partprobe[root@www ~]# fdisk -l   Device Boot      Start         End      Blocks   Id  System....(中间省略)..../dev/hda10           2785        3150     2939863+  8e  Linux LVM# 这个就是我们要的新的 partition 罗!# 2. 创建新的 PV:[root@www ~]# pvcreate /dev/hda10  Physical volume "/dev/hda10" successfully created[root@www ~]# pvscan  PV /dev/hda6    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda7    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda8    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda9    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda10                lvm2 [2.80 GB]  Total: 5 [8.37 GB] / in use: 4 [5.56 GB] / in no VG: 1 [2.80 GB]# 可以看到 /dev/hda10 是新加入并且尚未被使用的喔!# 3. 加大 VG ,利用 vgextend 功能![root@www ~]# vgextend vbirdvg /dev/hda10  Volume group "vbirdvg" successfully extended[root@www ~]# vgdisplay  --- Volume group ---  VG Name               vbirdvg  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               1  Max PV                0  Cur PV                5  Act PV                5  VG Size               8.36 GB  PE Size               16.00 MB  Total PE              535  Alloc PE / Size       356 / 5.56 GB  Free  PE / Size       179 / 2.80 GB  VG UUID               4VU5Jr-gwOq-jkga-sUPx-vWPu-PmYm-dZH9EO# 不但整体 VG 变大了!而且剩余的 PE 共有 179 个,容量则为 2.80G# 4. 放大 LV 吧!利用 lvresize 的功能来添加![root@www ~]# lvresize -l +179 /dev/vbirdvg/vbirdlv  Extending logical volume vbirdlv to 8.36 GB  Logical volume vbirdlv successfully resized# 这样就添加了 LV 了喔!lvresize 的语法很简单,基本上同样透过 -l 或 -L 来添加!# 若要添加则使用 + ,若要减少则使用 - !详细的选项请参考 man lvresize 罗![root@www ~]# lvdisplay  --- Logical volume ---  LV Name                /dev/vbirdvg/vbirdlv  VG Name                vbirdvg  LV UUID                8vFOPG-Jrw0-Runh-ug24-t2j7-i3nA-rPEyq0  LV Write Access        read/write  LV Status              available  # open                 1  LV Size                8.36 GB  Current LE             535  Segments               5  Allocation             inherit  Read ahead sectors     auto  - currently set to     256  Block device           253:0[root@www ~]# df /mnt/lvmFilesystem           1K-blocks      Used Available Use% Mounted on/dev/mapper/vbirdvg-vbirdlv                       5741020    261212   5188176   5% /mnt/lvm

看到了吧?最终的结果中 LV 真的有放大到 8.36GB 喔!但是文件系统却没有相对添加! 而且,我们的 LVM 可以线上直接处理,并不需要特别给他 umount 哩!真是人性化! 但是还是得要处理一下文件系统的容量啦!开始观察一下文件系统,然后使用 resize2fs 来处理一下吧!

# 5.1 先看一下原本的文件系统内的 superblock 记录情况吧![root@www ~]# dumpe2fs /dev/vbirdvg/vbirdlvdumpe2fs 1.39 (29-May-2006)....(中间省略)....Block count:              1458176    <==这个filesystem的 block 总数....(中间省略)....Blocks per group:         32768      <==多少个 block 配置成为一个 block groupGroup 0: (Blocks 0-32767)            <==括号内为 block 的号码....(中间省略)....Group 44: (Blocks 1441792-1458175)   <==这是本系统中最后一个 group....(后面省略)....# 5.2 resize2fs 的语法[root@www ~]# resize2fs [-f] [device] [size]选项与参数:-f      :强制进行 resize 的动作![device]:装置的文件名称;[size]  :可以加也可以不加。如果加上 size 的话,那么就必须要给予一个单位,          譬如 M, G 等等。如果没有 size 的话,那么默认使用『整个 partition』          的容量来处理!# 5.3 完整的将 LV 的容量扩充到整个 filesystem 吧![root@www ~]# resize2fs /dev/vbirdvg/vbirdlvresize2fs 1.39 (29-May-2006)Filesystem at /dev/vbirdvg/vbirdlv is mounted on /mnt/lvm; on-line resizing Performing an on-line resize of /dev/vbirdvg/vbirdlv to 2191360 (4k) blocks.The filesystem on /dev/vbirdvg/vbirdlv is now 2191360 blocks long.# 可怕吧!这一版的 lvm 竟然还可以线上进行 resize 的功能哩!真好![root@www ~]# df /mnt/lvmFilesystem           1K-blocks      Used Available Use% Mounted on/dev/mapper/vbirdvg-vbirdlv                       8628956    262632   7931368   4% /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x 105 root root 12288 Mar 11 16:59 etcdrwxr-xr-x  17 root root  4096 Mar 11 14:17 logdrwx------   2 root root 16384 Mar 11 16:59 lost+found# 刚刚复制进去的数据可还是存在的喔!并没有消失不见!

嘿嘿!真的放大了吧!而且如果你已经有填数据在 LVM 磁区当中的话!这个数据是不会死掉的喔!还是继续存在原本的磁区当中啦! 整个动作竟然这么简单就完成了!原本的数据还是一直存在而不会消失~您说, LVM 好不好用啊!

此外,如果你再以 dumpe2fs 来检查 /dev/vbirdvg/vbirdlv 时,就会发现后续的 Group 添加了!


root@www ~]# lvextend -L +10G /dev/vg001/lv001   增加lv空间[root@www ~]# resize2fs /dev/vg001/lv001   更新文件系统[root@www ~]# [root@www ~]#




小标题的图示缩小 LV 容量

上一小节我们谈到的是放大容量,现在来谈到的是缩小容量!假设我们想将 /dev/hda6 抽离出来! 那该如何处理啊?就让上一小节的流程倒转过来即可!

# 1. 先找出 /dev/hda6 的容量大小,并尝试计算文件系统需缩小到多少[root@www ~]# pvdisplay  --- Physical volume ---  PV Name               /dev/hda6  VG Name               vbirdvg  PV Size               1.40 GB / not usable 11.46 MB  Allocatable           yes (but full)  PE Size (KByte)       16384  Total PE              89  Free PE               0  Allocated PE          89  PV UUID               Z13Jk5-RCls-UJ8B-HzDa-Gesn-atku-rf2biN# 从这里可以看出 /dev/hda6 有多大,而且含有 89 个 PE 的量喔!# 那如果要使用 resize2fs 时,则总量减去 1.40GB 就对了![root@www ~]# pvscan  PV /dev/hda6    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda7    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda8    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda9    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda10   VG vbirdvg   lvm2 [2.80 GB / 0    free]  Total: 5 [8.36 GB] / in use: 5 [8.36 GB] / in no VG: 0 [0   ]# 从上面可以发现如果扣除 /dev/hda6 则剩余容量有:1.39*3+2.8=6.97# 2. 就直接降低文件系统的容量吧![root@www ~]# resize2fs /dev/vbirdvg/vbirdlv 6900Mresize2fs 1.39 (29-May-2006)Filesystem at /dev/vbirdvg/vbirdlv is mounted on /mnt/lvm; on-line resizingOn-line shrinking from 2191360 to 1766400 not supported.# 容量好像不能够写小数点位数,因此 6.9G 是错误的,鸟哥就使用 6900M 了。# 此外,放大可以线上直接进行,缩小文件系统似乎无法支持!所以要这样做:[root@www ~]# umount /mnt/lvm[root@www ~]# resize2fs /dev/vbirdvg/vbirdlv 6900Mresize2fs 1.39 (29-May-2006)Please run 'e2fsck -f /dev/vbirdvg/vbirdlv' first.# 他要我们先进行磁碟检查!不罗唆!那就直接进行吧![root@www ~]# e2fsck -f /dev/vbirdvg/vbirdlve2fsck 1.39 (29-May-2006)Pass 1: Checking inodes, blocks, and sizesPass 2: Checking directory structurePass 3: Checking directory connectivityPass 4: Checking reference countsPass 5: Checking group summary information/dev/vbirdvg/vbirdlv: 2438/1087008 files (0.1% non-contiguous), [root@www ~]# resize2fs /dev/vbirdvg/vbirdlv 6900Mresize2fs 1.39 (29-May-2006)Resizing the filesystem on /dev/vbirdvg/vbirdlv to 1766400 (4k) blocks.The filesystem on /dev/vbirdvg/vbirdlv is now 1766400 blocks long.# 再来 resize2fs 一次就能够成功了!如上所示啊![root@www ~]# mount /dev/vbirdvg/vbirdlv /mnt/lvm[root@www ~]# df /mnt/lvmFilesystem           1K-blocks      Used Available Use% Mounted on/dev/mapper/vbirdvg-vbirdlv                       6955584    262632   6410328   4% /mnt/lvm

然后再来就是将 LV 的容量降低!要注意的是,我们想要抽离的是 /dev/hda6,这个 PV 有 89 个 PE (上面的 pvdisplay 查询到的结果)。所以要这样进行:

# 3. 降低 LV 的容量,同时我们知道 /dev/hda6 有 89 个 PE[root@www ~]# lvresize -l -89 /dev/vbirdvg/vbirdlv  WARNING: Reducing active and open logical volume to 6.97 GB  THIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce vbirdlv? [y/n]: y  Reducing logical volume vbirdlv to 6.97 GB  Logical volume vbirdlv successfully resized# 会有警告信息!但是我们的实际数据量还是比 6.97G 小,所以就 y 下去吧![root@www ~]# lvdisplay  --- Logical volume ---  LV Name                /dev/vbirdvg/vbirdlv  VG Name                vbirdvg  LV UUID                8vFOPG-Jrw0-Runh-ug24-t2j7-i3nA-rPEyq0  LV Write Access        read/write  LV Status              available  # open                 1  LV Size                6.97 GB  Current LE             446  Segments               5  Allocation             inherit  Read ahead sectors     auto  - currently set to     256  Block device           253:0

很简单吧!这样就将 LV 缩小了!接下来就要将 /dev/hda6 移出 vbirdvg 这个 VG 之外罗! 我们得要先确定 /dev/hda6 里面的 PE 完全不被使用后,才能够将 /dev/hda6 抽离! 所以得要这样进行:

# 4.1 先确认 /dev/hda6 是否将 PE 都移除了![root@www ~]# pvdisplay  --- Physical volume ---  PV Name               /dev/hda6  VG Name               vbirdvg  PV Size               1.40 GB / not usable 11.46 MB  Allocatable           yes (but full)  PE Size (KByte)       16384  Total PE              89  Free PE               0  Allocated PE          89  PV UUID               Z13Jk5-RCls-UJ8B-HzDa-Gesn-atku-rf2biN....(中间省略)....  --- Physical volume ---  PV Name               /dev/hda10  VG Name               vbirdvg  PV Size               2.80 GB / not usable 6.96 MB  Allocatable           yes  PE Size (KByte)       16384  Total PE              179  Free PE               89  Allocated PE          90  PV UUID               7MfcG7-y9or-0Jmb-H7RO-5Pa5-D3qB-G426Vq# 搞了老半天,没有被使用的 PE 竟然在 /dev/hda10 !此时得要搬移 PE 罗![root@www ~]# pvmove /dev/hda6 /dev/hda10# pvmove 来源PV 目标PV ,可以将 /dev/hda6 内的 PE 通通移动到 /dev/hda10# 尚未被使用的 PE 去 (Free PE)。# 4.2 将 /dev/hda6 移出 vbirdvg 中![root@www ~]# vgreduce vbirdvg /dev/hda6  Removed "/dev/hda6" from volume group "vbirdvg"[root@www ~]# pvscan  PV /dev/hda7    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda8    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda9    VG vbirdvg   lvm2 [1.39 GB / 0    free]  PV /dev/hda10   VG vbirdvg   lvm2 [2.80 GB / 0    free]  PV /dev/hda6                 lvm2 [1.40 GB]  Total: 5 [8.37 GB] / in use: 4 [6.97 GB] / in no VG: 1 [1.40 GB][root@www ~]# pvremove /dev/hda6  Labels on physical volume "/dev/hda6" successfully wiped

很有趣吧!这样你的文件系统以及实际的 LV 与 VG 通通变小了,而且那个 /dev/hda6 还真的可以拿出来! 可以进行其他的用途啦!非常简单吧!




小标题的图示LVM 相关命令汇整与 LVM 的关闭

将上述用过的一些命令汇整一下,提供参考:

任务PV 阶段VG 阶段LV 阶段搜寻(scan)pvscanvgscanlvscan创建(create)pvcreatevgcreatelvcreate列出(display)pvdisplayvgdisplaylvdisplay添加(extend) vgextendlvextend (lvresize)减少(reduce) vgreducelvreduce (lvresize)删除(remove)pvremovevgremovelvremove改变容量(resize)  lvresize改变属性(attribute)pvchangevgchangelvchange

        至於文件系统阶段 (filesystem 的格式化处理) 部分,还需要以 resize2fs 来修订文件系统实际的大小才行啊! ^_^ 。

        至於虽然 LVM 可以弹性的管理你的磁碟容量,但是要注意,如果你想要使用 LVM 管理您的硬盘时,那么在安装的时候就得要做好 LVM 的规划了, 否则未来还是需要先以传统的磁碟添加方式来添加后,移动数据后,才能够进行 LVM 的使用啊!

       会玩 LVM 还不行!你必须要会移除系统内的 LVM 喔!因为你的实体 partition 已经被使用到 LVM 去, 如果你还没有将 LVM 关闭就直接将那些 partition 删除或转为其他用途的话,系统是会发生很大的问题的! 所以罗,你必须要知道如何将 LVM 的装置关闭并移除才行!会不会很难呢?其实不会啦! 依据以下的流程来处理即可:

  1. 先卸载系统上面的 LVM 文件系统 (包括快照与所有 LV);
  2. 使用 lvremove 移除 LV ;
  3. 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;
  4. 使用 vgremove 移除 VG:
  5. 使用 pvremove 移除 PV;
  6. 最后,使用 fdisk 修改 ID 回来啊!

好吧!那就实际的将我们之前创建的所有 LVM 数据给删除吧!

[root@www ~]# umount /mnt/lvm[root@www ~]# umount /mnt/snapshot[root@www ~]# lvremove /dev/vbirdvg/vbirdss  <==先处理快照Do you really want to remove active logical volume "vbirdss"? [y/n]: y  Logical volume "vbirdss" successfully removed[root@www ~]# lvremove /dev/vbirdvg/vbirdlv  <==再处理原系统Do you really want to remove active logical volume "vbirdlv"? [y/n]: y  Logical volume "vbirdlv" successfully removed[root@www ~]# vgchange -a n vbirdvg  0 logical volume(s) in volume group "vbirdvg" now active[root@www ~]# vgremove vbirdvg  Volume group "vbirdvg" successfully removed[root@www ~]# pvremove /dev/hda{6,7,8,9,10}  Labels on physical volume "/dev/hda6" successfully wiped  Labels on physical volume "/dev/hda7" successfully wiped  Labels on physical volume "/dev/hda8" successfully wiped  Labels on physical volume "/dev/hda9" successfully wiped  Labels on physical volume "/dev/hda10" successfully wiped

最后再用 fdisk 将磁碟的 ID 给他改回来 83 就好啦!整个过程就这样的啦! ^_^







小标题的图示LVM 的系统快照

现在你知道 LVM 的好处咯,未来如果你有想要添加某个 LVM 的容量时,就可以透过这个放大、缩小的功能来处理。 那么 LVM 除了这些功能之外,还有什么能力呢?其实他还有一个重要的能力,那就是系统快照 (snapshot)。 什么是系统快照啊?快照就是将当时的系统资讯记录下来,就好像照相记录一般! 未来若有任何数据更动了,则原始数据会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。 用讲的好像很难懂,我们用图解说明一下好了:

LVM 系统快照区域的备份示意图
图 3.5.1、LVM 系统快照区域的备份示意图(虚线为文件系统,长虚线为快照区)

左图为最初建置系统快照区的状况,LVM 会预留一个区域 (左图的左侧三个 PE 区块) 作为数据存放处。 此时快照区内并没有任何数据,而快照区与系统区共享所有的 PE 数据, 因此你会看到快照区的内容与文件系统是一模一样的。 等到系统运行一阵子后,假设 A 区域的数据被更动了 (上面右图所示),则更动前系统会将该区域的数据移动到快照区, 所以在右图的快照区被占用了一块 PE 成为 A,而其他 B 到 I 的区块则还是与文件系统共享!

照这样的情况来看,LVM 的系统快照是非常棒的『备份工具』,因为他只有备份有被更动到的数据, 文件系统内没有被变更的数据依旧保持在原本的区块内,但是 LVM 快照功能会知道那些数据放置在哪里, 因此『快照』当时的文件系统就得以『备份』下来,且快照所占用的容量又非常小!所以您说,这不是很棒的工具又是什么?

那么快照区要如何创建与使用呢?首先,由於快照区与原本的 LV 共享很多 PE 区块,因此快照区与被快照的 LV 必须要在同一个 VG 上头。但是我们刚刚将 /dev/hda6 移除 vbirdvg 了,目前 vbirdvg 剩下的容量为 0 !因此,在这个小节里面我们得要再加入 /dev/hda6 到我们的 VG 后, 才能继续创建快照区罗!底下的动作赶紧再来玩玩看!


  • 快照区的创建

底下的动作主要在添加需要的 VG 容量,然后再透过 lvcreate -s 的功能创建快照区

# 1. 先观察 VG 还剩下多少剩余容量[root@www ~]# vgdisplay  --- Volume group ---  VG Name               vbirdvg....(其他省略)....  VG Size               6.97 GB  PE Size               16.00 MB  Total PE              446  Alloc PE / Size       446 / 6.97 GB  Free  PE / Size       0 / 0  <==没有多余的 PE 可用!# 2. 将刚刚移除的 /dev/hda6 加入这个 VG 吧![root@www ~]# pvcreate /dev/hda6  Physical volume "/dev/hda6" successfully created[root@www ~]# vgextend vbirdvg /dev/hda6  Volume group "vbirdvg" successfully extended[root@www ~]# vgdisplay  --- Volume group ---  VG Name               vbirdvg....(其他省略)....  VG Size               8.36 GB  PE Size               16.00 MB  Total PE              535  Alloc PE / Size       446 / 6.97 GB  Free  PE / Size       89 / 1.39 GB  <==多出了 89 个 PE 可用罗!# 3. 利用 lvcreate 创建系统快照区,我们取名为 vbirdss,且给予 60 个 PE[root@www ~]# lvcreate -l 60 -s -n vbirdss /dev/vbirdvg/vbirdlv  Logical volume "vbirdss" created# 上述的命令中最重要的是那个 -s 的选项!代表是 snapshot 快照功能之意!# -n 后面接快照区的装置名称, /dev/.... 则是要被快照的 LV 完整档名。# -l 后面则是接使用多少个 PE 来作为这个快照区使用。[root@www ~]# lvdisplay  --- Logical volume ---  LV Name                /dev/vbirdvg/vbirdss  VG Name                vbirdvg  LV UUID                K2tJ5E-e9mI-89Gw-hKFd-4tRU-tRKF-oeB03a  LV Write Access        read/write  LV snapshot status     active destination for /dev/vbirdvg/vbirdlv  LV Status              available  # open                 0  LV Size                6.97 GB    <==被快照的原 LV 磁碟容量  Current LE             446  COW-table size         960.00 MB  <==快照区的实际容量  COW-table LE           60         <==快照区占用的 PE 数量  Allocated to snapshot  0.00%  Snapshot chunk size    4.00 KB  Segments               1  Allocation             inherit  Read ahead sectors     auto  - currently set to     256  Block device           253:1

您看看!这个 /dev/vbirdvg/vbirdss 快照区就被创建起来了!而且他的 VG 量竟然与原本的 /dev/vbirdvg/vbirdlv 相同!也就是说,如果你真的挂载这个装置时,看到的数据会跟原本的 vbirdlv 相同喔!我们就来测试看看:

[root@www ~]# mkdir /mnt/snapshot[root@www ~]# mount /dev/vbirdvg/vbirdss /mnt/snapshot[root@www ~]# dfFilesystem           1K-blocks      Used Available Use% Mounted on/dev/hda2              9920624   3859032   5549524  42% //dev/hda3              4956316   1056996   3643488  23% /home/dev/hda1               101086     21408     74459  23% /boottmpfs                   371332         0    371332   0% /dev/shm/dev/mapper/vbirdvg-vbirdlv                       6955584    262632   6410328   4% /mnt/lvm/dev/mapper/vbirdvg-vbirdss                       6955584    262632   6410328   4% /mnt/snapshot# 有没有看到!这两个咚咚竟然是一模一样喔!我们根本没有动过# /dev/vbirdvg/vbirdss 对吧!不过这里面会主动记录原 vbirdlv 的内容![root@www ~]# umount /mnt/snapshot# 最后将他卸载!我们准备来玩玩有趣的东西!


  • 利用快照区复原系统

首先,我们来玩一下,如何利用快照区复原系统吧!不过你要注意的是,你要复原的数据量不能够高於快照区所能负载的实际容量。由於原始数据会被搬移到快照区, 如果你的快照区不够大,若原始数据被更动的实际数据量比快照区大,那么快照区当然容纳不了,这时候快照功能会失效喔! 所以上面的案例中鸟哥才给予 60 个 PE (共 900MB) 作为快照区存放数据用。

我们的 /mnt/lvm 已经有 /mnt/lvm/etc, /mnt/lvm/log 等目录了,接下来我们将这个文件系统的内容作个变更, 然后再以快照区数据还原看看:

# 1. 先将原本的 /dev/vbirdvg/vbirdlv 内容作些变更,增增减减一些目录吧![root@www ~]# df /mnt/lvmFilesystem           1K-blocks      Used Available Use% Mounted on/dev/mapper/vbirdvg-vbirdlv                       6955584    262632   6410328   4% /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x 105 root root 12288 Mar 11 16:59 etcdrwxr-xr-x  17 root root  4096 Mar 11 14:17 logdrwx------   2 root root 16384 Mar 11 16:59 lost+found[root@www ~]# rm -r /mnt/lvm/log[root@www ~]# cp -a /boot /lib /sbin /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x   4 root root  4096 Dec 15 16:28 bootdrwxr-xr-x 105 root root 12288 Mar 11 16:59 etcdrwxr-xr-x  14 root root  4096 Sep  5  2008 libdrwx------   2 root root 16384 Mar 11 16:59 lost+founddrwxr-xr-x   2 root root 12288 Sep  5  2008 sbin# 看起来数据已经不一样了![root@www ~]# lvdisplay /dev/vbirdvg/vbirdss  --- Logical volume ---  LV Name                /dev/vbirdvg/vbirdss  VG Name                vbirdvg....(中间省略)....  Allocated to snapshot  12.22%....(底下省略)....# 从这里也看得出来,快照区已经被使用了 12.22% !因为原始的文件系统有异动过!# 2. 利用快照区将原本的 filesystem 备份[root@www ~]# mount /dev/vbirdvg/vbirdss /mnt/snapshot[root@www ~]# dfFilesystem           1K-blocks      Used Available Use% Mounted on/dev/mapper/vbirdvg-vbirdlv                       6955584    370472   6302488   6% /mnt/lvm/dev/mapper/vbirdvg-vbirdss                       6955584    262632   6410328   4% /mnt/snapshot# 看吧!两者确实不一样了!开始将快照区内容复制出来吧![root@www ~]# mkdir -p /backups <==确认真的有这个目录![root@www ~]# cd /mnt/snapshot[root@www snapshot]# tar -jcv -f /backups/lvm.tar.bz2 *# 此时你就会有一个备份数据,亦即是 /backups/lvm.tar.bz2 了!

为什么要备份呢?为什么不可以直接格式化 /dev/vbirdvg/vbirdlv 然后将 /dev/vbirdvg/vbirdss 直接复制给 vbirdlv 呢? 要知道 vbirdss 其实是 vbirdlv 的快照,因此如果你格式化整个 vbirdlv 时,原本的文件系统所有数据都会被搬移到 vbirdss。 那如果 vbirdss 的容量不够大 (通常也真的不够大),那么部分数据将无法复制到 vbirdss 内,数据当然无法全部还原啊! 所以才要在上面表格中制作出一个备份文件的!了解乎?

而快照还有另外一个功能,就是你可以比对 /mnt/lvm 与 /mnt/snapshot 的内容,就能够发现到最近你到底改了啥咚咚! 这样也是很不赖啊!您说是吧! ^_^!接下来让我们准备还原 vbirdlv 的内容吧!

# 3. 将 vbirdss 卸载并移除 (因为里面的内容已经备份起来了)[root@www ~]# umount /mnt/snapshot[root@www ~]# lvremove /dev/vbirdvg/vbirdssDo you really want to remove active logical volume "vbirdss"? [y/n]: y  Logical volume "vbirdss" successfully removed[root@www ~]# umount /mnt/lvm[root@www ~]# mkfs -t ext3 /dev/vbirdvg/vbirdlv[root@www ~]# mount /dev/vbirdvg/vbirdlv /mnt/lvm[root@www ~]# tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x 105 root root 12288 Mar 11 16:59 etcdrwxr-xr-x  17 root root  4096 Mar 11 14:17 logdrwx------   2 root root 16384 Mar 11 16:59 lost+found# 是否与最初的内容相同啊!这就是透过快照来还原的一个简单的方法罗!


  • 利用快照区进行各项练习与测试的任务,再以原系统还原快照

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

Tips:
以前鸟哥老是觉得使用 LVM 的快照来进行备份不太合理,因为还要制作一个备份档!后来仔细研究并参考徐秉义老师的教材(注3)后,才发现 LVM 的快照实在是一个棒到不行的工具!尤其是在虚拟机器当中建置多份给同学使用的测试环境, 你只要有一个基础的环境保持住,其他的环境使用快照来提供即可。即时同学将系统搞烂了,你只要将快照区删除, 再重建一个快照区!这样环境就恢复了!天呐!实在是太棒了! ^_^鸟哥的图示
# 1. 创建一个大一些的快照区,让我们将 /dev/hda6 的 PE 全部给快照区![root@www ~]# lvcreate -s -l 89 -n vbirdss /dev/vbirdvg/vbirdlv  Logical volume "vbirdss" created[root@www ~]# lvdisplay /dev/vbirdvg/vbirdss  --- Logical volume ---  LV Name                /dev/vbirdvg/vbirdss  VG Name                vbirdvg  LV UUID                as0ocQ-KjRS-Bu7y-fYoD-1CHC-0V3Y-JYsjj1  LV Write Access        read/write  LV snapshot status     active destination for /dev/vbirdvg/vbirdlv  LV Status              available  # open                 0  LV Size                6.97 GB  Current LE             446  COW-table size         1.39 GB  COW-table LE           89  Allocated to snapshot  0.00%  Snapshot chunk size    4.00 KB  Segments               1  Allocation             inherit  Read ahead sectors     auto  - currently set to     256  Block device           253:1# 如何!这个快照区不小吧!# 2. 隐藏 vbirdlv 挂载 vbirdss[root@www ~]# umount /mnt/lvm[root@www ~]# mount /dev/vbirdvg/vbirdss /mnt/snapshot[root@www ~]# df /mnt/snapshotFilesystem           1K-blocks      Used Available Use% Mounted on/dev/mapper/vbirdvg-vbirdss                       7192504    265804   6561340   4% /mnt/snapshot# 3. 开始恶搞![root@www ~]# rm -r /mnt/snapshot/etc /mnt/snapshot/log[root@www ~]# cp -a /boot /lib /sbin /mnt/snapshot/[root@www ~]# ll /mnt/snapshotdrwxr-xr-x  4 root root  4096 Dec 15 16:28 bootdrwxr-xr-x 14 root root  4096 Sep  5  2008 libdrwx------  2 root root 16384 Mar 11 16:59 lost+founddrwxr-xr-x  2 root root 12288 Sep  5  2008 sbin  <==与原本数据有差异了[root@www ~]# mount /dev/vbirdvg/vbirdlv /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x 105 root root 12288 Mar 11 16:59 etcdrwxr-xr-x  17 root root  4096 Mar 11 14:17 logdrwx------   2 root root 16384 Mar 11 16:59 lost+found# 不论你在快照区恶搞啥咚咚,原本的 vbirdlv 里面的数据安好如初啊!# 假设你将 vbirdss 搞烂了!里面的数据不再需要!那该如何是好?# 4. 还原原本快照区的数据,回到与原文件系统相同的资讯[root@www ~]# umount /mnt/snapshot[root@www ~]# lvremove /dev/vbirdvg/vbirdssDo you really want to remove active logical volume "vbirdss"? [y/n]: y  Logical volume "vbirdss" successfully removed[root@www ~]# lvcreate -s -l 89 -n vbirdss /dev/vbirdvg/vbirdlv[root@www ~]# mount /dev/vbirdvg/vbirdss /mnt/snapshot[root@www ~]# ll /mnt/snapshotdrwxr-xr-x 105 root root 12288 Mar 11 16:59 etcdrwxr-xr-x  17 root root  4096 Mar 11 14:17 logdrwx------   2 root root 16384 Mar 11 16:59 lost+found# 数据这样就复原了!

老实说,上面的测试有点无厘头~因为快照区损毁了就删除再建一个就好啦!何必还要测试呢? 不过,为了让您了解到快照区也能够这样使用,上面的测试还是需要存在的啦!未来如果你有接触到虚拟机器, 再回到这里来温习一下肯定会有收获的!

阅读全文
0 0
原创粉丝点击