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容量(后续维护操作)
    • 操作步骤总结:
    1. 用 fdisk 配置新的具有 8e system ID 的 partition 
    2. 利用 pvcreate 建置 PV 
    3. 利用 vgextend 将 PV 加入我们的 vbirdvg 
    4. 利用 lvresize 将新加入的 PV 内的 PE 加入 vbirdlv 中 
    5. 透过 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
      vg中增加pv
    • 第四小步: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删除方法

  • 删除步骤总结:
    1. 先卸载系统上面的 LVM 文件系统 (包括快照与所有 LV); 
    2. 使用 lvremove 移除 LV ; 
    3. 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志; 
    4. 使用 vgremove 移除 VG: 
    5. 使用 pvremove 移除 PV; 
    6. 最后,使用 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 的使用!

 

posted @ 2020-03-08 10:34  IamJet  阅读(963)  评论(0编辑  收藏  举报