Quota与进阶文件管理

Quota的用途:

针对网络服务:

1. 针对WWW server,例如每个人的网页空间容量限制

2. 针对mail server,例如每个人的邮件空间限制

3. 针对file server,例如每个人最大的可用网络硬盘空间

针对Linux系统主机:

1. 限制某一群组所能使用的最大磁盘配额

2. 限制某一用户的最大磁盘配额

3. 以link的方式使邮件等可以作为限制的配额

Quota的使用限制:

1. 仅能针对整个file system(不能针对某个目录进行)

2. 要求Linux核心必须支持quota

3. 只对一般身份使用者有效


其实Quota是通过分析整个文件系统,每个使用者/群组拥有的档案总数与容量,再将这些数据记录在该文件系统的最顶层目录,然后在该记录文件中再使用每个帐号/群组的限制值去规范磁盘使用量的


Quota的设定项目:

1. 容量限制或档案数量限制(block或inode)

限制inode用量可以限制用户建立档案的数量;限制block用量可以限制用户使用的磁盘容量

2. soft/hard limit

hard:使用者绝对不能超过的限制值,如果超过这个值系统会锁住该用户的磁盘使用权

soft:超过soft但低于hard时,每次用户登录时系统会发出警告,并给予一个宽限时间(grace time);若用户在宽限时间到达前将使用量减小至低于soft,宽限时间会停止

3. 倒数计时的宽限时间(grace time)

一般预设为7天,如果7天内不进行磁盘管理,soft限制值会取代hard限制值作为quota的限制


开启quota支持的两种方式:

1. 仅本次开机支持:mount -o remount, usrquota, grpquota 文件系统(挂载点)

其中,使用者与群组的quota文件系统支持参数分别是usrquota, grpqouta

2. 方法1中手动挂载的数据在下次重新挂载时会消失,所以最好写入配置文件/etc/fstab,在options后添加",usrquota,grpquota"即可


quotacheck:扫描文件系统并建立Quota的记录文件

quotacheck [-avugfM] [文件系统(挂载点)]

-a:扫描所有在/etc/mtab中含有quota支持的file system。在加上此参数后,文件系统可以省略(因为会扫描所有的file system)

-u:针对用户扫描空间使用情况,会建立aquota.user

-g:针对群组扫描空间使用情况,会建立aquota.group

-v:显示扫描过程的信息

-f:强制扫描文件系统,并写入新的quota配置文件

-M:强制以读写的方式扫描文件系统,只有在特殊情况下才会使用

一般只要使用【-avug】即可


quotaon:启动quota服务

quotaon [-avug] [文件系统(挂载点)]

-u:针对账户启动quota

-g:针对群组启动quota

-v:显示启动过程的相关信息

-a:根据/etc/mtab内的filesystem设定启动有关的quota,若没有该选项则需要添加文件系统

一般只要使用【-avug】即可


quotaoff:关闭quota服务

quotaoff [-aug] [文件系统(挂载点)]

-a:关闭所有filesystem的quota服务(根据/etc/mtab)

-u:仅针对后接文件系统关闭user quota

-g:仅针对后接文件系统关闭group quota


edquota:编辑帐号/群组的限制

edquota [-u username] [-g groupname]

edquota -t 宽限时间

edquota -p 模板帐号 -u 新帐号

可以设置的限制参数:

1. filesystem

2. blocks(磁盘容量):这个数值是quota自己计算出来的,单位为KB

3. soft:单位为KB

4. hard:单位为KB

5. inodes(档案数):quota自己计算出来的,单位为个数

6. soft:inode的soft限制值

7. hard:inode的hard限制值

当soft/hard为0时,表示没有限制


quota:单一用户的quota报告

quota [-ugvs] [username/groupname]

-u:后接username,显示出该用户的quota限制;若不接username则为显示当前用户

-g:后接groupname,显示出该群组的quota限制

-s:以MB等易于人类阅读的方式显示


repquota:针对文件系统的quota报告

repquota [-avugs] [文件系统(挂载点)]

-a:报告/etc/mtab中具有quota标志的filesystem的quota限制,有了这个参数就可以省略文件系统

-v:输出的数据中将含有filesystem的详细信息

-u:报告用户的quota限制

-g:报告群组的qutoa限制

-s:以MB等易于阅读的方式显示

一般只要使用【-auvs】即可


warnquota:

