磁碟配额(Quota)与进阶文件系统管理 - 图文

更新时间:2023-12-21 14:33:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

磁碟配额(Quota)与进阶文件系统管理

最近升级日期:2009

辑卷轴管理员 (Logical Volume Manager) 1 什么是 LVM: PV, PE, VG, LV 的意义

2 LVM 实作流程: PV 阶段, VG 阶段, LV 阶段, 文件系统阶段 3 放大 LV 容量: resize2fs 4 缩小 LV 容量

5 LVM 的系统快照: 创建, 还原, 用於测试环境 6 LVM 相关命令汇整与 LVM 的关闭

辑卷轴管理员 (Logical Volume Manager)

个情况,你在当初规划主机的时候将 /home 只给他 50G ,等到使用者众多之后导致这个 filesystem 不够大, 此时?多数的朋友都是这样:再加一颗新硬盘,然后重新分割、格式化,将 /home 的数据完整的复制过来, 然后将原n 卸载重新挂载新的 partition 。啊!好忙碌啊!若是第二次分割却给的容量太多!导致很多磁碟容量被浪费了! 你partition 缩小时,又该如何作?将上述的流程再搞一遍!唉~烦死了,尤其复制很花时间ㄟ~有没有更简单的方法呢就是我们这个小节要介绍的 LVM 这玩意儿!

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

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

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

Physical Volume, PV, 实体卷轴

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

Volume Group, VG, 卷轴群组

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

Physical Extend, PE, 实体延伸区块

默认使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,因此默认的 LVM VG 会有

534/(1024M/G)=256G。 这个 PE 很有趣喔!他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都E 来处理的。 简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。 这样说应该就比较好理解了吧?所以调到 VG 的最大容量喔!

Logical Volume, LV, 逻辑卷轴

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

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

图 3.1.1、PE 与 VG 的相关性图示

所示,VG 内的 PE 会分给虚线部分的 LV,如果未来这个 VG 要扩充的话,加上其他的 PV 即可。 而最重要的 充的话,也是透过加入 VG 内没有使用到的 PE 来扩充的!

实作流程

V, VG, LV 的规划之后,再利用 mkfs 就可以将你的 LV 格式化成为可以利用的文件系统了!而且这个文件系统的能够进行扩充或减少, 而且里面的数据还不会被影响!实在是很『福气啦!』那实作方面要如何进行呢?很简单呢由基础到最终的结果可以这样看:

图 3.1.2、 LVM 各组件的实现流程图示

来,我们就可以利用 LV 这个玩意儿来进行系统的挂载了。不过,你应该要觉得奇怪的是, 那么我的数据写入这个 L是怎么写入硬盘当中的? 呵呵!好问题~其实,依据写入机制的不同,而有两种方式:

线性模式 (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 啊!

实作流程

必需要核心有支持且需要安装 lvm2 这个软件,好佳在的是, CentOS 与其他较新的 distributions 已经默认将 lvm 都安装妥当了!所以你不需要担心这方面的问题!用就对了!

用的测试机又要出动了喔!刚刚我们才练习过 RAID,必须要将一堆目前没有用到的分割槽先杀掉, 然后再重建新且由於鸟哥仅有一个 40GB 的磁碟,所以底下的练习都仅针对同一颗磁碟来作的。 我的要求有点像这样:

先分割出 4 个 partition ,每个 partition 的容量均为 1.5GB 左右,且 system ID 需要为 8e; 全部的 partition 整合成为一个 VG,VG 名称配置为 vbirdvg;且 PE 的大小为 16MB; 全部的 VG 容量都丢给 LV ,LV 的名称配置为 vbirdlv;

最终这个 LV 格式化为 ext3 的文件系统,且挂载在 /mnt/lvm 中

不仔细的介绍实体分割了,请您自行参考第八章的 fdisk 来达成底下的范例:(注意:修改系统识别码请使用 t 这个 f来处理即可)

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

/dev/hda{6,7,8,9} 这四个分割槽就是我们的实体分割槽!也就是底下会实际用到的资讯! 注意看,那个 8e 的出现变成『 Linux LVM 』哩!其实没有配置成为 8e 也没关系, 不过某些 LVM 的侦测命令可能会侦测不到该 parti接下来,就一个一个的处理各流程吧!

PV 阶段

PV 其实很简单,只要直接使用 pvcreate 即可!我们来谈一谈与 PV 有关的命令吧!

pvcreate :将实体 partition 创建成为 PV ;

pvscan :搜寻目前系统里面任何具有 PV 的磁碟; pvdisplay :显示出目前系统上面的 PV 状态;

pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。

接来瞧一瞧吧!

检查有无 PV 在系统上,然后将 /dev/hda6~/dev/hda9 创建成为 PV 格式t@www ~]# pvscan No matching physical volumes found <==找不到任何 存在喔![root@www ~]# pvcreate /dev/hda{6,7,8,9} Physical volume /hda6\ Physical volume \

