如何在linux服务器上配置磁盘的限额

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在linux服务器上配置磁盘的限额相关的知识,希望对你有一定的参考价值。

参考技术A 分类: 电脑/网络 >> 操作系统/系统故障
问题描述:

希望大家帮帮忙,小菜我有急用啊!

解析:

在核心中安装 quotas

在这个套件中的 diffs 是相对于本来的 1.1.16 版程式码。

执行下面的步骤。

首先为旧的组件建立备份,就像这样。

1) cd /usr/src

2) tar czvhf oldlinux.tar.gz linux

然后解开组件

3) cd /usr/src/linux

4) patch -p1 < <你放置它的地方>/kdiffs_1.1.16

检查看看有没有一些被拒绝执行的地方或者是不是有做一些这样的尝试。

5) find . -name \*.rej

当你完成这个步骤以后我们可以把一些原先的档案丢掉。

6) find . -name \*.orig | xargs rm

下面配置你的核心

7) cd ..

8) make config

在 Disk QUOTA support 选项上回答 yes 。

做一下验证,然后重新制作核心。

9) make depend

10) make

现在你应该已经拥有一个新的核心映像,像平常一样地安装它。

好,现在制作工具程式并且安装它们。

把这个目录下的 mntent.h 档案复制到 /usr/include 以便取代原先那个小的、并且会锁住各种运作选项的那一个。

要使用这个套件里的 PROCESSACCOUNTING DIFFS 你需要有 GNU 的 ACCOUNTING 工具程式,这些工具程式可以在 PREP.AI.MIT.EDU 里找到 )

在档案系统上启动 quotas

要在一个档案系统上启动 quotas 的人应该要编辑 /etc/fstab 这个档案并且为了 usrquota 以及 grpquota 增加一些项目。我的看起来像这样:

# device directory type options

/dev/hda1 / ext2 defaults

/dev/hda2 none swap sw

/dev/hda3 /usr ext2 defaults

/dev/hdb1 /usr/users ext2 defaults,usrquota,grpquota

/dev/hdb2 /usr/src ext2 defaults,usrquota

none /proc proc defaults

在每个 fstab 项目的选项栏位中,关键字 "usrquota" 为这个设备打开使用者的限额功能。在选项栏位里的关键字 "grpquota" 则为这个设备打开使用群的限额功能。当你使用了 usrquota 以及 grpquota 选项而没有加上 "" 选项时,你的 quotafiles 会是在每个档案系统的根目录里。一个叫做 "quota.user" 的档案是给使用者的限额功能所使用;而一个叫做 "quota.group" 的档案则是给使用群的限额功能所使用。

从 1.1 版开始你也能够在里面定义你自己的 quotafile 。就像是 "usrquota/usr/adm/quotasrc.user" 这样的东西。请注意你的 fstab 里每一行的最大长度限制,参看mntent.h 里面的定义。在你真的想要使用这个选项时,你应该用这个套件所提供的mntent.c 链结这些程式,因为程式库在处理一个 fastab 档案的剖析上有些问题。

打开 quotas 的功能

在你第一次安装 quota 时执行 "quotacheck -avug" 来将所有的 quotafiles 安装到你档案系统的根目录。或者是当你以 [usr|grp]quota"" 在定义你的 fstab 时所叙述的地方。当用来检查一个设备时不要用 quotacheck 程式的 -d 旗标。因为这个只有用在除错上而且会使得扫描非常的慢。

quotacheck 这个程式在大型的档案系统上得花些时间,但是新的版本在我的机器上已经很可以接受了。然而当你是在 hacking 核心时,我建议不要去使用它。因为这在你每次必须得重新开机时都会花些时间。你也可以把它放在你的 rc 指令稿里然后就像你在你的档案系统上执行 fsck 一般,只有在 fastreboot 旗标没有被设定的时候才会执行它。

他并没有支援档案系统的 parallel checking ,但是下个版本可能会有。请不要介意自己去实作它。如果没有人要做那我就得自己来,但这样子的话将得多花点时间,因为它现在在我的 wish list 中并不是很重要。而且它在 IDE 磁碟上做 simultaniously大概不会多快。

现在应该已经具备所有必须的 quotafiles 。现在你可以增加像这样一行:

/usr/etc/quotaon -avug(或是不要加上 -v 旗标,如果你并不想看到什么 quota 被打开了的话)。

到你的 /etc/rc 里面去。这是用来在你启动机器时打开 quotas 的功能。这是一个让你不必在每次启动你的机器时都得要自己打开它的办法。