对超额使用者发出警告信息。根据/etc/warnquota.conf的设定,找出超过soft限制的用户,通过email发送警告信息(一封给用户,一封给root)。在/etc/warnquota.conf中,添加"MESSAGE = "后接邮件内容,在"MESSAGE"中,"|"代表断行,"\"代表下一行。warnquota不会自动执行,可以在/etc/cron.daily/下添加"warnquota"文件,加入内容"usr/sbin/warnquota",再将其权限改为755即可


用脚本建立大量帐号并设定quota的方法:

1. 建立一个原始quota帐号,再将【edquota -p old -u new】写入脚本中

2. 直接以setquota建立用户quota设定(单位为KB)

setquota [-u/g] username/groupanme (block)soft (block)hard (inode)soft (inode)hard 文件系统


如果原主机没有将某个目录设定为独立分区(如/var/spool/mail),当前主机也无法新增出新的分割槽,或者想让使用者的邮件信箱与家目录的总体磁盘使用量为固定,可以采用以下方法:(假设/home是独立的分割槽)

1. 将mail这个目录完整的移动到/home下

2. 利用【ln -s /home/mail /var/spool/mail】来建立链接

3. 将/home进行quota设置

(由于大多distribution都有SELinux机制,所以在进行上述目录搬移时可能会出现限制,可能需要暂时关闭或修改SELinux规则)



独立磁盘冗余阵列(Redundant Arrays of Inexpensive Disks, RAID):

RAID 0(等量模式,stripe):效能最佳

每颗磁盘会被分割成等量的小区块(chunk),有数据要写入时,资料会被切割成区块的大小,然后依次放到不同的磁盘中。磁盘数越多整体的效能就越好,因为资料可以分散地让多颗磁盘存取。如果使用相同型号与容量的磁盘,效果较好。

但如果某颗磁盘损毁了,则整个档案就损毁了。另外如果使用容量不同的磁盘组成RAID 0,由于数据是等量依序存放到不同磁盘中的,当小容量磁盘的区块被用完后,所有的数据豆浆背斜入到最大的那颗磁盘去。

Quota与进阶文件管理_第1张图片


RAID 1(映像模式,mirror):完整备份

这种模式主要是让统一分数据完整的保存在两个磁盘中。由于数据传送到I/O总线后会被复制多份到不同的磁盘,在大量写入RAID 1的情况下写入效能可能会变得很差。RAID 1最大的优势在于数据备份,但由于备份的存在,总容量会是全部磁盘容量的一半。虽然RAID 1写入的效能不佳,但读取的效能还可以,因为数据有两份在不同的磁盘上,如果多个process在读取同一个数据时,RAID会自行区的最佳的读取平衡。最好使用同一型号、容量相同的磁盘,如果是不同容量的磁盘,则整体容量将以最小的那颗磁盘为主。


RAID 0+1,RAID1+0

RAID 0+1:先让磁盘组成RAID 0,且这样的设定有两组,再将这两组组成RAID 1

RAID 1+0:先组成RAID 1再组成RAID 0


RAID 5:

至少需要三颗磁盘。数据的写入类似RAID 0,但每次写入时在每块磁盘还会加入一个同位校验位(parity)。所以,RAID 5的整体容量是磁盘数减1,而且只有当损毁的磁盘数大于等于2时资料才会被损毁。RAID 5的读取效能尚可,但写入效能会比较低,因为要进行校验位的计算,所以写入效能与系统硬件关系较大。尤其当使用软件磁盘阵列时,校验位是通过CPU去计算而非专职的磁盘阵列卡,所以效能会受到更大影响

Quota与进阶文件管理_第2张图片


预备磁盘(Spare Disk):

为了让系统可以实时的在磁盘损毁时重建,需要spare disk的辅助。所谓的spare disk就是一颗或多颗没有包含在原磁盘阵列等级中的磁盘,这颗磁盘平时不会被磁盘阵列使用,当磁盘阵列有任何磁盘损毁时,spare disk就会被加入磁盘阵列并且损毁的磁盘会被移出阵列


硬件磁盘阵列(hardware RAID)

通过磁盘阵列卡来组成阵列,阵列卡上有专门的芯片来处理RAID任务,因此效能较好

软件磁盘阵列(software RAID)

通过软件来仿真磁盘阵列,会消耗较多的系统资源。

在Linux下硬件磁盘阵列的装置文件名为/dev/sd[a-p];软件磁盘阵列使用的装置文件名是系统的装置文件,文件名为/dev/md[0,1...]


mdadm --detail /dev/md[0/1..]

mdadm --create --auto=yes /dev/md[0/1..] --raid-devices=N --spare-devices=N --level=[0/1/4/5/6/10] /dev/sd[a/b..]

