Linux 学习笔记 -- 第四部分 Linux 使用着管理 -- 第15章 磁盘配额 (Quota) 与高级文件系统管理

来源:互联网 发布:java解压缩gz文件 编辑:程序博客网 时间:2024/05/01 05:18
磁盘配额(Quota)的应用与实践
quota 可以让磁盘的容量使用较为公平。


quota 的规范设置选项
·限值 inode 用量:管理用户可以新建的“文件数量”
·限值 block 用量:管理用户磁盘容量的限值,较常见的为这种方式。

不管是哪一种限值规范,限制值都有两个:
sort 表示用户在低于 soft 限值时,可以正常使用磁盘,但若超过 soft 且低于 hard 的限值时,
    当用户每次登录系统,系统会主动发出磁盘即将爆满的警告信息。
hard 表示用户的用量绝对不会超过这个限制值,如果超过,则系统会锁住该用户的磁盘使用权

grace time 会倒计时的宽限时间。
    表示在用户的磁盘用量介于 soft 到 hard 之间时,才会出现且会倒数的一个时间。
  一般默认的宽限时间为7天,如果 7 天内你都进行任何磁盘管理(清理),那么 soft 
  限制值会即刻替代 hard 限值来作为 quota 的限值。


范例:
1.新建用户: myquota1、myquota2、myquota3、myquota4、myquota5
     密码: password
   用户组:myquotagrp

2.确保内核与文件系统支持
df -h /home
mount | grep home

mount -o remount,usrquota,grpquota /home (暂时启用文件系统支持,下次重新挂载失效)
mount | grep home
(当你重新过载时,系统会同步更新 /etc/mtab 这个文件,所以你必须要确定 /etc/mtab 已经加入
usrquota、grpquota 的支持到你所想要设置的文件系统中)


vim /etc/fstab (写入配置文件中,永不失效)
LABEL=/home /home ext3 defaults,usrquota,grpquota 12
unmount /home
mount -a
mount | grep home
/dev/hda3 on /home type ext3 (rw,usrquota,grpquota)


3.新建 Quota 配置文件
Quota 是通过分析整个文件系统中每个用户(用户组)拥有的文件总数与总容量,再将这些数据记录
在该文件系统的最顶层目录的配置文件中,然后再在该配置文件中使用每个账号(或用户组)的限制值去规定磁
盘使用量的。


quotacheck [-avugfM] [/mount_point] 扫描文件系统并新建 Quota 的配置文件
-a 扫描所有在 /etc/mtab 内,含有 quota 支持的文件系统,加上此参数后,/mount_point 可不必写,
  因为扫描的是全部的文件系统
-u 针对用户扫描文件与目录的使用情况,会新建 aquota.user
-g 针对用户组扫描文件与目录的使用情况,会新建 aquota.group
-v 显示扫描过程的信息
-f 强制扫描文件系统,并写入新的 quota 配置文件(危险)
-M 强制以读写的方式扫描文件系统,只有在特殊情况下才会使用


quotacheck -avug


quotacheck -avug -mf (在确定没有任何人在使用 quota 时,可以强制重新进行 quotacheck 的操作)


4.Quota 启动、关闭与限制值设置
quotaon 启动 quota 服务
quotaon [-avug]
quotaon [-vug] [/mount_point]
-u 针对用户启动 quota (aquota.user)
-g 针对用户组启动 quota (aquota.group)
-v 显示启动过程的相关信息
-a 根据 /etc/mtab 内的文件系统设置启动有关的 quota,若不加 -a 的话,
  则后面就需要加上特定的那个文件系统。

quotaon -auvg


quotaon -uv /var (特殊用法,启动 /var 的 quota 支持,启动 user quota)

quotaoff 关闭 quota 服务
quotaoff [-a]
quotaoff [-ug] [/mount_point]
-a 全部的文件系统的 quota 都闭关 (根据 /etc/mtab)
-u 仅针对后面接的那个 /mount_point 关闭 usr quota
-g 仅针对后面接的那个 /mount_point 关闭 group quota