ssfully created Physical volume \ cal volume \successfully created# 这个命令可以一口气创建个 partition 成为 PV 啦!注意大括号的用途[root@www ~]# pvscan PV hda6 lvm2 [1.40 GB] PV /dev/hda7 lvm2 [1.40 GB] v/hda8 lvm2 [1.40 GB] PV /dev/hda9 lvm2 [1.40 GB] : 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 \cal volume of \ --- NEW Physical volume --- PV Name hda6 <==实际的 partition 装置名称 VG Name 为尚未分配出去,所以空白! PV Size 1.40 GB <==容量说明 Allocatable NO <==是否已被分配,结果是 PE Size (KByte) 0 <==在此 PV 内的 PE 大小 Total PE <==共分割出几个 PE Free PE 0 <==没 用掉的 PE Allocated PE 0 <==尚可分配出去的 PE PV UUID

5-RCls-UJ8B-HzDa-Gesn-atku-rf2biN....(底下省略)....# 由於 PE 是在VG 时才给予的参数,因此在这里看到的 PV 里头的 PE 都会是 0# 而且也多余的 PE 可供分配 (allocatable)。

难,作是很简单!这样就将 PV 创建了两个罗!简单到不行吧! ^_^!继续来玩 VG 去!

VG 阶段

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

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

vgchange :配置 VG 是否启动 (active); vgremove :删除一个 VG 啊!

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

@www ~]# vgcreate [-s N[mgt]] VG名称 PV名称选项与参数:-s :后面 的大小 (size) ,单位可以是 m, g, t (大小写均可)# 1. 将 /dev/hda6-8 成为一个 VG,且指定 PE 为 16MB 喔![root@www ~]# vgcreate -s 16M vg /dev/hda{6,7,8} Volume group \

ed[root@www ~]# vgscan Reading all physical volumes. This may a while... Found volume group \存在这个 vbirdvg 的 VG 啦![root@www ~]# pvscan PV /dev/hda6 VG vg lvm2 [1.39 GB / 1.39 GB free] PV /dev/hda7 VG vbirdvg lvm2

GB / 1.39 GB free] PV /dev/hda8 VG vbirdvg lvm2 [1.39 GB / 1.39 ee] PV /dev/hda9 lvm2 [1.40 GB] Total: 4 [5.57 GB] use: 3 [4.17 GB] / in no VG: 1 [1.40 GB]# 嘿嘿!发现没!有三个 PV 被,剩下一个 /dev/hda9 的 PV 没被用掉![root@www ~]# vgdisplay --- e group --- VG Name vbirdvg System ID Format Metadata Areas 3 Metadata Sequence No 1 VG Access write VG Status resizable MAX LV 0 V 0 Open LV 0 Max PV ur PV 3 Act PV 3 VG Size GB <==整体的 VG 容量有这么大 PE Size 16.00 MB 部每个 PE 的大小 Total PE 267 <==总共的 PE 数有这么多! Alloc PE / Size 0 / 0 Free PE / Size 267 7 GB VG UUID

r-gwOq-jkga-sUPx-vWPu-PmYm-dZH9EO# 最后那三行指的就是 PE 能够使用况!由於尚未切出 LV,因此所有的 PE # 均可自由使用。

创建一个 VG 了!假设我们要添加这个 VG 的容量,因为我们还有 /dev/hda9 嘛!此时你可以这样做:

将剩余的 PV (/dev/hda9) 丢给 vbirdvg 吧![root@www ~]# vgextend vg /dev/hda9 Volume group \