--create:建立RAID的选项

--auto=yes:决定建立后面的软件磁盘阵列,即/dev/md[0/1..]

--raid-devices=N:使用几个partition作为磁盘阵列

--spare-devices=N:使用几个磁盘作为spare disk

--level=[0/1/5...]:设定磁盘阵列的等级

--detail:后接该磁盘阵列的详细信息

上面的语法中最后会接许多装置文件名,这些装置文件名可以是整颗磁盘(如/dev/sdb),也可以是分区(如/dev/sdb1),但这些装置文件名的总数必须等于--raid-devices与--spare-devices的个数总和

例:mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sdb{12,13,14}

可以通过查阅/proc./mdstat文件来查看系统software RAID的情况。文件内容:

第一行:指出md0的RAID等级,已使用的partition,哪个partition为spare disk

第二行:指出block数,磁盘区块(chunk)大小,[m/n]表示该阵列需要m个装置,且n个装置正常运作,后面的[UUUU]代表的是四个所需装置的启动情况(即[m/n]中的m),"U"代表正常运作,若为"_"则代表不正常


RAID创建完成后,格式化(mkfs)再挂载即可使用


RAID救援:

madam --manage /dev/md[0,1..] [-add 装置] [--remove 装置] [--fail 装置]

--add:将后面的装置加入到这个md中

--remove:将后面的装置从md中移除

--fail:将后面的装置设定为出错状态


设定开机自动启动并挂载RAID

1. 通过mdadm --detail获得装置的UUID

2. 设定/etc/mdadm/mdadm.conf,加入【ARRAY /dev/md1 UUID=...】

3. 修改/etc/fstab,添加自动挂载


关闭RAID软件:

1. umount /dev/md0

2. 修改/etc/fstab中的开机自动挂载设置

3. mdadm --stop /dev/md0

4. 修改mdadm.conf内容


若出现某一partition被占用,/proc/mdstat中显示有inactive的RAID(如md0),则将该partition删除后重启系统,再重新建立partition,查看/proc/mdstat档案,若此时新建的partition被占用且该RAID状态为inactive,则可以通过mdadm --stop关闭并移除该RAID。完成后重启即可。



逻辑卷管理(Logical Volume Manager,LVM)

LVM可以弹性的调整filesystem容量,可以将多个实体partition(或disk)整合在一起,让这些partition看起来像一个磁盘(VG),然后将这块大磁盘分割成可使用的分割槽(LV),然后将这些分割槽挂载便可以使用了。并且,未来可以新增或移除其他的实体partition到这个LVM管理的磁盘中。

Physical Volume(PV),物理卷

实际的partition需要调整系统标识符(system ID)成为8e(LVM的标识符),再使用pvcreate指令将其转换成LVM最底层的物理卷,然后才能使用这些PV

Volume Group(VG),卷组

多个PV可以整合成一个VG(可以理解成是一个大磁盘)。VG最多只能包含65534个PE,所以VG的容量与PE有关

Physical Extend(PE)

PE是LVM最小的储存区块,所有的数据都是藉由写入PE来处理的。LVM预设使用4MB的PE区块,所以默认VG的大小是4*65535/1024=256G

Logical Volume(LV),逻辑卷

最终VG要被切割成LV,LV才是可以被格式化和使用的(类似分割槽),其大小与包含的PE总数有关。LV的装置文件名通常为/dev/vgname/lvname的样式

LVM可弹性变更filesystem是通过交换PE来进行的,可以将原LV内的PE转移到其他装置中以减小LV容量,或者将其他装置的PE加入一个LV中以增加其容量


完成PV,VG,LV的规划后,要使用mkfs指令将LV格式化为可使用的文件系统后才能开始使用。这个文件系统的容量在未来可以扩充或减小,其中的数据不会受到影响

数据写入LV有两种方式:

1. 线性模式(linear):当一个partition写满之后才写入下一个partition

2. 交错模式(triped):将数据拆分成多个部分写入不同的partition,理论上读写的效能会比较好

但是LVM最主要的用处是实现可弹性调整容量的文件系统,而不是建立效能为主的磁盘。因此,LVM默认采用线性模式。若采用交错模式,当一个partition发生故障时所有的数据都会被损毁。如果要强调效能的话,请使用RAID。


LVM操作流程:

1. 用硬盘partition创建PV(PV使用的partition的system ID要设为8e)

2. 用PV创建VG

3. 分割VG为LV