为 quotas 检查档案系统

只要执行 "quotacheck -avug" 那麽 quotafiles 就会自动被更新而且核心正在使用的参考表也一样。注意 quotacheck 程式的 "updating in core quotas" 讯息,如果它更新核心的 quotas 就会出现。

quotafile 是以 (uid || gid * sizeof(struct dquot))这种方式建立的,所以当你没有 uid以及用户nobody拥有一个档案时会得到很大的 quota files ,估计大概有 2 Mb 左右填满零的空间给没有 quota 的使用者。

指定一个使用者或使用群的 quota

现在用 "edquota -u " 来编辑使用者的限额以及 "edquota -g " 来编辑使用群的限额。

只需编辑位于soft 以及 hard 关键字后面的数字。有两行给每个打开 quotas 的档案系统使用。 Soft 的意思是指软性限制,如果使用者或使用群超越了这个限制,他们会有些优待期限用来确定他们回到软性限制的范围内。

这是可以使用 "edquota -t" 然后输入以日数来加以改变的。如果他们不在优待期限内删除这些部份的话,那麽将会被当作硬性限制处理。硬性限制是他们所能分配到的绝对最大限额,如果他们想要分配更多则这些档案会被拦腰斩断。

说明 blocks 的那一行是一个人所能分配的区块数目,说明 inode 的那一行是一个人所能分配的索引节点 (files/named piple/devices/e) 数目。

全部都以相同的限额增加使用者

到 homedir 所在的地方去。对其中一个使用者执行 edquota 并且将限额改换成适当的数值。这个使用者变成所有其他使用者或使用群的原形。然后这样做:

# edquota -p <你以正确的限额编辑过的使用者> *

这样应该可以执行这个技术,所有的使用者现在都有他们所需要的限额,现在你可以对还有其它需要的人进行编辑。

检验使用者的限额

执行 quota 程式。这个程式的语法是:

用法:

quota [-guqv]

quota [-qv] -u 使用者名称...

quota [-qv] -g 使用群名称...

用 -v 来查看 quotas 在

1) 你没有设限额的档案系统

2) 你已经设了限额但是目前还没有分配任何区块的档案系统

用 -q 只查看那些你分配了超过你的软性限制或已经达到你的硬性限制的档案系统。

这 -g 旗标给你你所属的使用群的所有限额(也包括附加的使用群)。

关掉对某个使用者的限额

当你想要关掉对某个使用者的限额时用限额编辑器 edquota 。键入 "edquota 〈使用者名称 | uid〉" 或者 "edquota -g 〈使用群名称 | gid〉" 并且将区块的软性限制与硬性限制以及索引节点的软性限制与硬性限制设成零。这样应该可以关掉对这个使用者的限额而只要这个使用者想要,分配多少区块或索引节点都可以。

在一个档案性统上所有使用者所使用的限额列表

你可以使用 repquota 程式来取得一份目前的档案系统或任何档案系统中所有被使用的限额列表。这个程式需要读取 quotafiles 所以我需要以超级使用者来执行它或者如果你的 quotafiles 是任何人都可以读取则任何使用者都可以执行。不建议这样做。

在 NFS-mounted 磁碟上使用 quotas

要在 NFS 档案系统上使用 quota 你需要把 quota 安装到档案伺服器上而不是 client上。客户机器可以借由 quota 指令取得有关限额的资讯,它会对你挂上 NFS 磁碟的档案伺服器的 rquotad 提出查询。所以不要对挂上的 NFS 磁碟设置任何 usrquota 或者是 grpquota 旗标。而以在你的档案伺服器安装 quotas 来取代。并且从你的网路 rc档案中启动 rpc.rquotad 。

磁盘配额(quota)

一、什么是磁盘配额

磁盘配额从字面意思上看就是给一个磁盘配置多少额度,而quota就是有多少限额的意思,所以总的来说就是限制用户对磁盘空间的使用量。
因为Linux是多用户多任务的操作系统,许多人公用磁盘空间,举个例子像/home目录是存放普通用户家目录的地方,我们假如home目录一共有10G空间,而home下一共有三个用户,那么正常划分的话每个人应该是分得大概333M空间,但是其中有个用户在家目录下存放了很多音频文件占了8G的空间,这样的话对其他用户就显得不公平,而如果想要磁盘容量公平的分配,这个时候就要靠quota来实现了。

二、quota的常见类型及注意事项

