Linux是一个多用户多任务的操作系统,在使用中可能会有几个人对服务器有操作,几个用户共同使用一个共享磁盘的情况,因为我们的硬盘是有限的,我们需要对用户的空间进行限制。这里使用磁盘配额,可以很方便的对用户的空间进行额度限制。



1:加入一块硬盘,分出一个主分区:



[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xa03faa82.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 
Using default value 2610
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa03faa82
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2610    20964793+  83  Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.


2.格式化分区并挂载

[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkdir /data   ##创建一个用户共享使用的目录
[root@localhost ~]# mount /dev/sdb1 /data/   ##将分区挂载到共享目录
[root@localhost ~]# mount    ##查看挂载情况
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdb1 on /data type ext4 (rw)



    写入到开机挂载里面

[root@localhost ~]# vi /etc/fstab 
[root@localhost ~]# tail -1 /etc/fstab
/dev/sdb1               /data                   ext4    defaults        0 0


3.重新挂载使文件目录支持磁盘配额:

[root@localhost ~]# mount -o remount,usrquota,grpquota /dev/sdb1
[root@localhost ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdb1 on /data type ext4 (rw,usrquota,grpquota)   ##再次查看分区挂载可以看到支持+磁盘配额


     同样使它开机挂载支持磁盘配额:

[root@localhost ~]# vi /etc/fstab 
[root@localhost ~]# tail -1 /etc/fstab
/dev/sdb1               /data                   ext4    defaults,usrquota,grpquota        0 0


3。下载磁盘配额软件:

[root@localhost ~]# yum -y install quota


4.生成磁盘配额的数据库文件:

[root@localhost ~]# quotacheck -ugvc /data/
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: Scanning /dev/sdb1 [/data] done
quotacheck: Cannot stat old user quota file /data/aquota.user: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old group quota file /data/aquota.group: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old user quota file /data/aquota.user: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old group quota file /data/aquota.group: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Checked 2 directories and 0 files
quotacheck: Old file not found.
quotacheck: Old file not found.

    查看生成的磁盘配置数据库文件

[root@localhost ~]# ls /data/
aquota.group  aquota.user  lost+found


5.新建需要限制的用户和组:

[root@localhost ~]# useradd u01   ##新建用户
[root@localhost ~]# useradd u02
[root@localhost ~]# echo "123123" |passwd --stdin u01
更改用户 u01 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo "123123" |passwd --stdin u02
更改用户 u02 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
[root@localhost ~]# groupadd g01    ##新建组
[root@localhost ~]# usermod -g g01 u01   ##将用户加入组
[root@localhost ~]# usermod -g g01 u02
[root@localhost ~]# id u01   ##确认用户信息
uid=500(u01) gid=502(g01) 组=502(g01)
[root@localhost ~]# id u02
uid=501(u02) gid=502(g01) 组=502(g01)


6.对用户进行额度配置:


             setauota   -u 用户 或(-g 组)  大小软限制 大小硬限制  数量软限制  数量硬限制  对哪个目录

                ##大小限制的单位是kb,软限制是当达到这个限制时,再创建文件或导入数据,会出现提示信息,不过还可以再往里面新建。当到达硬限制时,就真的无法创建了。

[root@localhost ~]# setquota -u u01 10000 15000 10 15 /data/

            


7.开启磁盘配额:    重启系统也可以

[root@localhost ~]# quotaon -a

 给所有人可写入权限即可,要在其他用户新建文件测试

[root@localhost ~]# chmod 777 /data/
[root@localhost ~]# su - u01   ##切换到u01
[u01@localhost ~]$ touch /data/{1..20}.mp3     ##新建20个文件
sdb1: warning, user file quota exceeded.     ##这个到达软限制,有提醒
sdb1: write failed, user file limit reached.     ##这个到达硬限制,提示写入错误
touch: 无法创建"/data/16.mp3": 超出磁盘限额
touch: 无法创建"/data/17.mp3": 超出磁盘限额
touch: 无法创建"/data/18.mp3": 超出磁盘限额
touch: 无法创建"/data/19.mp3": 超出磁盘限额
touch: 无法创建"/data/20.mp3": 超出磁盘限额


  最后查看目录,发现创建了15个文件,这个15是硬限制的设置

[u01@localhost ~]$ ls /data/         
10.mp3  12.mp3  14.mp3  1.mp3  3.mp3  5.mp3  7.mp3  9.mp3         aquota.user
11.mp3  13.mp3  15.mp3  2.mp3  4.mp3  6.mp3  8.mp3  aquota.group  lost+found
[u01@localhost ~]$ exit
logout

给组配置额度:

[root@localhost ~]# setquota -g g01 15000 20000 15 20 /data/


切换到u02测试:

[root@localhost ~]# su - u02
[u02@localhost ~]$ touch /data/{1..10}.txt
sdb1: write failed, group file limit reached.
touch: 无法创建"/data/6.txt": 超出磁盘限额
touch: 无法创建"/data/7.txt": 超出磁盘限额
touch: 无法创建"/data/8.txt": 超出磁盘限额
touch: 无法创建"/data/9.txt": 超出磁盘限额
touch: 无法创建"/data/10.txt": 超出磁盘限额


发现只创建了5个文件,就不能再创建了。因为刚才对组进行了限制20个数量的硬限制,而u01、u02都在g01组里面,u01的15个文件已经存在了,所以u02只能创建五个了。

[u02@localhost ~]$ ls /data/
10.mp3  12.mp3  14.mp3  1.mp3  2.mp3  3.mp3  4.mp3  5.mp3  6.mp3  8.mp3  aquota.group  lost+found
11.mp3  13.mp3  15.mp3  1.txt  2.txt  3.txt  4.txt  5.txt  7.mp3  9.mp3  aquota.user
[u02@localhost ~]$ exit
logout
[root@localhost ~]#