linux磁盘限额和进阶文件系统的管理 quota RAID LVM

时间:2022-04-29 14:59:38

概念:

  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 就好啦!整个过程就这样的啦! ^_^ 重点!