Llinux 磁盘配额的搭建和常规问题解答

                                    作者:浩浩哥来了


1 磁盘配额的使用限制

 

仅针对整个分区:磁盘配额实际运行时,是针对“整个分区”进行限制的,例如,如果/dev/hda5载入在/home下,那么,在/home下面的所有目录都会受到限制。只对一般身份用户有效:并不是所有在Linux上的账号都可以设置磁盘配额,例如root就不能设置磁盘配额,因为他拥有整个系统所有的数据。

 

 

2 磁盘配额的步骤

 

(1) 启动分区配额功能

(2) 生成配额信息文件

(3) 设置用户和组配额

(4) 启动磁盘配额服务

 

 

3 磁盘配额的具体实现

 

首先确认package已经安装


[root@srv3 ~]# rpm -q quota
quota-3.13-1.2.5.el5

确认内核支持quota磁盘配额
[root@srv3 ~]# grep CONFIG_QUOTA/boot/config-`uname -r`
CONFIG_QUOTA=y
CONFIG_QUOTACTL=y

 

插上一块新硬盘为5G大小随后进入系统

Fdisk–l查看硬盘信息,因为是第二块硬盘所以标明/dev/sdb5G

Fdisk–cu /dev/sdb编辑第二块硬盘为其创建分区

Commandm for help:m如果是第一次使用的话点击m查看整个菜单的详细信息

其中的详细内容就不在此一一解释,后续会单独出一片文档讲解磁盘的的使用

Command  (m for help) :n  进行分区

Commandaction

       E  extended

       P  partition (1-4)

P  选择P进行分区选择

Partitionnumber (1-4):1 选择分区号,如果是新硬盘第一次创建的话选择1,如果老硬盘之前分区了几次依次往后推,不能超过4,连按两下enter

Lastsector, +sectors or +size{K,M,G} :+G 为分区添加多大的空间G一定要大写

Command(m for help ):p将之前的配置信息打印出来

Command(m for help ):w将之前配置的信息保存

Partx–a /dev/sdb  重新加载下磁盘

Mkfs.ext4/dev/sdb1选择相应的分区号进行格式话,如果不格式话的话,不能进行挂载

Df –h使用命令查看下系统中的挂载情况

Mkdir/mnt/quota我这边创建一个文件当做挂载地点

Mount/dev/sdb1 /mnt/quota

Df –h再次使用命令查看下挂载情况

Mount查看下挂载信息最后一行可以看到/dev/sdb1 on /mnt/quota type ext4 (rw)

Vim/etc/fstab将挂载信息写入其中,进行开机自动挂载,在最后一行写入

/dev/sdb1       /mnt/quota     ext4   defaults,usrquota,grpquota  1 2

Mount–o remount /mnt/quota不在重启服务器的前提下使用重新挂载分区

Mount 查看下最后一行的信息是否改变 /dev/sdb1 on /mnt/quota type ext4 (rw,usrquota,grpquota)出现了这样的信息才说明挂载成功了