(1)注意事项
1.针对 www server,例如对个人的网页空间的容量限额。
2.针对mail server,例如对个人的邮件空间进行限额。
3.针对file server,例如对个人最大的可用网络硬盘空间限额。
在这里我们就主要讲解下第三种对硬盘空间进行限额
(2)注意事项
1.核心必须支持quota:Linux核心必须有支持quota这个功能才行,在centos7版本中系统都预设支持quota功能,但如果你是自行编译的核心,那你就要留意是否真的开启了quota功能,否则后面做的可能都会白做。
2.只适用于ext2.ext3.ext4文件系统,对于目录是不起作用的,虽然我们的挂载点是一个目录,但实际上它是个文件系统设备。
3.只针对普通用户和组有效:因为在Linux系统中root身份的特殊所以这些设定对root是不起作用的因为整个系统都归他管啊。
4.针对用户组使用的限额是指某个组中的所有成员一起使用的限额,而不是每个人使用的限额。

关于quota的几个配置
inode:限制用户可以建立的文件数量
block:限制用户磁盘容量(默认以KB为单位)
而不论是inode还是block它们都有一个soft/hard,也就是软限制和硬限制。
soft:这是最低容量的意思,在用户宽限期内他的容量可以超过这个值,但不能超过硬限制,也必须在规定的宽限期内将容量降到soft容量限制之下。
hard:这是最高的限制,是绝对不能超过的,通常hard值都会比soft值高,如果用户超过了hard值那么系统就会锁定该用户对该磁盘的使用权限。
grace time:这就是上面提到的宽限时间,这个宽限时间只有用户对磁盘的使用量介于soft和hard之间时才会出现,这是为了提醒用户,因为磁盘容量一旦达到hard,使用者的磁盘使用权限将会被锁住,为了担心使用者没有注意到这个问题,因此设计了soft,而当你的磁盘使用量超过soft即将达到hard时,系统会给予警告,但也会给使用者一段时间让使用者自行管理磁盘,一般预设的宽限时间为7天,但如果你7天内都不对磁盘进行管理,那么soft限制将会取代hard限制来作为quota的限制。

三、quota限额的操作演示

1.quota的安装包
quota在centos7里是默认安装的,但如果你对系统里没有可以使用rpm安装,安装如下:
rpm -q quota
quota-4.01-14.el7.x86_64
2.首先我们要创建一个普通用户,因为quota对root是无效的。我们就创建一个普通用户myquota1作为演示,然后我们看要演示的磁盘是否开启quota,这里我对/dev/sda6分区进行操作,我们先查看/dev/sda6是否开启quota

[[email protected] ~]# mount
/dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,data=ordered)

我们可以看到quota没有开启,所以我们需要重新挂载。为了使下次开机也起作用,我们把挂载写到/etc/fstab文件中

[[email protected] ~]# vim /etc/fstab
/dev/sda6       /disk2          ext4    defaults,usrquota,grpquota  0 0
#由于我们增加了用户和组的配额,所以这里我们要重新mount一次,使我们的修改生效
[[email protected] ~]# mount -o remount /disk2
[[email protected] ~]# mount
/dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)

现在已经开启了对用的磁盘配额
3.生成磁盘配额数据库

[[email protected] disk2]# quotacheck -acgu
[[email protected] disk2]# ls
aquota.group  aquota.user  lost+found

这里的参数意思分别是
-a 所有分区(已支持配额)
-c 创建
-u 用户
-g 组
4.启动磁盘配额

[[email protected] disk2]# quotaon -a //启动所有分区的磁盘配额
5.编辑磁盘配额文件

[[email protected] ~]# edquota myquota1
Disk quotas for user myquota1 (uid 1002):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0          0          0          0        0        0
  /dev/sda6                         0       5120      10240          1        5       10

这里我们可以看到/dev/sda6对用户myquota1的空间软限额为5M,硬限额为10M,创建文件数量软限制为5硬限制为10

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/sdb1                     7days                  7days
  /dev/sda6                     5days                 6hours

edquota -t 将打开磁盘对限额日期的宽限修改时间
可以使用天、小时、分、秒为单位来设定宽限期。默认的都为7天,在这里,/dev/sda6磁盘空间限制的宽限期为5天,而文件数量限制的宽限期只有6个小时。
6.测试

我们切换到myquota1用户先看查看自身限额情况

[[email protected] disk2]$ quota
Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6       0    5120   10240               1       5      10        

然后我们来测试效果