4. 格式化LV为可用的文件系统,并将其挂载


PV阶段:

pvcreate:将实体partition建立成PV,例:pvcreate /dev/sdb{12,13,14}

pvscan:搜寻系统当前具有PV的partition

pvdisplay:显示系统当前的PV状态

pvremove:移除partition的PV属性


VG阶段:

vgcreate:建立VG:vgcreate [-s PE大小] VG名 PV名(PV大小的单位可以是m,g,t)

vgscan:搜寻系统中是否有VG存在

vgdisplay:显示目前系统中的VG状态

vgextend:在VG中增加新的PV:vgextend VG名 PV名

vgreduce:在VG中移除已有PV

vgchange:设定VG是否启动

(vgchange -a n/y [VG名]:"y"是activate,"n"是deactivate,若不加VG名则是对所有VG进行操作)

vgremove:删除一个VG


LV阶段:

lvcreate:建立LV

lvcreate [-L 容量/-l PE个数] [-n LV名] VG名

-L后接的容量单位可以是m,g,t,但由于最小单位是PE,所以必须是PE的倍数

lvscan:查询系统中的LV

lvdisplay:显示系统中的LV

lvextend:增加LV容量

lvreduce:在LV中减少容量

lvremove:删除LV

lvresize:调整LV容量大小

lvresize -l/-L +/-N LV名:增加使用+,减小使用-,-L后接容量,-l后接PE数 

LV建立之后,在/dev下相关的VG目录下会有对应的目录。LV的全名包含路径,使用时一定要使用包含路径的全名


扩增LV容量的步骤:

1. 将要扩增partition的system ID设为8e

2. 利用pvcreate建立新的PV

3. 利用vgextend将新建立的PV加入VG

4. 利用lvresize将新的PE加入LV中

5. 通过resize2fs声明文件系统的容量增加(因为文件系统建立的石猴就规定好了inode/block/superblock等相关信息,所以要通过resize2fs增加新的block group来改变文件系统的容量)

resize2fs [-f] [装置文件名] [size]

-f:强制resize的动作

[size]:可以忽略,如果加上要有单位,如M,G等;如果不加则默认使用整个partition的容量


缩小LV容量的步骤:

1. 借助pvdisplay和pvscan计算出缩小后的容量大小

2. 用resize2fs减小文件系统容量

3. 利用lvresize更改LV容量

4. 首先确认要移除的partition是否已将PE移除(用pvdisplay观察有无Free PE,若无则说明该PV中PE已都被使用),若无Free PE则需要将这个PV中的PE搬移到有足够Free PE的PV中去(pvmove 源PV 目的PV)

5. 利用vgreduce将要移除的PV移除


LVM的系统快照(snapshot):

就是将当时的系统信息记录下来,未来如果有资料变动,则被变动的原始资料会被搬移到快照区,并且快照功能会知道那些数据放在哪里,没有被更改的资料则由文件系统与快照区共享,因此快照建立时刻的被快照文件系统得到了备份

Quota与进阶文件管理_第3张图片

由于快照区与原LV共享很多区块,所以快照区与被快照的LV必须在同一个VG中。如果快照区不够大,导致被搬运的原始资料容量大于快照区,这时快照功能就会失效

如果将快照区挂载,会发现它与被快照LV的内容相同,所以其实快照区可以作为备份进行乱搞,搞坏之后将快照区删除即可


快照区的建立:

1. 确认VG是否有Free PE,若没有则需要向VG加入新的PV

2. 用lvcreate建立系统快照区:lvcreate -l/-L N -s -n 快照区名 LV名(-s代表建立snapshot,LV名记得是包含路径的)

该步骤完成后用lvdisplay可观察到snapshot,其中"LV Size"一项表示被快照的LV容量大小,"COW-table size"表示快照区的实际容量

使用快照区还原文件系统:

1. 挂载快照区,将快照区的内容用tar指令进行备份

2. 卸载快照区,并使用lvremove指令移除快照区

3. 格式化LV,并将快照区的备份内容解压到LV的挂载目录


LVM指令汇总:

Quota与进阶文件管理_第4张图片


关闭LVM并移除:

1. 卸载系统上所有的LVM文件系统(包括所有快照与LV)

2. 用lvremove移除所有LV

3. 用【vgchange -a n VG名】让该VG不具有Active标志

4. 使用vgremove移除VG

5. 使用pvremove移除PV

6. 使用fdisk将partition的system ID改回原值

你可能感兴趣的:(Quota与进阶文件管理)