Quotacheck–cumg  /mnt/quota  这个命令的主要目的是扫描某个磁盘的配额空间,它会针对分区进行扫描,并且,由于该磁盘持续欲行,可能扫描过程中文件会增加,造成磁盘配额扫描错误,因此,当使用quotacheck时,该磁盘将“自动被设置为只读扇区”;扫描完毕后,扫描所得的磁盘空间结果会写入该区最顶端(aquota.useraquota.group

-c 代表创建

-m 代表强制执行

-u 针对用户进行扫描文件及目录,会建立aquota.user

-g 针对组进行扫面文件及目录,会建立aquota.group

注意如果出现了

quotacheck: Cannot create new quotafile/mnt/quota/aquota.user.new: Permission denied
quotacheck: Cannot initialize IO on new quotafile: Permission denied
quotacheck: Cannot create new quotafile /mnt/quota/aquota.group.new: Permissiondenied
quotacheck: Cannot initialize IO on new quotafile: Permission denied

出现以上问题是你的权限不足,此时的原因是SElinux 建议你进行关闭,使用以下命令进行关闭

Setenforce0

Quotaon–a将所有的磁盘分区都开启

Useraddlwh 创建用户lwh

Passwdlwhlwh创建密码

Edquota–u lwh lwh这个用户进行磁盘配额

Disk quotas for user lwh (uid 501):

Filesystem    blocks   soft   hard   inodes  soft    hard    (为其创建10M的硬设置,3个文件软限制和4个文件硬限制)

/dev/sdb1       5      0    10240           3      4

Soft 是其软限制如果超过了软限制会有一个提示信息,如果在7天之内没有将空间降到软限制以下就不允许其使用

Hard 是其硬限制,如果到达硬限制则无法继续使用

Edquota–t修改提示天数

Filesystem  Block grace period   Inode grace period
/dev/sdb1    7days              7days

inodeblock使用说明
磁盘配额限制空间使用的方法有两种,即分别对inodeblock进行限制。磁盘配额可以限定用户在分区中使用的空间大小(blocks),也可以限定用户可以在分区中最多创建的文件数(inodes),需要注意的是,只要用户所创建的文件超过他可以使用的inode数额,即使这些文件是空的,他再次创建文件的行为也将被限制。
此处说明一下inode的概念。在Linux中创建一个文件,系统就为该文件分配一个惟一的inode ,文件的inode用于访问文件的属性。也就是说,Linux系统中每个文件都要对应一个inode,通俗点说Linux内核不认识字母,所以用户要有UID、用户组要有GID、进程要有PID……,文件要有inode ,一旦inode丢失文件将无法被访问。

 

在测试的过程中必须在其挂载的位子进行测试

 

现在测试block

 

Cd/mnt/quota

Chmod757 /mnt/quota  quota的文件添加其他用户写的权限,或则你这后面切换到其用户中无法写入文件

Sulwh

Touchluowenhao

Ddif=/dev/sdb1  of=luowenhao bs=1024kcount=20480     命令将生成一个固定大小的文件。其中“if”表示输入,伪设备/dev/zero不断生成字符串“0”,初始化文件;“of”表示输出,此例为在用户当前 目录下生成文件“quotatest”“bs”“block size”指定数据块大小,单位设定为“1024k”1MB“count”为总计生成的文件(“quotatest”)大小,若“bs”1MB,则 “10240000”10000GB

会出现以下提示

Sdb1: write failed,user block limitreached.

Dd: 正在写入“luowenhao”:超出磁盘限额

 

现在测试inode

 

Cd/mnt/quota

Sulwh

Touch 1

Touch2

Touch3

Touch4  当创建完4文件系统提示sdb1warning, userfile quota exceeded.

Touch5  当创建5文件时提示sdb1write  faileduser file limit reached. Touch :“无法创建5”超出磁盘限额

 

 

重启服务器过程中出现以下的一些问题的解决办法

 

give root password for maintenance    linux系统被强行关闭或者重新启动,电脑的档案系统便有可能受损,系统会自动检查并修复档案系统,当档案系统未能自动修复,画面便会出现上述讯息。

 

在服务器启动的过程中出现以上的报错信息,查看failed那一行出现的报错提示 我这之前出现过,在搭建quota时在/etc/fstab添加了LABLE=/dev/sdb1开机自动挂载的命令导致服务器启动的过程中系统不能自动加载。

 

常规的修复方法


Giveroot password for maintenance

(ortype Control-D to continue):输入密码后 出现了:

(Repairfilesystem1 #

E2fsck–y /devsdb1选中之前出现的错误的分区进行修复

系统即会自动修复并于画面显示修复进度

完成后按exit,在reboot进行系统重启

 

终极暴力方法


Giveroot password for maintenance

(ortype Control-D to continue):输入密码后 出现了:

(Repairfilesystem1 #

进入/etc/fstab中将LABLE一行删除,但是此时你进入的/etc/fstab时文件会提示当前你只有read-only(读的权限)因此导致你删除完后使用wq!强制保存也是不行的,只能q!退出后。使用下面的终极杀招

Mount–w –o remount /

Mount/dev/sdb1   /mnt/quota  这里必须记住,之前在搭建quota时使用的是哪个分区而且挂载在那个路径下我这是/mnt/quota

Vim/etc/fstab现在可以进入其中将LABLE这一行进行删除保存退出

Reboot 就可以进行重启