edquota 编辑账号/用户组的限值与宽限时间
edquota [-u username] [-g groupname]
edquota -t <== 修改宽限时间
edquota -p 范本账号 -u 新账号
-u 后面接账号名称。可以进入 quota 的编辑界面(vi)去设置 username 的限制值
-g 后面接组名。可以进入 quota 的编辑界面(vi)去设置 groupname 的限制值
-t 可以修改宽限时间
-p 复制范本。那个“模板账号”为已经存在并且已设置好 quota 的用户,
  意义为将“范本账号”这个人的 quota 限制值复制给新账号

edquota -u myquota1 (编辑某一用户的限制规则)
Disk quotas for user myquota1 (uid 710) :
Filesystem blocks(KB)    soft(KB) hard(KB)   inodes(个数)     soft      hard
/dev/hda3 80            250000      300000      10      0         0

edquota -p myquota1 -u myquota2
edquota -p myquota1 -u myquota3
edquota -p myquota1 -u myquota4
edquota -p myquota1 -u myquota5 (复制给其他用户)


edquota -g myquotagrp (编辑用户组的限制规则)
Disk quotas for group myquotagrp (gid 713):
Filesystem blocks(KB)    soft(KB) hard(KB)    inodes(个数)    soft     hard
/dev/hda3 400      9000001000000 50      0        0


edquota -t (编辑宽限时间)
Grace period before enforcing soft limits for users
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hda3     14days     7days


5.Quota 限制值的报表
quota [-uvs] [username] 仅对用户或用户组显示报表
quota [-gvs] [username]
-u 后面可以接 username,表示显示出该用户的 quota 限制值。若不接 username,表示显示出执
  行者的 quota 限制值
-g 后面可接 groupname,表示显示出该用户组的 quota 限制值
-v 显示每个用户在文件系统中的 quota 值
-s 使用 1024 为倍数来指定单位,会显示如 M 之类的单位

quota -uvs myquota1 myquota2
quota -gvs myquotagrp


repquota -a [-vugs]
-a 直接到 /etc/mtab 查询具有 quota 标志的文件系统,并报告 quota 的结果
-v 输出的数据将含有文件系统相关的详细信息
-u 显示出用户的 quota 限值(这是默认值)
-g 显示出个别用户组的 quota 限值
-s 使用 M,G 为单位显示结果

repquota -auvs (在整个磁盘中查询所有用户的 quota 限制情况)



6.测试与管理
su -l myquota1
dd if=/dev/zero of=bingfile bs=1M count=270
#hda3: warning, user block quota exceeded.
#270+0 records in
#270+0 records out
#283115520 bytes ( 283 MB ) copied, 3.20282 seconds, 88.4 MB/s
su -
reqquota -auv
#可以发现 myquota1 的 grace 出现,并且开始倒数

dd if=/dev/zero of=bigfile2 bs=1M count=300
#hda3: write failed, user block limit reached.
#dd: writing 'bigfile2': Disk quota exceeded
#23+0 records in <== 没办法写入了,所以只记录 23 条
#22+0 records out
#23683072 bytes ( 24 MB ) copied, 0.260081 seconds, 91.1 MB/s
du -sk
300000  .


repquota -au
*** report for user quotas on device /dev/hda3
Block grace time: 00:01; Inode grace time: 7days
             Block limits                     File limits
User     used    soft    hard    grace    used    soft    hard   grace
--------------------------------------------------------------------------
myquota1 +-  300000  250000  300000   none     11      0       0       0
#倒数真个归零,所以 grace 的部分就会变成 none 。不继续倒数


warnquota 对超过限额者发出警告信,可以依据 /etc/warnquota.conf 的设置,然后
 找出目前系统上面 quota 用量超过 soft 的账号,通过 Email 的功能将
 警告信件发送到用户的电子邮件信箱。