[[email protected] disk2]$ touch file2
[[email protected] disk2]$ dd if=/dev/zero of=file2 bs=1M count=2
[[email protected] disk2]$ dd if=/dev/zero of=file3 bs=1M count=2
[[email protected] disk2]$ dd if=/dev/zero of=file4 bs=1M count=2
sda6: warning, user block quota exceeded.
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.00488266 s, 430 MB/s

我们可以看到我们在创建file4时系统给出了警告,这时候我们再来看一下配额情况
[[email protected] disk2]$ quota

Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6    6144*   5120   10240   4days       4       5      10    
#我们可以看到使用磁盘使用量已经达到了6144KB超过了软限制,而且6144还带上了*号,宽限时间为4天,我们在创建两个文件,让他文件数超过软限制,看看是不是也是这个效果
[[email protected] disk2]$ touch file{5,6}
sda6: warning, user file quota exceeded.
[[email protected] disk2]$ quota
Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6    6144*   5120   10240   4days       6*      5      10   06:00
#我们可以看到在创建两个文件后系统同样给出了警告,inode使用数也带上了*号,宽限时间出现了为6个小时。           

在目前情况下我们最多还能创建4个文件,最多还有4M空间,下面我们继续测试,继续加大使用空间。

[[email protected] disk2]$ dd if=/dev/zero of=file7 bs=1M count=3
3+0 records in
3+0 records out
3145728 bytes (3.1 MB) copied, 0.00578637 s, 544 MB/s
[[email protected] disk2]$ dd if=/dev/zero of=file8 bs=1M count=3
sda6: write failed, user block limit reached.
dd: error writing ‘file8’: Disk quota exceeded
2+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00451473 s, 232 MB/s
#在我们创建第二个文件的时候系统又一次进行了报警,提示已超出磁盘配额。
[[email protected] disk2]$ ll
total 10272
-rw-------. 1 root     root        7168 Mar  3 01:25 aquota.group
-rw-------. 1 root     root        7168 Mar  3 01:25 aquota.user
-rw-rw-r--. 1 myquota1 myquota1       0 Mar  3 01:44 file1
-rw-rw-r--. 1 myquota1 myquota1 2097152 Mar  3 17:04 file2
-rw-rw-r--. 1 myquota1 myquota1 2097152 Mar  3 17:05 file3
-rw-rw-r--. 1 myquota1 myquota1 2097152 Mar  3 17:05 file4
-rw-rw-r--. 1 myquota1 myquota1       0 Mar  3 17:15 file5
-rw-rw-r--. 1 myquota1 myquota1       0 Mar  3 17:15 file6
-rw-rw-r--. 1 myquota1 myquota1 3145728 Mar  3 17:21 file7
-rw-rw-r--. 1 myquota1 myquota1 1048576 Mar  3 17:21 file8
drwx------. 2 root     root       16384 Mar  3 00:57 lost+found

我们可以看到虽然file8也创建成功了但是只有1M的数据,在实际应用中如果这是个3M的数据文件而只拷贝了1M是无法使用的,这个时候我们的空间限额已经达到了最高因为我们文件数量限额还没达到所以我们还可以继续创建空文件

[[email protected] disk2]$ touch file9
[[email protected] disk2]$ quota
Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6   10240*   5120   10240   4days       9*      5      10   05:49

我们可以看到file9也创建成功了,而这时候文件可创建数量只剩一个了,我们来试试看看能不能创建11个

[[email protected] disk2]$ touch file10
[[email protected] disk2]$ touch file11
sda6: write failed, user file limit reached.
touch: cannot touch ‘file11’: Disk quota exceeded
[[email protected] disk2]$ ls
aquota.group  file1   file2  file4  file6  file8  lost+found
aquota.user   file10  file3  file5  file7  file9

我们可以看到file10创建成功了,而在创建file11时给出了警告,我们查看一下发现file11并没有创建成功
接下来我们再测试下如果到宽限时间仍然不删除会怎样。
首先我们删除几个文件让他的文件数不超过硬限制,但仍超过软限制。

[[email protected] disk2]$ rm -f file{7,8,9,10}
[[email protected] disk2]$ quota
Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6    6144*   5120   10240   4days       6*      5      10   05:25
[[email protected] disk2]$ touch test1
[[email protected] disk2]$ ls
aquota.group  file1  file3  file5  lost+found
aquota.user   file2  file4  file6  test1

在删除几个文件后我们就又可以创建文件了,接下来我们把时间修改下,让它过了宽限时间看会变成怎样。
我们先切换到root身份对时间进行修改