ded[root@www ~]# vgdisplay....(前面省略).... VG Size GB PE Size 16.00 MB Total PE 356 PE / Size 0 / 0 Free PE / Size 356 / 5.56 GB VG UUID r-gwOq-jkga-sUPx-vWPu-PmYm-dZH9EO# 基本上,不难吧!这样就可以抽换整 的大小啊!

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

LV 阶段

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

vcreate :创建 LV 啦!

vscan :查询系统上面的 LV ;

vdisplay :显示系统上面的 LV 状态啊! vextend :在 LV 里面添加容量! vreduce :在 LV 里面减少容量; vremove :删除一个 LV !

vresize :对 LV 进行容量大小的调整!

@www ~]# lvcreate [-L N[mgt]] [-n LV名称] VG名称[root@www ~]# ate [-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 vcreate -l 356 -n vbirdlv vbirdvg Logical volume \created# 本案例中每个 PE 为 16M ,因此上述的命令也可以使用如下的方式来创建:create -L 5.56G -n vbirdlv vbirdvg[root@www ~]# ll vbirdvg/vbirdlvlrwxrwxrwx 1 root root 27 Mar 11 16:49

vbirdvg/vbirdlv ->/dev/mapper/vbirdvg-vbirdlv# 看见了没有啊!这就们最重要的一个玩意儿了![root@www ~]# lvdisplay --- Logical volume LV Name /dev/vbirdvg/vbirdlv <==这个才是 LV 的全 VG Name vbirdvg LV UUID G-Jrw0-Runh-ug24-t2j7-i3nA-rPEyq0 LV Write Access

write LV Status available # open V Size 5.56 GB <==这个 LV 的容量这么 Current LE 356 Segments 4 ation inherit Read ahead sectors auto - ntly set to 256 Block device 253:0

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

文件系统阶段

分鸟哥我就不再多加解释了!直接来进行吧!

格式化、挂载与观察我们的 LV 吧![root@www ~]# mkfs -t ext3 vbirdvg/vbirdlv <==注意 LV 全名![root@www ~]# mkdir

lvm[root@www ~]# mount /dev/vbirdvg/vbirdlv /mnt/lvm[root@www ~]# lesystem 1K-blocks Used Available Use% Mounted

ev/hda2 9920624 3858984 5549572 42% //dev/hda3 16 1056996 3643488 23% /home/dev/hda1 101086 74459 23% /boottmpfs 371332 0 2 0% /dev/shm/dev/mapper/vbirdvg-vbirdlv 20 142592 5306796 3% /mnt/lvm[root@www ~]# cp -a /etc log /mnt/lvm

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

大 LV 容量

是说 LVM 最大的特色就是弹性调整磁碟容量吗?好!那我们就来处理一下,如果要放大 LV 的容量时, 该如何骤呢?其实一点都不难喔!你只要这样做即可:

用 fdisk 配置新的具有 8e system ID 的 partition 利用 pvcreate 建置 PV

利用 vgextend 将 PV 加入我们的 vbirdvg

利用 lvresize 将新加入的 PV 内的 PE 加入 vbirdlv 中 透过 resize2fs 将文件系统的容量确实添加!

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

处理出一个 3GB 的新的 partition ,在鸟哥的系统中应该是 hda10[root@www ~]# fdisk /dev/hda <==其他的动作请自行处理[root@www artprobe[root@www ~]# fdisk -l Device Boot Start Blocks Id System....(中间省略)..../dev/hda10 3150 2939863+ 8e Linux LVM# 这个就是我们要的新的 tion 罗!# 2. 创建新的 PV:[root@www ~]# pvcreate /dev/hda10 cal volume \[root@www ~]# pvscan ev/hda6 VG vbirdvg lvm2 [1.39 GB / 0 free] PV /dev/hda7 irdvg lvm2 [1.39 GB / 0 free] PV /dev/hda8 VG vbirdvg [1.39 GB / 0 free] PV /dev/hda9 VG vbirdvg lvm2 [1.39 GB / free] PV /dev/hda10 lvm2 [2.80 GB] Total: 5 [8.37 in use: 4 [5.56 GB] / in no VG: 1 [2.80 GB]# 可以看到 /dev/hda10 是入并且尚未被使用的喔!# 3. 加大 VG ,利用 vgextend 功能![root@www gextend vbirdvg /dev/hda10 Volume group \

