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/sdb为5G
Fdisk–cu /dev/sdb编辑第二块硬盘为其创建分区
Command(m 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.user与aquota.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
Passwdlwh为lwh创建密码
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
inode与block使用说明
磁盘配额限制空间使用的方法有两种,即分别对inode和block进行限制。磁盘配额可以限定用户在分区中使用的空间大小(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文件系统提示sdb1:warning, userfile quota exceeded.
Touch5 当创建5文件时提示sdb1:write failed,user 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):输入密码后 出现了:
(Repairfilesystem)1 #
E2fsck–y /devsdb1选中之前出现的错误的分区进行修复
系统即会自动修复并于画面显示修复进度
完成后按exit,在reboot进行系统重启
终极暴力方法
Giveroot password for maintenance
(ortype Control-D to continue):输入密码后 出现了:
(Repairfilesystem)1 #
进入/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 就可以进行重启