[[email protected] ~]# date 
Sat Mar  3 18:45:25 CST 2018
[[email protected] ~]# date -s 2018-03-04
Sun Mar  4 00:00:00 CST 2018
[[email protected] ~]# clock -w
[[email protected] ~]# su - myquota1
Last login: Sat Mar  3 18:37:37 CST 2018 on pts/0
[[email protected] ~]$ cd /disk2
[[email protected] disk2]$ ls
aquota.group  file1  file3  file5  lost+found
aquota.user   file2  file4  file6  test1
[[email protected] disk2]$ quota
Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6    6144*   5120   10240   4days       7*      5      10    none
[[email protected] disk2]$ touch test2
sda6: write failed, user file quota exceeded too long.
touch: cannot touch ‘test2’: Disk quota exceeded
[[email protected] disk2]$ ls
aquota.group  file1  file3  file5  lost+found
aquota.user   file2  file4  file6  test1

我们可以看到时间改完后宽限时间那里变成了none,我们这个时候已经创建了7个文件,它本来的软限制为5,硬限制为10,而我们现在创建文件却无法创建,这就是超过宽限日期后软限制就会变成硬限制,这个时候用户必须对磁盘进行清理。

[[email protected] disk2]$ rm -rf file{1,2,3,4,5,6}
[[email protected] disk2]$ ls
aquota.group  aquota.user  lost+found  test1
[[email protected] disk2]$ quota
Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6       0    5120   10240               1       5      10  

我们对磁盘进行清理后发现那些*号没有了,宽限时间也不见了。

同理对于用户组的限额设定和对用户设置的方法一样,只是dequota user 变成了edquota group而已。但针对的是用户整个组的限额,而不是单个成员。

四、quota的实用命令

测试完quota的效果,我们再来说几个quota的实用命令
1.不用edquota编辑文件,直接使用命令配置

[[email protected] disk2]$ quota
Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6       0    5120   10240               1       5      10       
[[email protected] disk2]$ exit
logout
[[email protected] ~]#  setquota myquota1 20480 40960 50 100 /dev/sda6
[[email protected] ~]# quota myquota1
Disk quotas for user myquota1 (uid 1002): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6       0   20480   40960               1      50     100                 

setquota使用格式:
setquota user blocks限制 inode限制 文件系统
setquota myquota1 20480 40960 50 100 /dev/sda6
2.复制磁盘配额配置文件给多个用户

[[email protected] ~]# edquota -p myquota1  myquota2
[[email protected] ~]# quota myquota2
Disk quotas for user myquota2 (uid 1003): none
[[email protected] ~]# quota -v myquota2 
Disk quotas for user myquota2 (uid 1003): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6       0   20480   40960               0      50     100        
      /dev/sdb1       0       0       0               0       0       0       

复制命令为eqquota -p user1 user2 user3
把user1的磁盘限额设置复制给user2,user3.
在这里要注意一点刚复制完后用quota user2是没法查看配额情况的,我们需要加上-v参数(显示该用户在所有挂入系统的储存设备的空间限制),或者切换到该用户到限额目录下创建个文件也能使用quota看到信息了。
3.查看磁盘配额报表情况

[[email protected] ~]# repquota -a

*** Report for user quotas on device /dev/sda6
Block grace time: 5days; Inode grace time: 06:00
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0       
myquota1  --       0   20480   40960              1    50   100       
myquota2  --       0   20480   40960              1    50   100       

*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      13       0       0              2     0     0  

4.关掉磁盘配额

[[email protected] ~]# quotaoff -a
[[email protected] ~]# repquota -a
*** Report for user quotas on device /dev/sda6
Block grace time: 5days; Inode grace time: 06:00
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0       
myquota1  --       0   20480   40960              1    50   100       
myquota2  --       0   20480   40960              1    50   100       

*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      13       0       0              2     0     0       

quotaoff -a 是关掉所有的磁盘配额
也可以在quotaoff后跟指定分区关掉指定分区配额。

以上是关于如何在linux服务器上配置磁盘的限额的主要内容,如果未能解决你的问题,请参考以下文章

linux磁盘限额配置:quota命令

Linux磁盘限额

Linux磁盘限额

linux:linux下面的磁盘限额有啥作用?谢谢

求寒冰老师的linux教程,有关磁盘限额的讲解

为Linux主机用户设定特定的磁盘空间大小——Ubuntu12.04配置磁盘限额实战配置