warnquota

mail


vim /etc/warnquota.conf


vim /etc/cron.daily/warnquota (让系统自动执行 warnquota)
/usr/sbin/warnquota

chmod 755 /etc/cron/daily/warnquota

setquota [-u|-g] 名称 block(soft) block(hard) inode(soft) inode(hard) 文件系统
直接于命令中设置 quota 限额


quota -uv myquota5


setquota -u myquota5  100000  200000  0  0  /home

quota -uv myquota5


不改动既有系统的 Quata 实例
1.将 /var/spool/mail 这个目录完整地移动到 /home 下面;
2.利用 ln -s /home/mail /var/spoool/mail 来新建连接数据;
3.将 /home 进行 quota 限额设置


软件磁盘阵列 ( Software RAID )
硬件磁盘阵列在 Linux 下面看起来就是一块实际的大磁盘,因此硬件磁盘阵列的设备文件名为 /dev/sd[a-p],
因为使用到 SCSI 的模块之故。至于软件磁盘阵列则是系统仿真的,因此使用的设备文件名是系统的设备文件,
文件名为 /dev/md0,/dev/md1,两者的设备文件名并不相同。


1.软件磁盘阵列的设置:
mdadm --detail /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 使用几个磁盘作为磁盘阵列的设备
--spare-devices=N 使用几个磁盘作为备用 ( spare ) 设备
--level=[015] 设置这组磁盘阵列的等级。支持很多,不过建议只要用0,1,5即可。
--detail 后面所接的那个磁盘阵列设备的详细信息

构建一个 RAID5 的磁盘阵列:
要求:
1.利用 4 个分区组成 RAID5
2.每个分区约为 1GB 大小,需确定每个分区一样大较佳
3.利用1个分区设置为 spare disk
4.这个 spare disk 的大小与其他 RAID 所需分区一样大


步骤:
1.构建所需的磁盘设备
fdisk /dev/hda
n
+1000M
n
+1000M

+1000M
n
+1000M
n
+1000M
p
w
partprobe

2.以 mdadm 创建 RAID
mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 \
> /dev/hda{6,7,8,9,10}


mdadm --detail /dev/md0 (查看磁盘阵列状态)


cat /proc/mdstat (查看磁盘阵列状态)


3.格式化与挂载使用 RAID
mkfs -t ext3 /dev/md0
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
df


2.仿真 RAID 错误的救援模式
mdadm --manage /dev/md[0-9] [--add 设备] [--remove 设备] \
> [--fail 设备]
--add 会将后面的设备加入到这个 md 中
--remove 会将后面的设备从这个 .md 中删除
--fail 会将后面的设备设置成为出错的状态