ded[root@www ~]# vgdisplay --- Volume group --- VG Name vg System ID Format lvm2 Metadata Areas etadata Sequence No 4 VG Access read/write VG

s resizable MAX LV 0 Cur LV pen LV 1 Max PV 0 Cur PV ct PV 5 VG Size 8.36 GB PE Size MB Total PE 535 Alloc PE / Size 356 / 5.56 GB PE / Size 179 / 2.80 GB VG UUID

r-gwOq-jkga-sUPx-vWPu-PmYm-dZH9EO# 不但整体 VG 变大了!而且剩余的 有 179 个,容量则为 2.80G# 4. 放大 LV 吧!利用 lvresize 的功能来添[root@www ~]# lvresize -l +179 /dev/vbirdvg/vbirdlv Extending al volume vbirdlv to 8.36 GB Logical volume vbirdlv successfully ed# 这样就添加了 LV 了喔!lvresize 的语法很简单,基本上同样透过 -l 来添加!# 若要添加则使用 + ,若要减少则使用 - !详细的选项请参考 vresize 罗![root@www ~]# lvdisplay --- Logical volume --- LV /dev/vbirdvg/vbirdlv VG Name vg LV UUID

G-Jrw0-Runh-ug24-t2j7-i3nA-rPEyq0 LV Write Access write LV Status available # open 1 ze 8.36 GB Current LE 535 Segments llocation inherit Read ahead sectors auto - ntly set to 256 Block device 253:0[root@www ~]# df lvmFilesystem 1K-blocks Used Available Use% Mounted ev/mapper/vbirdvg-vbirdlv 5741020 261212 76 5% /mnt/lvm

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

先看一下原本的文件系统内的 superblock 记录情况吧![root@www ~]# 2fs /dev/vbirdvg/vbirdlvdumpe2fs 1.39 (29-May-2006)....(中间省..Block count: 1458176 <==这个filesystem的 block ...(中间省略)....Blocks per group: 32768 <==多少个 配置成为一个 block groupGroup 0: (Blocks 0-32767) <==内为 block 的号码....(中间省略)....Group 44: (Blocks

92-1458175) <==这是本系统中最后一个 group....(后面省略)....# esize2fs 的语法[root@www ~]# resize2fs [-f] [device] [size]选项与:-f :强制进行 resize 的动作![device]:装置的文件名称;e] :可以加也可以不加。如果加上 size 的话,那么就必须要给予一个单 譬如 M, G 等等。如果没有 size 的话,那么默认使用『整个 tion』 的容量来处理!# 5.3 完整的将 LV 的容量扩充到整个 ystem 吧![root@www ~]# resize2fs /dev/vbirdvg/vbirdlvresize2fs (29-May-2006)Filesystem at /dev/vbirdvg/vbirdlv is mounted on lvm; on-line resizing Performing an on-line resize of vbirdvg/vbirdlv to 2191360 (4k) blocks.The filesystem on vbirdvg/vbirdlv is now 2191360 blocks long.# 可怕吧!这一版的 lvm 竟可以线上进行 resize 的功能哩!真好![root@www ~]# df

lvmFilesystem 1K-blocks Used Available Use% Mounted ev/mapper/vbirdvg-vbirdlv 8628956 262632 68 4% /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x 105 root root Mar 11 16:59 etcdrwxr-xr-x 17 root root 4096 Mar 11 14:17

rwx------ 2 root root 16384 Mar 11 16:59 lost+found# 刚刚复制进去据可还是存在的喔!并没有消失不见!

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

如果你再以 dumpe2fs 来检查 /dev/vbirdvg/vbirdlv 时,就会发现后续的 Group 添加了! 如果还是搞不清楚什么是时,请回到第八章看一下该章内图1.3.1的介绍吧!

小 LV 容量

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

先找出 /dev/hda6 的容量大小,并尝试计算文件系统需缩小到多少

t@www ~]# pvdisplay --- Physical volume --- PV Name hda6 VG Name vbirdvg PV Size 1.40 GB usable 11.46 MB Allocatable yes (but full) PE Size e) 16384 Total PE 89 Free PE 0 ated PE 89 PV UUID

