linux 磁盘配额与文件系统进阶管理
一、磁盘配额
1、磁盘配额的注意事项
- 仅能针对文件系统;
- 对root没有作用;
2、配置内容
- 容量限制(block)或者文件数量限制(inode);
- 软限制与硬限制;
- 软限制的告警倒计时时间;
3、配置实例
- 需求描述:
- 目的与帐号:现在我想要让我的专题生五个为一组,这五个人的帐号分别是 myquota1, myquota2, myquota3, myquota4, myquota5,这五个用户的口令都是 password ,且这五个用户所属的初始群组都是 myquotagrp 。 其他的帐号属性则使用默认值。
- 帐号的磁碟容量限制值:我想让这五个用户都能够取得 300MBytes 的磁碟使用量(hard),文件数量则不予限制。 此外,只要容量使用率超过 250MBytes ,就予以警告 (soft)。
- 群组的限额:由於我的系统里面还有其他用户存在,因此我仅承认 myquotagrp 这个群组最多仅能使用 1GBytes 的容量。 这也就是说,如果 myquota1, myquota2, myquota3 都用了 280MBytes 的容量了,那么其他两人最多只能使用 (1000MB - 280x3 = 160MB) 的磁碟容量罗!这就是使用者与群组同时配置时会产生的后果。
- 宽限时间的限制:最后,我希望每个使用者在超过 soft 限制值之后,都还能够有 14 天的宽限时间。
- 实施步骤(如下只列出命令,具体实施根据命令和步骤套用即可):
- 开启文件系统支持quota
-
临时启动文件系统支持quota [root@www ~]# mount -o remount,usrquota,grpquota /home [root@www ~]# mount | grep home /dev/hda3 on /home type ext3 (rw,usrquota,grpquota) 永久启动文件系统支持quota [root@www ~]# vi /etc/fstab LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2 [root@www ~]# umount /home [root@www ~]# mount -a [root@www ~]# mount | grep home /dev/hda3 on /home type ext3 (rw,usrquota,grpquota)
- 扫描文件系统并创建quota记录档
-
[root@www ~]# quotacheck [-avugfM] [/mount_point] 选项与参数: -a :扫瞄所有在 /etc/mtab 内,含有 quota 支持的 filesystem,加上此参数后, /mount_point 可不必写,因为扫瞄所有的 filesystem 了嘛! -u :针对使用者扫瞄文件与目录的使用情况,会创建 aquota.user -g :针对群组扫瞄文件与目录的使用情况,会创建 aquota.group -v :显示扫瞄过程的资讯; -f :强制扫瞄文件系统,并写入新的 quota 配置档 (危险) -M :强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用。 quotacheck 的选项你只要记得『 -avug 』一起下达即可!那个 -f 与 -M 是在文件系统可能已经启动 quota 了, 但是你还想要重新扫瞄文件系统时,系统会要求你加入那两个选项啦 (担心有其他人已经使用 quota 中)!平时没必要不要加上那两个项目。
- 启动quota记录档并配置限制值
-
[root@www ~]# quotaon [-avug] [root@www ~]# quotaon [-vug] [/mount_point] 选项与参数: -u :针对使用者启动 quota (aquota.user) -g :针对群组启动 quota (aquota.group) -v :显示启动过程的相关信息; -a :根据 /etc/mtab 内的 filesystem 配置启动有关的 quota ,若不加 -a 的话, 则后面就需要加上特定的那个 filesystem 喔! [root@www ~]# quotaoff [-a] [root@www ~]# quotaoff [-ug] [/mount_point] 选项与参数: -a :全部的 filesystem 的 quota 都关闭 (根据 /etc/mtab) -u :仅针对后面接的那个 /mount_point 关闭 user quota -g :仅针对后面接的那个 /mount_point 关闭 group quota
适用于手动配置的命令
[root@www ~]# edquota [-u username] [-g groupname] [root@www ~]# edquota -t <==修改宽限时间 [root@www ~]# edquota -p 范本帐号 -u 新帐号 选项与参数: -u :后面接帐号名称。可以进入 quota 的编辑画面 (vi) 去配置 username 的限制值; -g :后面接群组名称。可以进入 quota 的编辑画面 (vi) 去配置 groupname 的限制值; -t :可以修改宽限时间。 -p :复制范本。那个 范本帐号 为已经存在并且已配置好 quota 的使用者, 意义为『将 范本帐号 这个人的 quota 限制值复制给 新帐号 』!适用于脚本的配置命令 [root@www ~]# setquota [-u|-g] 名称 block(soft) block(hard) \ > inode(soft) inode(hard) 文件系统
- 查看quota状态和配置
-
单一用户的quota报表 [root@www ~]# quota [-uvs] [username] [root@www ~]# quota [-gvs] [groupname] 选项与参数: -u :后面可以接 username ,表示显示出该使用者的 quota 限制值。若不接 username ,表示显示出运行者的 quota 限制值。 -g :后面可接 groupname ,表示显示出该群组的 quota 限制值。 -v :显示每个用户在 filesystem 的 quota 值; -s :使用 1024 为倍数来指定单位,会显示如 M 之类的单位! 系统全局的quota报表 [root@www ~]# repquota -a [-vugs] 选项与参数: -a :直接到 /etc/mtab 搜寻具有 quota 标志的 filesystem ,并报告 quota 的结果; -v :输出的数据将含有 filesystem 相关的细部资讯; -u :显示出使用者的 quota 限值 (这是默认值); -g :显示出个别群组的 quota 限值。 -s :使用 M, G 为单位显示结果
-
此外,如果你想要让使用者的邮件信箱与家目录的总体磁碟使用量为固定,那又该如何是好? 由于 /home 及 /var/spool/mail 根本不可能是同一个 filesystem (除非是都不分割,使用根目录,才有可能整合在一起), 所以,该如何进行这样的 quota 限制呢?
- 将 /var/spool/mail 这个目录完整的移动到 /home 底下;
- 利用 ln -s /home/mail /var/spool/mail 来创建连结数据;
- 将 /home 进行 quota 限额配置
二、软件磁盘阵列
1、磁盘整列的优势
RAID原理再次不再介绍,本文重点介绍linux如何实现软件磁盘整列。
- 数据安全与可靠性:指的并非资讯安全,而是当硬件 (指磁碟) 损毁时,数据是否还能够安全的救援或使用之意;
- 读写效能:例如 RAID 0 可以加强读写效能,让你的系统 I/O 部分得以改善;
- 容量:可以让多颗磁碟组合起来,故单一文件系统可以有相当大的容量。
2、软件磁盘阵列的配置命令
-
配置和开启raid
[root@www ~]# mdadm --detail /dev/md0 [root@www ~]# mdadm --create --auto=yes /dev/md[0-9] --raid-devices=N \ > --level=[015] --spare-devices=N /dev/sdx /dev/hdx... 选项与参数: --create :为创建 RAID 的选项; --auto=yes :决定创建后面接的软件磁盘阵列装置,亦即 /dev/md0, /dev/md1... --raid-devices=N :使用几个磁碟 (partition) 作为磁盘阵列的装置 --spare-devices=N :使用几个磁碟作为备用 (spare) 装置 --level=[015] :配置这组磁盘阵列的等级。支持很多,不过建议只要用 0, 1, 5 即可 --detail :后面所接的那个磁盘阵列装置的详细资讯模拟raid错误 [root@www ~]# mdadm --manage /dev/md[0-9] [--add 装置] [--remove 装置] \ > [--fail 装置] 选项与参数: --add :会将后面的装置加入到这个 md 中! --remove :会将后面的装置由这个 md 中移除 --fail :会将后面的装置配置成为出错的状态
-
启动开机自动启动raid
[root@www ~]# mdadm --detail /dev/md0 | grep -i uuid UUID : 7c60c049:57d60814:bd9a77f1:57e49c5b # 后面那一串数据,就是这个装置向系统注册的 UUID 识别码! # 开始配置 mdadm.conf [root@www ~]# vi /etc/mdadm.conf ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b # RAID装置 识别码内容 # 开始配置启动自动挂载并测试 [root@www ~]# vi /etc/fstab /dev/md0 /mnt/raid ext3 defaults 1 2 [root@www ~]# umount /dev/md0; mount -a [root@www ~]# df /mnt/raid Filesystem 1K-blocks Used Available Use% Mounted on /dev/md0 2916920 188464 2580280 7% /mnt/raid # 你得确定可以顺利挂载,并且没有发生任何错误!关闭raid的方法 # 1. 先卸载且删除配置档内与这个 /dev/md0 有关的配置: [root@www ~]# umount /dev/md0 [root@www ~]# vi /etc/fstab /dev/md0 /mnt/raid ext3 defaults 1 2 # 将这一行删除掉!或者是注解掉也可以! # 2. 直接关闭 /dev/md0 的方法! [root@www ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0 <==不罗唆!这样就关闭了! [root@www ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] unused devices: <none> <==看吧!确实不存在任何阵列装置! [root@www ~]# vi /etc/mdadm.conf ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b # 一样啦!删除他或是注解他!
三、逻辑卷轴管理
1、理论重点
- 用途:LVM的重点是在于可以动态的调整文件系统的大小,并不能提升磁盘读写性能和数据的冗余度,如果要提升磁盘读写性能和数据的冗余度,请配置上一节的raid。
- 重点概念:
- 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的读写模式
- 线性模式 (linear)(默认且推荐):假如我将 /dev/hda1, /dev/hdb1 这两个 partition 加入到 VG 当中,并且整个 VG 只有一个 LV 时,那么所谓的线性模式就是:当 /dev/hda1 的容量用完之后,/dev/hdb1 的硬盘才会被使用到, 这也是我们所建议的模式。
- 交错模式 (triped):那什么是交错模式?很简单啊,就是我将一笔数据拆成两部分,分别写入 /dev/hda1 与 /dev/hdb1 的意思,感觉上有点像 RAID 0 啦!如此一来,一份数据用两颗硬盘来写入,理论上,读写的效能会比较好。
2、LVM新增和维护
经过实际实验,千万别用xfs,否则扩展的时候会被坑。
- 第一步:将物理磁盘分成system id为8e的分区(过程略)。
-
[root@study ~]# fdisk -l /dev/sdb 磁盘 /dev/sdb:8589 MB, 8589934592 字节,16777216 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xd6e3318f 设备 Boot Start End Blocks Id System /dev/sdb1 2048 6293503 3145728 8e Linux LVM /dev/sdb2 6293504 16777215 5241856 8e Linux LVM [root@study ~]# fdisk -l /dev/sdc 磁盘 /dev/sdc:8589 MB, 8589934592 字节,16777216 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x45a75442 设备 Boot Start End Blocks Id System /dev/sdc1 2048 6293503 3145728 8e Linux LVM /dev/sdc2 6293504 10487807 2097152 8e Linux LVM /dev/sdc3 10487808 16777215 3144704 8e Linux LVM [root@study ~]#
-
- 第二步:PV阶段
- PV阶段命令总结:
-
-
- pvcreate :将实体 partition 创建成为 PV ;
- pvscan :搜寻目前系统里面任何具有 PV 的磁碟;
- pvdisplay :显示出目前系统上面的 PV 状态;
- pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。
-
-
-
[root@study ~]# pvscan No matching physical volumes found [root@study ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. [root@study ~]# pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created. [root@study ~]# pvcreate /dev/sdc1 Physical volume "/dev/sdc1" successfully created. [root@study ~]# pvcreate /dev/sdc2 Physical volume "/dev/sdc2" successfully created. [root@study ~]# pvscan PV /dev/sdc2 lvm2 [2.00 GiB] PV /dev/sdc1 lvm2 [3.00 GiB] PV /dev/sdb1 lvm2 [3.00 GiB] PV /dev/sdb2 lvm2 [<5.00 GiB] Total: 4 [<13.00 GiB] / in use: 0 [0 ] / in no VG: 4 [<13.00 GiB] [root@study ~]# [root@study ~]# pvdisplay "/dev/sdc2" is a new physical volume of "2.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc2 #物理分区的装置名 VG Name #尚未分配给VG所以空白 PV Size 2.00 GiB #PV的容量 Allocatable NO #是否被分配 PE Size 0 #PE块的大小 Total PE 0 #总共的PE数量 Free PE 0 #空闲的PE数量 Allocated PE 0 #尚可分配的PE数量 PV UUID nE60NI-wF3a-2Br0-EBGS-aT1V-doEg-NUQipP
-
- 第三步:VG阶段:
- 命令总结(VG名字自定义):
-
-
- vgcreate :就是主要创建 VG 的命令。
-
[root@www ~]# vgcreate [-s N[mgt]] VG名称 PV名称 选项与参数: -s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可)
- vgscan :搜寻系统上面是否有 VG 存在。
- vgdisplay :显示目前系统上面的 VG 状态。
- vgextend :在 VG 内添加额外的 PV 。
- vgreduce :在 VG 内移除 PV。
- vgchange :配置 VG 是否启动 (active);
- vgremove :删除一个 VG 啊!
-
[root@study ~]# vgcreate -s 16m jetvg /dev/sdb{1,2} /dev/sdc{1,2} #创建VG Volume group "jetvg" successfully created [root@study ~]# vgscan #检查vg创建成功 Reading volume groups from cache. Found volume group "jetvg" using metadata type lvm2 [root@study ~]# vgreduce jetvg /dev/sdc2 #删除一个PV从vg中 Removed "/dev/sdc2" from volume group "jetvg" [root@study ~]# pvscan #看PV结果和预期一致 PV /dev/sdb1 VG jetvg lvm2 [2.98 GiB / 2.98 GiB free] PV /dev/sdb2 VG jetvg lvm2 [4.98 GiB / 4.98 GiB free] PV /dev/sdc1 VG jetvg lvm2 [2.98 GiB / 2.98 GiB free] PV /dev/sdc2 lvm2 [2.00 GiB] Total: 4 [12.95 GiB] / in use: 3 [10.95 GiB] / in no VG: 1 [2.00 GiB] [root@study ~]# vgdisplay --- Volume group --- VG Name jetvg System ID Format lvm2 Metadata Areas 3 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 3 Act PV 3 VG Size 10.95 GiB #VG的空间 PE Size 16.00 MiB #VG的PE块大小 Total PE 701 Alloc PE / Size 0 / 0 Free PE / Size 701 / 10.95 GiB #空闲的PE数 和空间 VG UUID MxDqj3-NcD2-4ARa-l9qG-W993-BiXF-kWpgqg [root@study ~]#
[root@study ~]# vgextend jetvg /dev/sdc2 #再加一个PV进来
Volume group "jetvg" successfully extended
[root@study ~]# pvscan #查看都用上了。
PV /dev/sdb1 VG jetvg lvm2 [2.98 GiB / 2.98 GiB free]
PV /dev/sdb2 VG jetvg lvm2 [4.98 GiB / 4.98 GiB free]
PV /dev/sdc1 VG jetvg lvm2 [2.98 GiB / 2.98 GiB free]
PV /dev/sdc2 VG jetvg lvm2 [1.98 GiB / 1.98 GiB free]
Total: 4 [<12.94 GiB] / in use: 4 [<12.94 GiB] / in no VG: 0 [0 ]
-
- 第四步:LV阶段
- 命令总结:
-
-
- lvcreate :创建 LV !
-
[root@www ~]# lvcreate [-L N[mgt]] [-n LV名称] VG名称 [root@www ~]# lvcreate [-l N] [-n LV名称] VG名称 选项与参数: -L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE, 因此这个数量必须要是 PE 的倍数,若不相符,系统会自行计算最相近的容量。 -l :后面可以接 PE 的『个数』,而不是数量。若要这么做,得要自行计算 PE 数。 -n :后面接的就是 LV 的名称啦! 更多的说明应该可以自行查阅吧! man lvcreate
- lvscan :查询系统上面的 LV ;
- lvdisplay :显示系统上面的 LV 状态!
- lvextend :在 LV 里面添加容量!
- lvreduce :在 LV 里面减少容量;
- lvremove :删除一个 LV !
- lvresize :对 LV 进行容量大小的调整!
-
[root@study ~]# lvcreate -l 828 -n jetlv jetvg #创建LV,将整个VG都给jetlv Logical volume "jetlv" created. [root@study ~]# ll /dev/jetvg/jetlv #确实创建好了jetlv lrwxrwxrwx. 1 root root 7 3月 8 16:05 /dev/jetvg/jetlv -> ../dm-0 [root@study ~]# lvdisplay --- Logical volume --- LV Path /dev/jetvg/jetlv #lv的全名,使用的时候lv的名字要用这个 LV Name jetlv VG Name jetvg LV UUID NLCIYr-5ZqI-0YRD-t7fY-30X9-0eK5-x2qux5 LV Write Access read/write LV Creation host, time study.linux.com, 2020-03-08 16:05:00 +0800 LV Status available # open 0 LV Size <12.94 GiB #lv的空间 Current LE 828 Segments 4 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
-
- 第五步:文件系统格式化,挂载,使用
-
[root@study ~]# mkfs -t xfs /dev/jetvg/jetlv #格式化文件系统 meta-data=/dev/jetvg/jetlv isize=512 agcount=4, agsize=847872 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=3391488, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@study ~]# mkdir /mnt/lv [root@study ~]# mount /dev/jetvg/jetlv /mnt/lv #挂载文件系统分区 [root@study ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 devtmpfs 491772 0 491772 0% /dev tmpfs 507412 0 507412 0% /dev/shm tmpfs 507412 7288 500124 2% /run tmpfs 507412 0 507412 0% /sys/fs/cgroup /dev/sda2 9754624 4319324 5435300 45% / /dev/sda5 19180544 314648 18865896 2% /home /dev/sda1 496292 163584 332708 33% /boot tmpfs 101484 0 101484 0% /run/user/1000 /dev/mapper/jetvg-jetlv 13555712 32992 13522720 1% /mnt/lv [root@study ~]# cp -a /etc/ /var/log/ /mnt/lv #复制测试文件到lv目录 [root@study ~]#
-
- 第六步:放大LV容量(后续维护操作)
- 操作步骤总结:
- 用 fdisk 配置新的具有 8e system ID 的 partition
- 利用 pvcreate 建置 PV
- 利用 vgextend 将 PV 加入我们的 vbirdvg
- 利用 lvresize 将新加入的 PV 内的 PE 加入 vbirdlv 中
- 透过 resize2fs 将文件系统的容量确实添加!
-
- 前两步:详细配置省略,效果是增加了一个/dev/sdc3的pv。
- 第三小步:vg中增加pv
[root@study ~]# pvcreate /dev/sdc3 Physical volume "/dev/sdc3" successfully created. [root@study ~]# pvscan PV /dev/sdb1 VG jetvg lvm2 [2.98 GiB / 0 free] PV /dev/sdb2 VG jetvg lvm2 [4.98 GiB / 0 free] PV /dev/sdc1 VG jetvg lvm2 [2.98 GiB / 0 free] PV /dev/sdc2 VG jetvg lvm2 [1.98 GiB / 0 free] PV /dev/sdc3 lvm2 [<3.00 GiB] Total: 5 [<15.94 GiB] / in use: 4 [<12.94 GiB] / in no VG: 1 [<3.00 GiB] [root@study ~]# vgextend jetvg /dev/sdc3 Volume group "jetvg" successfully extended [root@study ~]# pvscan PV /dev/sdb1 VG jetvg lvm2 [2.98 GiB / 0 free] PV /dev/sdb2 VG jetvg lvm2 [4.98 GiB / 0 free] PV /dev/sdc1 VG jetvg lvm2 [2.98 GiB / 0 free] PV /dev/sdc2 VG jetvg lvm2 [1.98 GiB / 0 free] PV /dev/sdc3 VG jetvg lvm2 [2.98 GiB / 2.98 GiB free] Total: 5 [15.92 GiB] / in use: 5 [15.92 GiB] / in no VG: 0 [0 ] [root@study ~]# vgdisplay --- Volume group --- VG Name jetvg System ID Format lvm2 Metadata Areas 5 Metadata Sequence No 5 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 15.92 GiB PE Size 16.00 MiB Total PE 1019 Alloc PE / Size 828 / <12.94 GiB Free PE / Size 191 / 2.98 GiB VG UUID MxDqj3-NcD2-4ARa-l9qG-W993-BiXF-kWpgqg
- 第四小步:lv中增加新增的pv,命令是:[root@study ~]# lvresize -l +191 -n /dev/jetvg/jetlv
- 第五小步:
[root@www ~]# dumpe2fs /dev/jetvg/jetlv #查看原始superblock记录 [root@www ~]# resize2fs [-f] [device] [size] 选项与参数: -f :强制进行 resize 的动作!一般不要加这个参数,危险。 [device]:装置的文件名称; [size] :可以加也可以不加。如果加上 size 的话,那么就必须要给予一个单位, 譬如 M, G 等等。如果没有 size 的话,那么默认使用『整个 partition』 的容量来处理!平时不加就OK了。
- 第七步:缩小LV容量(后续维护操作)
- 假设我想把/dev/sdb3分区从LV中抽出来,那么就这么操作(步骤是扩容的反顺序)。
-
[root@study ~]# pvscan #查看后得知减少的容量为5960M PV /dev/sdb1 VG jetvg lvm2 [2.98 GiB / 0 free] PV /dev/sdb2 VG jetvg lvm2 [2.98 GiB / 0 free] PV /dev/sdb3 VG jetvg lvm2 [1.98 GiB / 0 free] [root@study ~]# umount /dev/jetvg/jetlv [root@study ~]# e2fsck -f /dev/jetvg/jetlv [root@study ~]# resize2fs /dev/jetvg/jetlv 5960M [root@study ~]# mount /dev/jetvg/jetlv /mnt/lv/ [root@study ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 481M 0 481M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 7.2M 489M 2% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/sda2 9.4G 4.2G 5.2G 45% / /dev/sda5 19G 308M 18G 2% /home /dev/sda1 485M 160M 325M 33% /boot tmpfs 100M 0 100M 0% /run/user/1000 /dev/mapper/jetvg-jetlv 5.7G 111M 5.3G 3% /mnt/lv [root@study ~]# pvdisplay 前边省略…… --- Physical volume --- PV Name /dev/sdb3 VG Name jetvg PV Size <2.00 GiB / not usable 15.00 MiB Allocatable yes (but full) PE Size 16.00 MiB Total PE 127 Free PE 0 Allocated PE 127 PV UUID jDr9CG-j3cq-eG7C-jB0I-uhHY-y91F-kOF0xS [root@study ~]# lvresize -l 127 /dev/jetvg/jetlv [root@www ~]# pvmove /dev/sdb3 /dev/sdb2 #可选,假设sdb3的pe被占用可以通过这种方式移走到其他pv。 [root@study ~]# vgreduce jetvg /dev/sdb3 [root@study ~]# pvremove /dev/sdb3
3、LVM系统快照
LVM快照区域前提:LVM快照区域一定要和LVM原始区域再一个VG下。
原因是LVM的快照是增量快照,快照区域没有修改过的数据实际上还是共享的原始数据。换句话说就是如果没有修改过数据,你看到的快照区域的所有数据那其实都是共享的原始数据。
- 设置下环境:
- 普通LVM区域的设备全名为:/dev/jetvg/jetlv(红色区域)-->挂载到/mnt/lvm,大小为6个GB;
- 快照区域的设备全名为/dev/jetvg/jetlv_mirror(蓝色区域)-->挂载到/mnt/snapshot。
- 数据未发生变化的情况:不论是/mnt/lvm 还是/mnt/snapshot,看到的数据都一样,其实都是看的红色区域的block数据块。
- 第一种变化情况:在/mnt/lvm,修改A数据,导致红色区域的block块A发生变化,变为newA,这个时候原本的A就会被备份到/mnt/snapshot的镜像区域。其他没变化的数据仍然共享红色区域内。
- 第二种变化情况:在/mnt/snapshot下修改A数据,但此时情况反了,聪明的镜像会把修改过的newA放置在镜像的蓝色区域,保持红色区域(原始数据)的所有数据不变(其实就是你创建了一个快照,然后再快照里乱搞,然后快照被搞乱了,这个时候就删除掉这个乱了的快照,然后再根据原始数据重新创建一个快照罢了)。
- 镜像的创建方法
-
# 1. 先观察 VG 还剩下多少剩余容量 [root@www ~]# vgdisplay --- Volume group --- VG Name jetvg ....(其他省略).... 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/sdb6 加入这个 VG 吧! [root@www ~]# pvcreate /dev/sdb6 Physical volume "/dev/sdb6" successfully created [root@www ~]# vgextend jetvg /dev/sdb6 Volume group "jetvg" successfully extended [root@www ~]# vgdisplay --- Volume group --- VG Name jetvg ....(其他省略).... 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 创建系统快照区,我们取名为 jet_mirror,且给予 60 个 PE [root@www ~]# lvcreate -l 89 -s -n jet_mirror /dev/jetvg/jetlv Logical volume "jet_mirror" created # 上述的命令中最重要的是那个 -s 的选项!代表是 snapshot 快照功能之意! # -n 后面接快照区的装置名称, /dev/.... 则是要被快照的 LV 完整档名。 # -l 后面则是接使用多少个 PE 来作为这个快照区使用。 [root@www ~]# lvdisplay --- Logical volume --- LV Name /dev/jetvg/jet_mirror VG Name jetvg LV UUID K2tJ5E-e9mI-89Gw-hKFd-4tRU-tRKF-oeB03a LV Write Access read/write LV snapshot status active destination for /dev/jetvg/jetlv LV Status available # open 0 LV Size 6.97 GB <==被快照的原 LV 磁碟容量 Current LE 446 COW-table size 1.39 GB <==快照区的实际容量 COW-table LE 89 <==快照区占用的 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
-
- 第一种变化情况的还原方法
-
# 1. 先将原本的 /dev/jetvg/jetlv 内容作些变更,增增减减一些目录吧! [root@www ~]# df /mnt/lvm Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/jetvg-jetlv 6955584 262632 6410328 4% /mnt/lvm [root@www ~]# ll /mnt/lvm drwxr-xr-x 105 root root 12288 Mar 11 16:59 etc drwxr-xr-x 17 root root 4096 Mar 11 14:17 log drwx------ 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/lvm drwxr-xr-x 4 root root 4096 Dec 15 16:28 boot drwxr-xr-x 105 root root 12288 Mar 11 16:59 etc drwxr-xr-x 14 root root 4096 Sep 5 2008 lib drwx------ 2 root root 16384 Mar 11 16:59 lost+found drwxr-xr-x 2 root root 12288 Sep 5 2008 sbin # 看起来数据已经不一样了! [root@www ~]# lvdisplay /dev/jetvg/jet_mirror --- Logical volume --- LV Name /dev/jetvg/jet_mirror VG Name jetvg ....(中间省略).... Allocated to snapshot 12.22% ....(底下省略).... # 从这里也看得出来,快照区已经被使用了 12.22% !因为原始的文件系统有异动过! # 2. 利用快照区将原本的 filesystem 备份 [root@www ~]# mount /dev/jetvg/jet_mirror /mnt/snapshot [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/jetvg-jetlv 6955584 370472 6302488 6% /mnt/lvm /dev/mapper/jetvg-jet_mirror 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 了! # 3. 将 jet_mirror 卸载并移除 (因为里面的内容已经备份起来了) [root@www ~]# umount /mnt/snapshot [root@www ~]# lvremove /dev/jetvg/jet_mirror Do you really want to remove active logical volume "jet_mirror"? [y/n]: y Logical volume "jet_mirror" successfully removed [root@www ~]# umount /mnt/lvm [root@www ~]# mkfs -t ext3 /dev/jetvg/jetlv [root@www ~]# mount /dev/jetvg/jetlv /mnt/lvm [root@www ~]# tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm [root@www ~]# ll /mnt/lvm drwxr-xr-x 105 root root 12288 Mar 11 16:59 etc drwxr-xr-x 17 root root 4096 Mar 11 14:17 log drwx------ 2 root root 16384 Mar 11 16:59 lost+found # 是否与最初的内容相同啊!这就是透过快照来还原的一个简单的方法罗!
-
- 第二种变化情况的还原方法
-
# 1. 创建一个大一些的快照区,让我们将 /dev/hda6 的 PE 全部给快照区! [root@www ~]# lvcreate -s -l 89 -n jet_mirror /dev/jetvg/jetlv Logical volume "jet_mirror" created [root@www ~]# lvdisplay /dev/jetvg/jet_mirror --- Logical volume --- LV Name /dev/jetvg/jet_mirror VG Name jetvg LV UUID as0ocQ-KjRS-Bu7y-fYoD-1CHC-0V3Y-JYsjj1 LV Write Access read/write LV snapshot status active destination for /dev/jetvg/jetlv 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. 隐藏 jetlv 挂载 jet_mirror [root@www ~]# umount /mnt/lvm [root@www ~]# mount /dev/jetvg/jet_mirror /mnt/snapshot [root@www ~]# df /mnt/snapshot Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/jetvg-jet_mirror 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/snapshot drwxr-xr-x 4 root root 4096 Dec 15 16:28 boot drwxr-xr-x 14 root root 4096 Sep 5 2008 lib drwx------ 2 root root 16384 Mar 11 16:59 lost+found drwxr-xr-x 2 root root 12288 Sep 5 2008 sbin <==与原本数据有差异了 [root@www ~]# mount /dev/jetvg/jetlv /mnt/lvm [root@www ~]# ll /mnt/lvm drwxr-xr-x 105 root root 12288 Mar 11 16:59 etc drwxr-xr-x 17 root root 4096 Mar 11 14:17 log drwx------ 2 root root 16384 Mar 11 16:59 lost+found # 不论你在快照区恶搞啥咚咚,原本的 jetlv 里面的数据安好如初啊! # 假设你将 jet_mirror 搞烂了!里面的数据不再需要!那该如何是好? # 4. 通过原始数据还原快照区域数据(因为是快照改动了,原始数据没变动),其实说白了就是你创建了一个快照,然后你改的快照后,把快照改废了,那么就把快照删除了,再重新创建一个快照。 [root@www ~]# umount /mnt/snapshot [root@www ~]# lvremove /dev/jetvg/jet_mirror Do you really want to remove active logical volume "jet_mirror"? [y/n]: y Logical volume "jet_mirror" successfully removed [root@www ~]# lvcreate -s -l 89 -n jet_mirror /dev/jetvg/jetlv [root@www ~]# mount /dev/jetvg/jet_mirror /mnt/snapshot [root@www ~]# ll /mnt/snapshot drwxr-xr-x 105 root root 12288 Mar 11 16:59 etc drwxr-xr-x 17 root root 4096 Mar 11 14:17 log drwx------ 2 root root 16384 Mar 11 16:59 lost+found # 数据这样就复原了!
-
4、LVM删除方法
- 删除步骤总结:
- 先卸载系统上面的 LVM 文件系统 (包括快照与所有 LV);
- 使用 lvremove 移除 LV ;
- 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;
- 使用 vgremove 移除 VG:
- 使用 pvremove 移除 PV;
- 最后,使用 fdisk 修改 ID 回来啊!
- 删除实例:
-
[root@study ~]# umount /mnt/lv [root@study ~]# lvremove /dev/jetvg/jetlv #如果有快照要先处理快照 Do you really want to remove active logical volume jetvg/jetlv? [y/n]: y Logical volume "jetlv" successfully removed [root@study ~]# vgchange -a n jetvg 0 logical volume(s) in volume group "jetvg" now active [root@study ~]# vgremove jetvg Volume group "jetvg" successfully removed [root@study ~]# pvremove /dev/sdb{1,2} Labels on physical volume "/dev/sdb1" successfully wiped. Labels on physical volume "/dev/sdb2" successfully wiped. [root@study ~]# 使用fdisk工具将sdb1,sdb2,sdb3的system id 改回83.
-
5、LVM命令总结
任务 | PV 阶段 | VG 阶段 | LV 阶段 |
搜寻(scan) | pvscan | vgscan | lvscan |
创建(create) | pvcreate | vgcreate | lvcreate |
列出(display) | pvdisplay | vgdisplay | lvdisplay |
添加(extend) | vgextend | lvextend (lvresize) | |
减少(reduce) | vgreduce | lvreduce (lvresize) | |
删除(remove) | pvremove | vgremove | lvremove |
改变容量(resize) | lvresize | ||
改变属性(attribute) | pvchange | vgchange | lvchange |
- 至于文件系统阶段 (filesystem 的格式化处理) 部分,还需要以 resize2fs 来修订文件系统实际的大小才行 。虽然 LVM 可以弹性的管理你的磁碟容量,但是要注意,如果你想要使用 LVM 管理您的硬盘时,那么在安装的时候就得要做好 LVM 的规划了, 否则未来还是需要先以传统的磁碟添加方式来添加后,移动数据后,才能够进行 LVM 的使用!