1.设置磁盘为错误 ( fault )
cp -a /etc /var/log /mnt/raid
df /mnt/raid; du -sm /mnt/raid/*

mdadm --manage /dev/md0 --fail /dev/hda8
mdadm --detail /dev/md0


cat /proc/mdstat


2.将出错的磁盘删除并加入新磁盘
fdisk /dev/hda
n
+1000m
w
partprobe
mdadm --manage /dev/md0 --add /dev/hda11 --remove /dev/hda8

mdadm --detail /dev/md0

3.开机自动启动 RAID 并自动挂载
mdadm --detail /dev/md0| grep -i uuid
UUID : 7c60c049:57d60814:bd9a77f1:57e49c5b

vim /etc/mdadm.conf
ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b

vim /etc/fstab
/dev/md0 /mnt/raid ext3defaults 1    2


umount /dev/md0; mount -a
df /mnt/raid


reboot

4.关闭软件 RAID (重要!)
umount /dev/md0
vim /etc/fstab
#/dev/md0 /mnt/raid ext3 defaults      1    2

mdadm --stop /dev/md0

cat /proc/mdstat

vim /etc/mdadm.conf
#ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b

逻辑卷管理器 (Logical Volume Manager)
LVM 的重点在于可以弹性调整文件系统的容量
LVM 可以整合多个物理分区在一起,让这些分区看起来就像是一个磁盘一样,而且,
   还可以在将来其他的物理分区或将其从这个 LVM 管理的磁盘当中删除。

PV -> PE -> VG -> LV

LVM 实作流程


1.准备分区:systemID 需要为8e
fdisk /dev/hda
t
partprobe
fdisk -l

2.PV阶段:
pvcreate 将物理分区新建成为 PV
pvscan 查询目前系统里面任何具有 PV 的磁盘
pvdisplay 显示出目前系统上面的 PV 状态
pvremove 将 PV 属性删除,让该分区不具有 PV 属性

pvscan
pvcreate /dev/hda{6,7,8,9}
pvscan
pvdisplay

3.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 (大小写均可)

vgcreate -s 16M vbirdvg /dev/hda{6,7,8} (将 /dev/hda6-8 新建成为一个 VG,且指定 PE 为 16MB)

vgscan


vgdisplay


vgextend vbirdvg /dev/hda9

vgdisplay

4.LV阶段:
lvcreate 新建 LV
lvscan 查询系统上面的 LV
lvdisplay 显示系统上面的 LV 状态
lvextend 在 LV 里面增加容量
lvreduce 在 LV 里面减少容量
lvremove 删除一个 LV
lvresize 对 LV 进行容量大小的调整

lvcreate [-L N[mgt]] [-n LV 名称] VG名称
lvcreate [-l N] [-n LV名称] VG名称
-L 后面接容量,容量的单位可以是 M, G, T 等,要注意的是,最小单位为 PE,
  因此这个数量必须要是 PE 的倍数,若不相符,系统会自行计算最相近的容量
-l 后面可以接 PE 的“个数”,而不是容量。若要这么做,得要自行计算 PE 数。
-n 后面接的就是 LV 的名称

lvcreate -l 356 -n vbirdlv vbirdvg (将整个 vbirdvg 全部分配给 vbirdlv,要
   注意,PE 共有 356 个)
(相当于 lvcreate -L 5.56G -n vbirdlv vbirdvg)

ll /dev/vbirdvg/vbirdlv

lvdisplay


5.文件系统阶段
mkfs -t ext3 /dev/vbirdvg/vbirdlv
mkdir /mnt/lvm
mount /dev/vbirdvg/vbirdlv /mnt/lvm
df
cp -a /etc/ /var/log /mnt/lvm

放大 LV 容量
1.用 fdisk 设置新的具有 8e systemID 的分区
2.利用 pvcreate 构建 PV
3.利用 vgextend 将 PV 加入我们的 vbirdvg
4.利用 lvresize 将新加入的 PV 内的 PE 加入 vbirdlv 中
5.通过 resize2fs 将文件系统的容量确实增加


fdisk /dev/hda
t
partprobe
fdisk -l


pvcreate /dev/hda10
pvscan

vgextend vbirdvg /dev/hda10
vgdisplay

lvresize -l +179 /dev/vbirdvg/vbirdlv
lvdisplay


df /mnt/lvm


dumpe2fs /dev/vbirdvg/vbirdlv


resize2fs [-f] [device] [size]
-f 强制进行 resize 操作
[device] 设备的文件名
[size] 可加可不加,如果加上 size 的话,那么就必须要给予一个单位,
譬如 M,G 等。如果没有 size 的话,那么默认使用整个分区的
容量来处理


resize2fs /dev/vbirdvg/vbirdlv


df /mnt/lvm

ll /mnt/lvm

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

pvdisplay

pvscan 

2.直接降低文件系统的容量

resize2fs /dev/vbirdvg/vbirdlv 6900M (在线缩小文件系统无法支持)


unmount /mnt/lvm


resize2fs /dev/vbirdvg/vbirdlv 6900M (提示需要先进行磁盘检查)

e2fsck -f /dev/vbirdvg/vbirdlv


resize2fs /dev/vbirdvg/vbirdlv 6900M

mount /dev/vbirdvg/vbirdlv /mnt/lvm


df /mnt/lvm


3.降低 LV 的容量,同时我们知道 /dev/hda6 有89个 PE

lvresize -l -89 /dev/vbirdvg/vbirdlv

lvdisplay

4.1 先确认 /dev/hda6 是否将 PE 都删除了!

pvdisplay

pvmove /dev/hda6 /dev/hda10


4.2 将 /dev/hda6 移出 vbirdvg 中

vgreduce vbirdvg /dev/hda6


pvscan


pvremove /dev/hda6


快照区 
快照区的新建

1.先查看 VG 还剩下多少剩余容量

vgdisplay

2.将刚才删除的 /dev/hda6 加入这个 VG

pvcreate /dev/hda6

vgextend vbirdvg /dev/hda6


vgdisplay


3.利用 lvcreate 新建系统快照区,我们取名为 vbirdss,且给予 60 个 PE

lvcreate -l 60 -s -n vbirdss /dev/vbirdvg/vbirdlv


lvdisplay


4.测试

mkdir /mnt/snapshot

mount /dev/vbirdvg/vbirdss /mnt/snapshot

df


umount /mnt/snapshot


利用快照区复原系统


1.先将原本的 /dev/vbirdvg/vbirdlv 内容做些更改,增减一些目录



df /mnt/lvm


ll /mnt/lvm


rm -r /mnt/lvm/log

cp -a /boot /lib /sbin /mnt/lvm

ll /mnt/lvm


lvdisplay /dev/vbirdvg/vbirdss


2.利用快照区将原本的文件系统备份

mount /dev/vbirdvg/vbirdss /mnt/snapshot


df


mkdir -p /backups


cd /mnt/snapshot


tar -jcv -f /backups/lvm.tar.bz2 *


3.将 vbirdss 切除并删除 (因为里面的内容已经备份起来了)

umount /mnt/snapshot


lvremove /dev/vbirdvg/vbirdss


umount /mnt/lvm


mkfs -t ext3 /dev/vbirdvg/vbirdlv

mount /dev/vbirdvg/vbirdlv /mnt/lvm


tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm


ll /mnt/lvm


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


1.新建一个大一些的快照区让我们将 /dev/hda6 的 PE 全部给快照区!

lvcreate -s -l 89 -n vbirdss /dev/vbirdvg/vbirdlv


lvdisplay /dev/vbirdvg/vbirdss


2.隐藏 vbirdlv 挂载 vbirdss


umount /mnt/lvm

mount /dev/vbirdvg/vbirdss /mnt/snapshot


df /mnt/snapshot


3.开始恶搞


rm -r /mnt/snapshot/etc /mnt/snapshot/log


cp -a /boot /lib /sbin /mnt/snapshot/


ll /mnt/snapshot


mount /dev/vbirdvg/vbirdlv /mnt/lvm


ll /mnt/lvm


4.还原原来快照区的数据,回到与原文件系统相同的信息


umount /mnt/snapshot

lvremove /dev/vbirdvg/vbirdss
y


lvcreate -s l 89 -n vbirdss /dev/vbirdvg/vbirdlv


mount /dev/vbirdvg/vbirdss /mnt/snapshot


ll /mnt/snapshot
LVM 的关闭
1.先卸载系统上面的 LVM 文件系统 (包括快照与所有 LV)
2.使用 lvremove 删除 LV
3.使用 vgchange -an VGname 让 VGname 这个 VG 不具有 Active 的标志
4.使用 vgremove 删除 VG
5.使用 pvremove 删除 PV
6.最后,使用 fdisk 将 system 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
t
0 0
原创粉丝点击