5-RCls-UJ8B-HzDa-Gesn-atku-rf2biN# 从这里可以看出 /dev/hda6 有多而且含有 89 个 PE 的量喔!# 那如果要使用 resize2fs 时,则总量减去 B 就对了![root@www ~]# pvscan PV /dev/hda6 VG vbirdvg lvm2 GB / 0 free] PV /dev/hda7 VG vbirdvg lvm2 [1.39 GB / 0 PV /dev/hda8 VG vbirdvg lvm2 [1.39 GB / 0 free] PV hda9 VG vbirdvg lvm2 [1.39 GB / 0 free] PV /dev/hda10 VG vg lvm2 [2.80 GB / 0 free] Total: 5 [8.36 GB] / in use: 5 [8.36 in no VG: 0 [0 ]# 从上面可以发现如果扣除 /dev/hda6 则剩余容量有:3+2.8=6.97# 2. 就直接降低文件系统的容量吧![root@www ~]# resize2fs vbirdvg/vbirdlv 6900Mresize2fs 1.39 (29-May-2006)Filesystem at vbirdvg/vbirdlv is mounted on /mnt/lvm; on-line resizingOn-line king from 2191360 to 1766400 not supported.# 容量好像不能够写小数点,因此 6.9G 是错误的,鸟哥就使用 6900M 了。# 此外,放大可以线上直接,缩小文件系统似乎无法支持!所以要这样做:[root@www ~]# umount lvm[root@www ~]# resize2fs /dev/vbirdvg/vbirdlv 6900Mresize2fs (29-May-2006)Please run 'e2fsck -f /dev/vbirdvg/vbirdlv' first.# 他们先进行磁碟检查!不罗唆!那就直接进行吧![root@www ~]# e2fsck -f vbirdvg/vbirdlve2fsck 1.39 (29-May-2006)Pass 1: Checking inodes, s, and sizesPass 2: Checking directory structurePass 3: Checking

tory connectivityPass 4: Checking reference countsPass 5: Checking summary information/dev/vbirdvg/vbirdlv: 2438/1087008 files (0.1% ontiguous), [root@www ~]# resize2fs /dev/vbirdvg/vbirdlv resize2fs 1.39 (29-May-2006)Resizing the filesystem on vbirdvg/vbirdlv to 1766400 (4k) blocks.The filesystem on

vbirdvg/vbirdlv is now 1766400 blocks long.# 再来 resize2fs 一次就成功了!如上所示啊![root@www ~]# mount /dev/vbirdvg/vbirdlv

lvm[root@www ~]# df /mnt/lvmFilesystem 1K-blocks Available Use% Mounted on/dev/mapper/vbirdvg-vbirdlv 84 262632 6410328 4% /mnt/lvm

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

降低 LV 的容量,同时我们知道 /dev/hda6 有 89 个 PE[root@www ~]# ize -l -89 /dev/vbirdvg/vbirdlv WARNING: Reducing active and open al volume to 6.97 GB THIS MAY DESTROY YOUR DATA (filesystem etc.)Do eally want to reduce vbirdlv? [y/n]: y Reducing logical volume lv to 6.97 GB Logical volume vbirdlv successfully resized# 会有警息!但是我们的实际数据量还是比 6.97G 小,所以就 y 下去吧![root@www vdisplay --- Logical volume --- LV Name

vbirdvg/vbirdlv VG Name vbirdvg LV UUID G-Jrw0-Runh-ug24-t2j7-i3nA-rPEyq0 LV Write Access write LV Status available # open 1 ze 6.97 GB Current LE 446 Segments llocation inherit Read ahead sectors auto - ntly set to 256 Block device 253:0

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

先确认 /dev/hda6 是否将 PE 都移除了![root@www ~]# pvdisplay --- cal volume --- PV Name /dev/hda6 VG Name vg PV Size 1.40 GB / not usable 11.46 MB

atable yes (but full) PE Size (KByte) 16384

PE 89 Free PE 0 Allocated PE PV UUID

5-RCls-UJ8B-HzDa-Gesn-atku-rf2biN....(中间省略).... ---

cal volume --- PV Name /dev/hda10 VG Name vg PV Size 2.80 GB / not usable 6.96 MB Allocatable PE Size (KByte) 16384 Total PE 179 Free PE Allocated PE 90 PV UUID

