zoukankan      html  css  js  c++  java
  • linux磁盘限额和进阶文件系统的管理 quota RAID LVM

    概念:

    1. Quota 的一般用途:
      • 针对 WWW server ,例如:每个人的网页空间的容量限制!
      • 针对 mail server,例如:每个人的邮件空间限制。
      • 针对 file server,例如:每个人最大的可用网络硬盘空间 (教学环境中最常见!)
      • 限制某一群组所能使用的最大磁盘配额 (使用群组限制):
      • 限制某一用户的最大磁盘配额 (使用用户限制):
      • 以 Link 的方式,来使邮件可以作为限制的配额 (更改 /var/spool/mail 这个路径):直接使用 Link 的方式指向 /home (或者其他已经做好的 quota 磁盘),这通常是用在原本磁盘分区的规划不好,但是却又不想要更动原有主机架构的情况中啊!
    2. Quota 的使用限制
      • 仅能针对整个 filesystem:不能针对『某个目录』来进行 Quota 的设计
      • 核心必项支持 quota :
      • Quota 的记录文件
      • 只对一般身份使用者有效:
    3. Quota 的规范设定项目:
      • 针对整个 filesystem 的限制项目主要分为底下几个部分:
        1. 容量限制或档案数量限制 (block 或 inode):
          1. 限制 inode 用量:可以管理使用者可以建立的『档案数量』;
          2. 限制 block 用量:管理用户磁盘容量的限制,较常见为这种方式。
        2. 柔性劝导与硬性规定 (soft/hard):
          1. hard:表示使用者的用量绝对不会超过这个限制值
          2. soft:表示使用者在低于 soft 限值时,可以正常使用磁盘,但若超过 soft 且低于 hard 的限值,每次用户登入系统时,系统会主动发出磁盘即将爆满的警告讯息, 且会给予一个宽限时间,(grace time)。不过,若使用者在宽限时间倒数期间就将容量再次降低于 soft 限值之下,(grace time)。不过,若使用者在宽限时间倒数期间就将容量再次降低于 soft 限值之下,
        3. 会倒数计时的宽限时间 (grace time):
    4. 软件磁盘阵列 (Software RAID)
      • RAID-0 (等量模式, stripe):效能最佳。  数据平分放在N个磁盘中。(最少两块磁盘)
      • RAID-1 (映像模式, mirror):完整备份。 数据拷贝一份放在其他磁盘中。(最少两块磁盘)
      • RAID 0+1,RAID 1+0。  数据先平分再拷贝或者先拷贝再平分。(最少四块磁盘)
      • RAID 5:效能与数据备份的均衡考虑。  数据平分在N-1颗磁盘上,另一个磁盘记录检验码。(最少三块磁盘)
      • Spare Disk:预备磁盘的功能:
        • spare disk 就是一颗或几颗没有包含在原本磁盘阵列等级中的磁盘,这颗磁盘平时并不会被磁盘阵列所使用, 当磁盘阵列有仸何磁盘损毁时,则这颗 spare disk 会被主动的拉进磁盘阵列中,并将坏掉的那颗硬盘移出磁盘阵列! 然后立即重建数据系统。
    5. 磁盘阵列的优点
      1. 数据安全与可靠性:指的并非信息安全,而是当硬件 (指磁盘) 损毁时,数据是否还能够安全的救援或使用之意;
      2. 读写效能:例如 RAID 0 可以加强读写效能,让你的系统 I/O 部分得以改善;
      3. 容量:可以让几颗磁盘组合起来,故单一文件系统可以有相当大的容量。
    6. 逻辑滚动条管理员 (Logical Volume Manager)
      • LVM 的重点在于『可以弹性的调整 filesystem 的容量!』而并非在于效能与数据保全上面,LVM 可以整合几个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁盘一样!而且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁盘当中。
    7. 什么是 LVM: PV, PE, VG, LV
      • Physical Volume, PV, 实体滚动条
        • 我们实际的 partition 需要调整系统标识符 (system ID) 成为 8e (LVM 的标识符),然后再经过pvcreate 的指令将他转成 LVM 最底层的实体滚动条 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是透过 fdisk。
      • Volume Group, VG, 滚动条群组
        • 所谓的 LVM 大磁盘就是将讲多 PV 整合成这个 VG,所以 VG 就是 LVM 组合起来的大磁盘!VG 最多仅能包含 65534 个 PE 而已。 如果使用 LVM 预设的参数,则一个 VG 最大可达 256GB 的容量。
      • Physical Extend, PE, 实体延伸区块
        • LVM 预设使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,因此预设的 LVM VG 会有4M*65534/(1024M/G)=256G。所以调整 PE 会影响到 VG 的最大容量。
      • Logical Volume, LV, 逻辑滚动条
        • 最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分割槽。
    8. LVM系统快照
      • 快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。首先,由于快照区与原本的 LV 共享很多 PE 区块,因此快照区与被快照的 LV 必项要在同一个 VG 上头。

    实例:

    1. quota
      1. 实作 Quota 流程-1:文件系统支援
        1. df -h 目录   --------查看目录是否为独立文件系统
        2. mount | grep 目录-------查看目录挂载的情况
        3. mount -o remount,usrquota,grpquota /home
          • 重新挂载,添加磁盘配额功能-----此动作将两个挂载属性添加在/etc/mtab,一次性的
        4. vi /etc/fstab   写入/etc/fstab,每次开机都生效
          • LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2
          • umount /home
          • mount -a
      2. 实作 Quota 流程-2:建立 quota 记录文件
        • quotacheck [-avugfM] [/mount_point] --------------扫瞄文件系统并建立 Quota 的记录文件
          • -a :扫瞄所有在 /etc/mtab 内,含有 quota 支持的 filesystem,加上此参数后,/mount_point 可不必写。
          • -u :针对用户扫瞄档案与目录的使用情况,会建立 aquota.user
          • -g :针对群组扫瞄档案与目录的使用情况,会建立 aquota.group
          • -v :显示扫瞄过程的信息;
          • -f :强制扫瞄文件系统,并写入新的 quota 配置文件 (危险)
          • -M :强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用。
        • quotacheck 的选顷你只要记得『 -avug 』一起下达即可!---出现提示权限不足时,关闭selinux ,命令为:setenforce 0
      3.   实作 Quota 流程-3:Quota 启动、 关闭与限制值设定
        • quotaon [-avug]   ------------------启动quota的服务
        • quotaon [-vug] [/mount_point]
          • -u :针对使用者启动 quota (aquota.user)
          • -g :针对群组启动 quota (aquota.group)
          • -v :显示启动过程的相关讯息;
          • -a :根据 /etc/mtab 内的 filesystem 设定启动有关的 quota。
        • quotaon 启用一次后,系统重启会读取/etc/rc.d/rc.sysinit初始化脚本,会自动下达
          •   ------------------------------------------------------
        • quotaoff [-a]   ------------------关闭quota服务
          • quotaoff [-ug] [/mount_point]
            • -a :全部的 filesystem 的 quota 都关闭 (根据 /etc/mtab)
            • -u :仅针对后面接的那个 /mount_point 关闭 user quota
            • -g :仅针对后面接的那个 /mount_point 关闭 group quota
          •   ------------------------------------------------------
        • edquota [-u username] [-g groupname] -----------编辑账号/群组的限值与宽限时间
        • edquota -t <==修改宽限时间  -----------前提是用户有该目录的读写权限
        • edquota -p 范本账号 -u 新账号
          • -u :后面接账号名称。可以进入 quota 的编辑画面 (vi) 去设定 username 的限制值;
          • -g :后面接组名。可以进入 quota 的编辑画面 (vi) 去设定 groupname 的限制值;
          • -t :可以修改宽限时间。
          • -p :复制范本。那个 模板账号 为已经存在并且已设定好 quota 的使用者,
        • 范例:[root@www ~]# edquota -u myquota1
          • 七个字段分别的意义为:   0表示不限制
            1. 文件系统 (filesystem):说明该限制值是针对哪个文件系统 (或 partition);
            2. 磁盘容量 (blocks):这个数值是 quota 自己算出来的,单位为 Kbytes,请不要更动他;
            3. soft:磁盘容量 (block) 的 soft 限制值,单位亦为 KB
            4. hard:block 的 hard 限制值,单位 KB;
            5. 档案数量 (inodes):这是 quota 自己算出来的,单位为个数,请不要更动他;
            6. soft:inode 的 soft 限制值;
            7. hard:inode 的 hard 限制值;
      4. 实作 Quota 流程-4:Quota 限制值的报表
        • quota [-uvs] [username]  ----------单一用户的 quota 报表
        • quota [-gvs] [groupname]
          • -u :后面可以接 username ,表示显示出该用户的 quota 限制值。
          • -g :后面可接 groupname ,表示显示出该群组的 quota 限制值。
          • -v :显示每个用户在 filesystem 的 quota 值;
          • -s :使用 1024 为倍数来指定单位,会显示如 M 之类的单位!
        • repquota -a [-vugs]  ---------针对文件系统的限额做报表
          • -a :直接到 /etc/mtab 搜寻具有 quota 标志的 filesystem ,幵报告 quota 的结果;
          • -v :输出的数据将含有 filesystem 相关的绅部信息;
          • -u :显示出用户的 quota 限值 (这是默讣值);
          • -g :显示出个别群组的 quota 限值。
          • -s :使用 M, G 为单位显示结果。
      5. 实作 Quota 流程-5:测试与管理 -------------------测试时切记切换到限制用户登录状态下!!
        • dd if=/dev/zero of=bigfile bs=1M count=270
        • repquota -auv
        • dd if=/dev/zero of=bigfile2 bs=1M count=300 hda3: write failed, user block limit reached.
        • du -sk
        • repquota -au
        • ------------------------------------------------------------------------------
        • warnquota            --------对超过限额者发出警告信
        • 依据 /etc/warnquota.conf 的设定,然后找出目前系统上面 quota 用量超过 soft (就是有 grace time出现的那些家伙) 的账号,透过 email 的功能将警告信件发送到用户的电子邮件信箱。
        • vi /etc/warnquota.conf-----------自定义邮件提示内容
        • vi /etc/cron.daily/warnquota-----设置每天自动执行
        • 添加 /usr/sbin/warnquota
        • [root@www ~]# chmod 755 /etc/cron.daily/warnquota
      6. setquota :直接于指令中设定 quota 限额
        • setquota [-u|-g] 名称 block(soft) block(hard) inode(soft) inode(hard) 文件系统
        • 范例:
          • [root@www ~]# setquota -u myquota5 100000 200000 0 0 /home
      7. 不更动既有系统的 quota 实例
        • 让使用者的邮件信箱与家目录的整体磁盘使用量为固定
          1. 将 /var/spool/mail 这个目录完整的移动到 /home 底下;
          2. 利用 ln -s /home/mail /var/spool/mail 来建立链接数据;
          3. 将 /home 进行 quota 限额设定
    2. 软件磁盘阵列的设定
      • mdadm --detail /dev/md0 ----------查看磁盘阵列/dev/md0 信息
      • 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 :后面所接的那个磁盘阵列装置的详细信息
      • 实例:
        1. mdadm --create --auto=yes /dev/md0 --level=5  --raid-devices=4 --spare-devices=1 /dev/hda{6,7,8,9,10}
        2. cat /proc/mdstat-------也可以查看
        3. 格式化与挂载使用 RAID
          • mkfs -t ext3 /dev/md0
          • mkdir /mnt/raid
          • mount /dev/md0 /mnt/raid
        4. 仿真 RAID 错误的救援模式
          • mdadm --manage /dev/md[0-9] [--add 装置] [--remove 装置] [--fail 装置] 
            • --add :会将后面的装置加入到这个 md 中!
            • --remove :会将后面的装置由这个 md 中移除
            • --fail :会将后面的装置设定成为出错的状态
          • mdadm --manage /dev/md0 --fail /dev/hda8  假设8出错
          • mdadm --manage /dev/md0 --add /dev/hda11 --remove /dev/hda8 加入新的移除错误的
        5. 开机自动启动 RAID 并自动挂载
          • [root@www ~]# mdadm --detail /dev/md0 | grep -i
          • uuid UUID : 7c60c049:57d60814:bd9a77f1:57e49c5b
          • [root@www ~]# vi /etc/mdadm.conf  -----------centos6.5 无
            •   ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b
          • vi /etc/fstab
            • /dev/md0 /mnt/raid ext3 defaults 1 2
          • umount /dev/md0; mount -a
        6. 关闭软件 RAID(重要!)  ----------进入/proc/partitions目录下查看raid装置名
          • umount /dev/md0
          • vi /etc/fstab
            • /dev/md0 /mnt/raid ext3 defaults 1 2 删除或批注
          • mdadm --stop /dev/md0
          • vi /etc/mdadm.conf
            • ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b  删除或批注
    3. LVM 实作流程
      1. PV 阶段
        • pvcreate :将实体 partition 建立成为 PV;
        • pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
        • pvdisplay :显示出目前系统上面的 PV 状态;
        • pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。
          • 例:pvcreate /dev/hda{6,7,8,9}
        • 如果因为使用过raid导致创建pv失败,请查看/proc/partitions档案内,raid装置号,然后使用mdadm -S 装置号将其删除
      2. VG 阶段
        • vgcreate :建立 VG 的指令!
        • vgscan :搜寻系统上面是否有 VG 存在?
        • vgdisplay :显示目前系统上面的 VG 状态;
        • vgextend :在 VG 内增加额外的 PV ;
        • vgreduce :在 VG 内移除 PV;
        • vgchange :设定 VG 是否启动 (active);
        • vgremove :去除一个 VG 啊!
          • 例:vgcreate [-s N[mgt]] VG名称 PV名称
            • -s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可)
      3. LV 阶段
        • lvcreate :建立 LV !
        • lvscan :查询系统上面的 LV ;
        • lvdisplay :显示系统上面的 LV 状态啊!
        • lvextend :在 LV 里面增加容量!
        • lvreduce :在 LV 里面减少容量;
        • lvremove :去除一个 LV !
        • lvresize :对 LV 进行容量大小的调整!
          • 例:lvcreate [-L N[mgt]] [-n LV名称] VG名称
            • -L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE, 因此这个数量必项要是 PE 的倍数,若不相符,系统会自行计算最相近的容量
            • -l :后面可以接 PE 的『个数』,而不是数量。若要这么做,得要自行计算 PE 数
            • n :后面接的就是 LV 的名称啦!
          •   lvcreate -L 5.81G -n vbirdlv vbirdvg
      4. 文件系统阶段
        • mkfs -t ext3 /dev/vbirdvg/vbirdlv <==注意 LV 全名!
        • mkdir /mnt/lvm
        • mount /dev/vbirdvg/vbirdlv /mnt/lvm
        • df
      5. 放大 LV 容量
        1. 用 fdisk 设定新的具有 8e system ID 的 partition
        2. 利用 pvcreate 建置 PV
        3. 利用 vgextend 将 PV 加入我们的 vbirdvg
        4. 利用 lvresize 将新加入的 PV 内的 PE 加入 vbirdlv 中
        5. 透过 resize2fs 将文件系统的容量确实增加!
          • resize2fs [-f] [device] [size]
            • -f :强制进行 resize 的动作!
            • [device]:装置的文件名;
            • [size] :可以加也可以不加。如果加上 size 的话,那么就必项要给予一个单位, 譬如 M, G 等等。如果没有 size 的话,那么预设使用『整个 partition』 的容量来处理!
      6. 缩小 LV 容量--------------与放大步骤相反
        1. umount /mnt/lvm ---------先卸载
        2. resize2fs /dev/vbirdvg/vbirdlv 6900M   ------将文件系统容量缩小到
        3. e2fsck -f /dev/vbirdvg/vbirdlv    ----------检查文件系统
        4. mount /dev/vbirdvg/vbirdlv /mnt/lvm   -----挂载
        5. df /mnt/lvm   --------查看大小
        6. lvresize -l -89 /dev/vbirdvg/vbirdlv  ------抽离想要的分区
        7. lvdisplay   查看lv信息
        8. pvdisplay   确认想要移除的分区内的PE被移除
        9. pvmove /dev/hda6 /dev/hda10 移动PE 使想要抽离的分区内的PE全部成为free
        10. vgreduce vbirdvg /dev/hda6 将分区移除vg
        11. pvremove /dev/hda6  移除分区pv属性
      7. LVM快照
        1. 快照区的建立
          • vgdisplay ---------查看VG剩余容量
          • lvcreate -l 60 -s -n vbirdss /dev/vbirdvg/vbirdlv
            • 利用 lvcreate 建立系统忚照区,我们取名为 vbirdss,且给予 60 个 PE
            • -s 的选顷!代表是 snapshot 忚照功能之意!
          • mkdir /mnt/snapshot
          • mount /dev/vbirdvg/vbirdss /mnt/snapshot
          • df
          • umount /mnt/snapshot
        2. 利用忚照区复原系统
          1. mkdir -p /backups <==确认真的有这个目录!
          2. cd /mnt/snapshot    ---------进入快照区目录
          3. tar -jcv -f /backups/lvm.tar.bz2 *   ----------备份快照区所有资料 即原有系统的所有资料
          4. umount /mnt/snapshot  -----------卸载快照区
          5. lvremove /dev/vbirdvg/vbirdss -----------卸除vbirdss以及里面的内容
          6. umount /mnt/lvm   -----------卸载原系统挂载点
          7. mkfs -t ext3 /dev/vbirdvg/vbirdlv ---重新格式化
          8. mount /dev/vbirdvg/vbirdlv /mnt/lvm ---重新挂载
          9. tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm -------将原备份的压缩文件解压到该目录
      8. LVM的移除
        1. 先卸除系统上面的 LVM 文件系统 (包括忚照不所有 LV);
        2. 使用 lvremove 移除 LV ;
        3. 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;
        4. 使用 vgremove 移除 VG:
        5. 使用 pvremove 移除 PV;
        6. 最后,使用 fdisk 修改 ID !
        • 例:
          • umount /mnt/lvm
          • umount /mnt/snapshot
          • lvremove /dev/vbirdvg/vbirdss <==先处理忚照
          • lvremove /dev/vbirdvg/vbirdlv <==再处理原系统
          • vgchange -a n vbirdvg
          • vgremove vbirdvg
          • pvremove /dev/hda{6,7,8,9,10}
          • 最后再用 fdisk 将磁盘的 ID 给他改回来 82 就好啦!整个过程就这样的啦! ^_^ 重点!
  • 相关阅读:
    [ZJOI2012]灾难
    java实现风险度量
    大字段字符类型
    [CQOI2011]放棋子
    java实现还款计算
    java实现还款计算
    java实现字符串比较
    java实现字符串比较
    快速插入一百万行数据储存过程
    [六省联考2017]分手是祝愿
  • 原文地址:https://www.cnblogs.com/guojintao/p/5718679.html
Copyright © 2011-2022 走看看