7-y9or-0Jmb-H7RO-5Pa5-D3qB-G426Vq# 搞了老半天,没有被使用的 PE 竟然ev/hda10 !此时得要搬移 PE 罗![root@www ~]# pvmove /dev/hda6 hda10# pvmove 来源PV 目标PV ,可以将 /dev/hda6 内的 PE 通通移动到 hda10# 尚未被使用的 PE 去 (Free PE)。# 4.2 将 /dev/hda6 移出 vg 中![root@www ~]# vgreduce vbirdvg /dev/hda6 Removed /hda6\[root@www ~]# pvscan PV

hda7 VG vbirdvg lvm2 [1.39 GB / 0 free] PV /dev/hda8 VG vg lvm2 [1.39 GB / 0 free] PV /dev/hda9 VG vbirdvg lvm2 GB / 0 free] PV /dev/hda10 VG vbirdvg lvm2 [2.80 GB / 0 PV /dev/hda6 lvm2 [1.40 GB] Total: 5 [8.37 GB] / : 4 [6.97 GB] / in no VG: 1 [1.40 GB][root@www ~]# pvremove /dev/hda6 s on physical volume \

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

的系统快照

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

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

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

的情况来看,LVM 的系统快照是非常棒的『备份工具』,因为他只有备份有被更动到的数据, 文件系统内没有被旧保持在原本的区块内,但是 LVM 快照功能会知道那些数据放置在哪里, 因此『快照』当时的文件系统就得以『

且快照所占用的容量又非常小!所以您说,这不是很棒的工具又是什么?

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

快照区的创建

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

先观察 VG 还剩下多少剩余容量[root@www ~]# vgdisplay --- Volume --- VG Name vbirdvg....(其他省略).... VG Size GB PE Size 16.00 MB Total PE 446 PE / Size 446 / 6.97 GB Free PE / Size 0 / 0 <==没余的 PE 可用!# 2. 将刚刚移除的 /dev/hda6 加入这个 VG 吧![root@www vcreate /dev/hda6 Physical volume \

ed[root@www ~]# vgextend vbirdvg /dev/hda6 Volume group \ssfully extended[root@www ~]# vgdisplay --- Volume group --- VG vbirdvg....(其他省略).... VG Size GB PE Size 16.00 MB Total PE 535 PE / Size 446 / 6.97 GB Free PE / Size 89 / 1.39 GB <==了 89 个 PE 可用罗!# 3. 利用 lvcreate 创建系统快照区,我们取名为 ss,且给予 60 个 PE[root@www ~]# lvcreate -l 60 -s -n vbirdss vbirdvg/vbirdlv Logical volume \上述的命令中最的是那个 -s 的选项!代表是 snapshot 快照功能之意!# -n 后面接快照区置名称, /dev/.... 则是要被快照的 LV 完整档名。# -l 后面则是接使用个 PE 来作为这个快照区使用。[root@www ~]# lvdisplay --- Logical e --- LV Name /dev/vbirdvg/vbirdss VG Name vg LV UUID

E-e9mI-89Gw-hKFd-4tRU-tRKF-oeB03a LV Write Access write LV snapshot status active destination for

vbirdvg/vbirdlv LV Status available # open Size 6.97 GB <==被快照的原 LV 磁碟容量 Current 446 COW-table size 960.00 MB <==快照区的实际容COW-table LE 60 <==快照区占用的 PE 数量

ated to snapshot 0.00% Snapshot chunk size 4.00 KB Segments llocation inherit Read ahead sectors auto - ntly set to 256 Block device 253:1

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

@www ~]# mkdir /mnt/snapshot[root@www ~]# mount /dev/vbirdvg/vbirdss snapshot[root@www ~]# dfFilesystem 1K-blocks Used able Use% Mounted on/dev/hda2 9920624 3859032 24 42% //dev/hda3 4956316 1056996 3643488 23% /dev/hda1 101086 21408 74459 23% tmpfs 371332 0 371332 0%

shm/dev/mapper/vbirdvg-vbirdlv 6955584 2 6410328 4% /mnt/lvm/dev/mapper/vbirdvg-vbirdss 84 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 等目录了,接下来我们将这个文件系统的内容作个变更, 然后再以快看看:

先将原本的 /dev/vbirdvg/vbirdlv 内容作些变更,增增减减一些目录吧!t@www ~]# df /mnt/lvmFilesystem 1K-blocks Used

able Use% Mounted on/dev/mapper/vbirdvg-vbirdlv 84 262632 6410328 4% /mnt/lvm[root@www ~]# ll

lvmdrwxr-xr-x 105 root root 12288 Mar 11 16:59 etcdrwxr-xr-x 17 oot 4096 Mar 11 14:17 logdrwx------ 2 root root 16384 Mar 11 16:59 found[root@www ~]# rm -r /mnt/lvm/log[root@www ~]# cp -a /boot /lib /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x 4 root root 4096 16:28 bootdrwxr-xr-x 105 root root 12288 Mar 11 16:59 etcdrwxr-xr-x ot root 4096 Sep 5 2008 libdrwx------ 2 root root 16384 Mar 11 lost+founddrwxr-xr-x 2 root root 12288 Sep 5 2008 sbin# 看起据已经不一样了![root@www ~]# lvdisplay /dev/vbirdvg/vbirdss --- al volume --- LV Name /dev/vbirdvg/vbirdss VG vbirdvg....(中间省略).... Allocated to snapshot %....(底下省略)....# 从这里也看得出来,快照区已经被使用了 12.22% !原始的文件系统有异动过!# 2. 利用快照区将原本的 filesystem 备份t@www ~]# mount /dev/vbirdvg/vbirdss /mnt/snapshot[root@www ~]# lesystem 1K-blocks Used Available Use% Mounted

ev/mapper/vbirdvg-vbirdlv 6955584 370472 88 6% /mnt/lvm/dev/mapper/vbirdvg-vbirdss 84 262632 6410328 4% /mnt/snapshot# 看吧!两者确实不一样了!将快照区内容复制出来吧![root@www ~]# mkdir -p /backups <==确认真这个目录![root@www ~]# cd /mnt/snapshot[root@www snapshot]# tar -jcv ackups/lvm.tar.bz2 *# 此时你就会有一个备份数据,亦即是 ups/lvm.tar.bz2 了!

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

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

将 vbirdss 卸载并移除 (因为里面的内容已经备份起来了)[root@www ~]# t /mnt/snapshot[root@www ~]# lvremove /dev/vbirdvg/vbirdssDo you y want to remove active logical volume \ Logical e \[root@www ~]# umount

lvm[root@www ~]# mkfs -t ext3 /dev/vbirdvg/vbirdlv[root@www ~]# /dev/vbirdvg/vbirdlv /mnt/lvm[root@www ~]# tar -jxv -f

ups/lvm.tar.bz2 -C /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x 105 oot 12288 Mar 11 16:59 etcdrwxr-xr-x 17 root root 4096 Mar 11 14:17 rwx------ 2 root root 16384 Mar 11 16:59 lost+found# 是否与最初的相同啊!这就是透过快照来还原的一个简单的方法罗!

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

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

Tips:

以前鸟哥老是觉得使用 LVM 的快照来进行备份不太合理,因为还要制作一个备份档!后来仔细研究并参考徐秉义老师的教材(注3)后,才发现 LVM 的快照实在是一个棒到不行的工具!尤其是在虚拟机器当中建置多份给同学使用的测试环境, 你只要有一个基础的环境保持住,其他的环境使用快照来提供即可。即时同学将系统搞烂了,你只要将快照区删除, 再重建一个快照区!这样环境就恢复了!天呐!实在是太棒了! ^_^

创建一个大一些的快照区,让我们将 /dev/hda6 的 PE 全部给快照区!t@www ~]# lvcreate -s -l 89 -n vbirdss /dev/vbirdvg/vbirdlv Logical e \[root@www ~]# lvdisplay /dev/vbirdvg/vbirdss gical volume --- LV Name /dev/vbirdvg/vbirdss VG vbirdvg LV UUID

Q-KjRS-Bu7y-fYoD-1CHC-0V3Y-JYsjj1 LV Write Access write LV snapshot status active destination for

vbirdvg/vbirdlv LV Status available # open V Size 6.97 GB Current LE 446 able size 1.39 GB COW-table LE 89 Allocated to hot 0.00% Snapshot chunk size 4.00 KB Segments llocation inherit Read ahead sectors auto - ntly set to 256 Block device 253:1# 如何!这个快照小吧!# 2. 隐藏 vbirdlv 挂载 vbirdss[root@www ~]# umount lvm[root@www ~]# mount /dev/vbirdvg/vbirdss /mnt/snapshot[root@www f /mnt/snapshotFilesystem 1K-blocks Used Available Mounted on/dev/mapper/vbirdvg-vbirdss 04 265804 6561340 4% /mnt/snapshot# 3. 开始恶搞![root@www m -r /mnt/snapshot/etc /mnt/snapshot/log[root@www ~]# cp -a /boot /sbin /mnt/snapshot/[root@www ~]# ll /mnt/snapshotdrwxr-xr-x 4 root 4096 Dec 15 16:28 bootdrwxr-xr-x 14 root root 4096 Sep 5 libdrwx------ 2 root root 16384 Mar 11 16:59 lost+founddrwxr-xr-x t root 12288 Sep 5 2008 sbin <==与原本数据有差异了[root@www ~]# /dev/vbirdvg/vbirdlv /mnt/lvm[root@www ~]# ll /mnt/lvmdrwxr-xr-x oot root 12288 Mar 11 16:59 etcdrwxr-xr-x 17 root root 4096 Mar 11 logdrwx------ 2 root root 16384 Mar 11 16:59 lost+found# 不论你照区恶搞啥咚咚,原本的 vbirdlv 里面的数据安好如初啊!# 假设你将 ss 搞烂了!里面的数据不再需要!那该如何是好?# 4. 还原原本快照区的,回到与原文件系统相同的资讯[root@www ~]# umount

snapshot[root@www ~]# lvremove /dev/vbirdvg/vbirdssDo you really to remove active logical volume \ Logical volume dss\successfully removed[root@www ~]# lvcreate -s -l 89 -n vbirdss vbirdvg/vbirdlv[root@www ~]# mount /dev/vbirdvg/vbirdss

snapshot[root@www ~]# ll /mnt/snapshotdrwxr-xr-x 105 root root Mar 11 16:59 etcdrwxr-xr-x 17 root root 4096 Mar 11 14:17

rwx------ 2 root root 16384 Mar 11 16:59 lost+found# 数据这样就复!

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

相关命令汇整与 LVM 的关闭

我们将上述用过的一些命令给他汇整一下,提供给您参考参考:

任务 pvscan pvcreate pvdisplay pvremove pvchange PV 阶段 vgscan vgcreate vgdisplay vgextend vgreduce vgremove vgchange VG 阶段 lvscan lvcreate lvdisplay lvextend (lvresize) lvreduce (lvresize) lvremove lvresize lvchange LV 阶段 scan) create) display) extend) reduce) remove) 容量(resize) 属性(attribute) 件系统阶段 (filesystem 的格式化处理) 部分,还需要以 resize2fs 来修订文件系统实际的大小才行啊! ^_^ 。至於可以弹性的管理你的磁碟容量,但是要注意,如果你想要使用 LVM 管理您的硬盘时,那么在安装的时候就得要做好了, 否则未来还是需要先以传统的磁碟添加方式来添加后,移动数据后,才能够进行 LVM 的使用啊!

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

先卸载系统上面的 LVM 文件系统 (包括快照与所有 LV); 使用 lvremove 移除 LV ;

使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志; 使用 vgremove 移除 VG: 使用 pvremove 移除 PV;

最后,使用 fdisk 修改 ID 回来啊!

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

@www ~]# umount /mnt/lvm[root@www ~]# umount /mnt/snapshot[root@www vremove /dev/vbirdvg/vbirdss <==先处理快照Do you really want to e active logical volume \[y/n]: y Logical volume \ssfully removed[root@www ~]# lvremove /dev/vbirdvg/vbirdlv <==再原系统Do you really want to remove active logical volume \: y Logical volume \[root@www ~]# nge -a n vbirdvg 0 logical volume(s) in volume group \e[root@www ~]# vgremove vbirdvg Volume group \

ssfully removed[root@www ~]# pvremove /dev/hda{6,7,8,9,10} s on physical volume \ Labels on cal volume \successfully wiped Labels on physical volume

/hda8\ Labels on physical volume \ssfully wiped Labels on physical volume \

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

本文来源:https://www.bwwdw.com/article/rn85.html

Top