Linux添加硬盘并编辑配额

来源:互联网 发布:java计算10的阶乘 编辑:程序博客网 时间:2024/05/18 04:50

Linux添加硬盘并编辑配额

在vmware中实现给linux添加硬盘

实验环境:redhat 5.5 ,vmware workstation 8.0 

一、添加虚拟磁盘

给虚拟主机添加 一块磁盘,大小20.0G,重启以后登录:

[root@xml-ora1 u01]# fdisk -l

Disk /dev/hda: 500.1 GB,500105249280 bytes

255 heads, 63 sectors/track, 60801cylinders

Units = cylinders of 16065 * 512 = 8225280bytes

  Device Boot      Start         End      Blocks  Id  System

/dev/hda1               1       60801  488384001   83  Linux

 

Disk /dev/sda: 19.3 GB,19327352832 bytes

255 heads, 63 sectors/track, 2349 cylinders

Units = cylinders of 16065 * 512 = 8225280bytes

  Device Boot      Start         End      Blocks  Id  System

/dev/sda1  *           1         637    5116671   83  Linux

/dev/sda2             638         892    2048287+  83  Linux

/dev/sda3             893        1019    1020127+  83  Linux

/dev/sda4            1020        2349   10683225    5  Extended

/dev/sda5            1020        1146    1020096   83  Linux

/dev/sda6            1147        1273    1020096   82  Linux swap / Solaris

/dev/sda7            1274        2349    8642938+  83  Linux

 

Disk /dev/sdb: 21.4 GB,21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280bytes

  Device Boot      Start         End      Blocks  Id  System

 

上面会出现一块 /dev/sdb的磁盘,正是我们刚刚添加的磁盘。

二、创建分区

[root@xml-ora1 u01]# fdisk /dev/sdb

Device contains neither a valid DOSpartition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes willremain in memory only,

until you decide to write them. After that,of course, the previous

content won't be recoverable.

 

The number of cylinders for this disk isset to 2610.

There is nothing wrong with that, but thisis larger than 1024,

and could in certain setups cause problemswith:

1) software that runs at boot time (e.g.,old versions of LILO)

2) booting and partitioning software fromother OSs

   (e.g., DOS FDISK, OS/2 FDISK)

Warning: invalid flag 0x0000 of partitiontable 4 will be corrected by w(rite)

 

Command (m for help):_n_ ······输入n创建一个新的分区

Command action

   e   extended

   p   primarypartition (1-4)······ 一到四个主要分区

p  ······创建一个主要分区

Partition number (1-4): 1 ······创建一个新主分区,区号为1

First cylinder (1-2610, default 1): ___ ······柱面默认1

Using default value 1

Last cylinder or +size or +sizeM or +sizeK(1-2610, default 2610): +2G······指定分区大小,默认全盘

 

Command (m for help): w ······保存

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

三、格式化和mount分区

查看创建完成的磁盘信息

[root@xml-ora1 u01]# fdisk -l /dev/sdb

Disk /dev/sdb: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280bytes

  Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1         244    1959898+  83  Linux

 

[root@xml-ora1 u01]# mkfs.ext3 /dev/sdb1

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

245280 inodes, 489974 blocks

24498 blocks (5.00%) reserved for the superuser

First data block=0

Maximum filesystem blocks=503316480

15 block groups

32768 blocks per group, 32768 fragments pergroup

16352 inodes per group

Superblock backups stored on blocks:

       32768, 98304, 163840, 229376, 294912

 

Writing inode tables: done

Creating journal (8192 blocks): done

Writing superblocks and filesystemaccounting information: done

This filesystem will be automaticallychecked every 26 mounts or

180 days, whichever comes first.  Usetune2fs -c or -i to override.

 

创建一个目录,并且将分区挂载到该目录

[root@xml-ora1 u01]# mkdir /u01

[root@xml-ora1 u01]# mount /dev/sdb1 /u01

[root@xml-ora1 u01]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1             4.8G  1.3G 3.3G  28% /

/dev/sda7             1.9G   35M 1.8G   2% /u01

/dev/sda5             965M   18M 898M   2% /tmp

/dev/sda3             965M   43M 873M   5% /var

/dev/sda2             1.9G   36M 1.8G   2% /home

tmpfs                 502M     0 502M   0% /dev/shm

/dev/sdb1             1.9G   35M 1.8G   2% /u01

/dev/hda1             459G  417G  19G  96% /u02 

 

用户同样可以通过查看mtab来查看当前操作系统磁盘挂载情况

[root@xml-ora1 u01]# cat /etc/mtab

/dev/sda1 / ext3 rw 0 0

proc /proc proc rw 0 0

sysfs /sys sysfs rw 0 0

devpts /dev/pts devpts rw,gid=5,mode=620 00

/dev/sda7 /u01 ext3 rw 0 0

/dev/sda5 /tmp ext3 rw 0 0

/dev/sda3 /var ext3 rw 0 0

/dev/sda2 /home ext3 rw 0 0

tmpfs /dev/shm tmpfs rw 0 0

/dev/sdb1 /u01 ext3 rw,usrquota,grpquota 00

/dev/hda1 /u02 ext3 rw 0 0

none /proc/sys/fs/binfmt_misc binfmt_miscrw 0 0

sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefsrw 0 0 

四、fstab自动挂载

/etc/fstab文件每一行由空格分为六项,包括:

•    设备文件

•    挂载点

•    文件系统类型

•    mount参数:包含defaults和auto的行会在开机时自动被加载。

•    dump参数:0表示永不备份。1表示每天备份,2表示每两天备份一次,依次类推。

•    fsck顺序:0表示忽略。1、2、3表示检查顺序。一般1被根文件系统使用。网络文件系统与光驱软驱等设备应该被忽略。

 

[root@xml-ora1 u01]# vi /etc/fstab

LABEL=/                 /                       ext3    defaults        1 1

LABEL=/u01              /u01                    ext3    defaults        1 2

LABEL=/tmp              /tmp                    ext3    defaults        1 2

LABEL=/var              /var                    ext3    defaults        1 2

LABEL=/home             /home                 ext3    defaults        1 2

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults          0 0

proc                    /proc                   proc    defaults        0 0

LABEL=SWAP-sda6         swap                  swap    defaults        0 0

/dev/hda1               /u02                   ext3    defaults         00

/dev/sdb1              /u01                     ext3 defaults,usrquota,grpquota 0 0

 

添加以上最后一行信息,包括配额设置信息:

/dev/sdb1  /u01  ext3  defaults,usrquota,grpquota 0 0

 

使用remount指令将修改信息加载到/etc/mtab中

[root@xml-ora1 u01]#mount -o remount /u01

五、磁盘配额分配

1、quotacheck生成配额文件

[root@xml-ora1 u01]# quotacheck -auvg

quotacheck: Scanning /dev/sdb1 [/u01] done

quotacheck: Checked 4 directories and 4files

或者

[root@xml-ora1 u01]# quotacheck -uvg /u01

quotacheck: Scanning /dev/sdb1 [/u01] done

quotacheck: Checked 4 directories and 4files

这样就在文件系统的根目录下建立aquota.user及aquota.group两个文件,查看如下:

[root@xml-ora1 u01]# ll /u01/

total 36

drwxr-xr-x 2 oracle oinstall  4096 Aug 19 16:58 1

-rw------- 1 root   root     7168 Aug 20 15:53 aquota.group

-rw------- 1 root   root     7168 Aug 20 15:53 aquota.user

drwx------ 2 root   root    16384 Aug 19 16:17 lost+found

 

quotacheck [-gucfinvdmMR] [-F <quota-format>] filesystem|-a

参数说明:

-a :扫瞄所有在 /etc/mtab 里头已经 mount 的具有 quota 支持的磁盘

-u :扫瞄用户的档案与目录

-v :显示扫瞄过程

-g :扫瞄群组使用的档案与目录

说明:

这个指令主要的目的在扫瞄某一个磁盘的quota 空间,他会针对该磁盘进行扫瞄,并且,由于该磁盘若持续运作时,可能扫瞄的过程中,档案可能会增减,造成 quota 扫瞄的错误发生,因此,当使用 quotacheck 时,该磁盘将『自动被设定成为唯独磁区(read-only);至于扫瞄完毕之后,扫瞄所得的磁盘空间结果会写入该磁区最顶端(例如:在我的例子中,扫瞄 /home 这个 /dev/hda3 的磁区,如果是初次扫瞄,那么扫瞄完毕之后会产生 aquota.user 与 aquota.group ,会放置在 /home/aquota.xxx 底下!而如果是建立 quota 后的扫瞄,那么就会更新这两个档案!)另外, Linux 也特别强调 quota 在使用的时候,需要特别注意在 reboot 时,得先将 quota 关闭才好!

2、edquota编辑配额文件

使用edquota 用户名与edquota –g 组名编辑用户与组的磁盘限额

[root@xml-ora1 u01]# edquota oracle

Disk quotas for user oracle (uid 500):

Filesystem        blocks       soft       hard    inodes     soft     hard

/dev/sdb1        4           40          0        1       0        0

 

参数说明:

filesystem:开启配额的分区partition

blocks:   已经使用的块大小

soft:    软限制使用的大小,单位Kbytes (数值为 0 的时候,表示没有限制)

hard:     硬限制使用的大小(当软限制的大小到达后系统允许扩长,直到达硬限制数)

inodes:   当前用户在本文件系统中可创建的目录数

 

edquota(edit quota)

功能说明:编辑用户或群组的quota。

edquota: Usage:

 edquota [-u] [-x] [-F formatname] [-p username] [-f filesystem] username...

 edquota -g [-x] [-F formatname] [-p groupname] [-f filesystem] groupname...

 edquota [-u|g] [-x] [-F formatname] [-f filesystem] -t

 edquota [-u|g] [-x] [-F formatname] [-f filesystem] -Tusername|groupname ...

语  法:edquota [-p <源用户名称>][-ug][用户或群组名称...] 或 edquota [-ug] -t

补充说明:edquota预设会使用vi来编辑使用者或群组的quota设置。

参  数:

  -u   设置用户的quota,这是预设的参数。

  -g   设置群组的quota。

  -p  <源用户名称>  将源用户的quota设置套用至其他用户或群组。

  -t   设置宽限期限。(就是超过quota 值后,还能使用硬碟的宽限期限)

 - f  filesystem:这个是那个 partition 的意思

说明:

这个指令就是在编辑每一个『个人』或者是『群组』的 quota 数值!通常以 edquota -u username 或者是 edquota -g groupname 来编辑个人与群组的 quota 设定值。他支持直接 copy 一个人的设定值给其他人。

3、quotaon开启配额功能

开启配额功能:

[root@xml-ora1 u01]# quotaon -guv /u01

/dev/sdb1 [/u01]: group quotas turned on

/dev/sdb1 [/u01]: user quotas turned on

[root@xml-ora1 u01]# quotaon -guvp /u01

group quota on /u01 (/dev/sdb1) is on

user quota on /u01 (/dev/sdb1) is on

 

关闭配额功能:

[root@xml-ora1 u01]# quotaoff -guv /u01

/dev/sdb1 [/u01]: group quotas turned off

/dev/sdb1 [/u01]: user quotas turned off

[root@xml-ora1 u01]# quotaoff -guvp /u01

group quota on /u01 (/dev/sdb1) is off

user quota on /u01 (/dev/sdb1) is off

 

quotaon /quotaoff: Usage:

       quotaon /quotaoff [-guvp] [-F quotaformat] [-x state] -a

       quotaon /quotaoff [-guvp] [-F quotaformat] [-x state] filesystem

参数说明:

-a :全部的 quota 设定都启动(会自动去寻找/etc/mtab 的设定)

-u :使用者的 quota 启动

-g :群组的 quota 设定启动

-s :显示讯息

说明:这个指令是在启动 quota 的。由于这个指令是启动aquota.group 与 aquota.user 的,所以必须要先完成qutoacheck,然后才能进行quotaon -a 启动。

4、quota显示配额设置

[root@xml-ora1 u01]# quota -u oracle

Disk quotas for user oracle (uid 500):

    Filesystem  blocks   quota  limit   grace   files  quota   limit   grace

     /dev/sdb1     500*     40    500               3       3      0

 

quota: Usage: quota [-guqxvs] [-l | -Q][-i] [-F quotaformat]

       quota [-qxvs] [-l | -Q] [-i] [-F quotaformat] -u username ...

       quota [-qxvs] [-l | -Q] [-i] [-F quotaformat] -g groupname ...

参数说明:

-g :显示 group 群组配额设置

-u :显示 user用户配额设置

-v :显示 quota 的值

-s :选择 inod 或 硬碟空间来显示

说明:

这个指令仅是使用来显示(display)目前某个群组或者某个使用者的 quota 限值。

5、soft配额测试

[root@xml-ora1 u01]# pwd

/u01

[root@xml-ora1 u01]# ll /home/oracle/catoutw.log

-rw-r--r-- 1 oracle oinstall 202487Jun 28 15:04 /home/oracle/catoutw.log

[root@xml-ora1 u01]# cp /home/oracle/catoutw.log /u01/cp1.log

root@xml-ora1 u01]# ll

total 236

-rw------- 1 root root   7168 Aug 20 17:08 aquota.group

-rw------- 1 root root   7168 Aug 20 17:08 aquota.user

-rw-r--r-- 1 root root 202487 Aug 20 17:06 cp1.log

drwx------ 2 root root  16384 Aug 19 16:17 lost+found

 

切换到配额用户oracle:

[root@xml-ora1 u01]# su - oracle

[oracle@xml-ora1 ~]$ cd /u01

[oracle@xml-ora1 u01]$ ll

total 236

-rw------- 1 root root   7168 Aug 20 17:08 aquota.group

-rw------- 1 root root   7168 Aug 20 17:08 aquota.user

-rw-r--r-- 1 root root 202487 Aug 20 17:06cp1.log

drwx------ 2 root root  16384 Aug 19 16:17 lost+found

[oracle@xml-ora1 u01]$ cp /home/oracle/catoutw.log /u01/cp2.log

sdb1: warning, user block quota exceeded.

[oracle@xml-ora1 u01]$ ll

total 440

-rw------- 1 root   root      7168 Aug 20 17:11 aquota.group

-rw------- 1 root   root      7168 Aug 20 17:08 aquota.user

-rw-r--r-- 1 root   root    202487 Aug 20 17:06 cp1.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:11 cp2.log

drwx------ 2 root   root     16384 Aug 19 16:17 lost+found

[oracle@xml-ora1 u01]$ cp/home/oracle/catoutw.log /u01/cp3.log

[oracle@xml-ora1 u01]$ ll

total 440

-rw------- 1 root   root       7168 Aug 20 17:11 aquota.group

-rw------- 1 root   root      7168 Aug 20 17:08 aquota.user

-rw-r--r-- 1 root   root    202487 Aug 20 17:06 cp1.log

-rw-r--r-- 1 oracleoinstall 202487 Aug 20 17:11 cp2.log

-rw-r--r-- 1 oracleoinstall 202487 Aug 20 17:11 cp3.log

drwx------ 2 root   root     16384 Aug 19 16:17 lost+found

 

结论:软限制当超过时,不会马上阻止用户空间使用,因为硬限制设置为0,可以持续增长。但是会提示warning,警告用户超过了配额限制。

6、hard配额测试

[root@xml-ora1 u01]# edquota oracle

Disk quotas for user oracle (uid 500):

Filesystem        blocks       soft      hard     inodes     soft    hard

/dev/sdb1         408         40          500          2        3       0

[root@xml-ora1 u01]# su - oracle

[oracle@xml-ora1 ~]$ cp/home/oracle/catoutw.log /u01/cp4.log

sdb1: write failed, user block limit reached.

cp: writing `/u01/cp4.log': Disk quotaexceeded

[oracle@xml-ora1 u01]$ ll

total 736

-rw------- 1 root   root      7168 Aug 20 17:11 aquota.group

-rw------- 1 root   root      7168 Aug 20 17:08 aquota.user

-rw-r--r-- 1 root   root    202487 Aug 20 17:06 cp1.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:11 cp2.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:13 cp3.log

-rw-r--r-- 1 oracle oinstall 90112 Aug 20 17:46 cp4.log

drwx------ 2 root   root     16384 Aug 19 16:17 lost+found

         结论:这个时候会提示错误,说到达限制,无法继续执行cp命令,而目录下的文件的cp4.log仍然执行了部分拷贝,查看它的内容,文件被截断了,是部分数据位90K,而完整文件为2M

 

继续试验,如果不是用户创建的,是root将存在的文件属主更改为oracle的话,如何呢?

[root@xml-ora1 u01]# quota -s oracle

Disk quotas for user oracle (uid 500):

Filesystem blocks   quota   limit  grace   files   quota  limit   grace

/dev/sdb1     500*  40    500            3      3       0       

注意这里的grace为空

 

[root@xml-ora1 u01]#ll

total 736

-rw------- 1 root   root      7168 Aug 20 17:11 aquota.group

-rw------- 1 root   root      7168 Aug 20 17:08 aquota.user

-rw-r--r-- 1 root  root     202487 Aug 20 17:06cp1.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:11 cp2.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:13 cp3.log

-rw-r--r-- 1 oracle oinstall  90112 Aug 20 17:46 cp4.log

drwx------ 2 root   root     16384 Aug 19 16:17 lost+found

 

[root@xml-ora1 u01]# chown oracle.oinstallcp1.log

[root@xml-ora1 u01]# ll

total 736

-rw------- 1 root   root      7168 Aug 20 17:11 aquota.group

-rw------- 1 root   root      7168 Aug 20 17:08 aquota.user

-rw-r--r-- 1 oracle oinstall 202487 Aug 20 17:06 cp1.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:11 cp2.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:13 cp3.log

-rw-r--r-- 1 oracle oinstall  90112 Aug 20 17:46 cp4.log

drwx------ 2 root   root     16384 Aug 19 16:17 lost+found

[root@xml-ora1 u01]# quota -s oracle

Disk quotas for user oracle (uid 500):

Filesystem blocks   quota   limit  grace   files   quota  limit   grace

/dev/sdb1  704*     40     500          4*      3      0   7days

注意这里的grace为7days,说明宽限期为7天,这个是可以修改的。如下:

7、修改软限额期限

[root@xml-ora1 u01]# edquota -t

Grace period before enforcing soft limitsfor users:

Time units may be: days, hours, minutes, orseconds

Filesystem            Block grace period     Inode grace period

/dev/sdb1                            7days                 7days

默认为7天,修改为希望的值,比如3

[root@xml-ora1 u01]# edquota -t

Grace period before enforcing soft limitsfor users:

Time units may be: days, hours, minutes, orseconds

 Filesystem             Block graceperiod     Inode grace period

 /dev/sdb1                    3days                  3days

8、复制配额到其他用户

可以一个一个的复制:

[root@xml-ora1 u01]# quota nobody

Disk quotas for user nobody (uid 99): none

[root@xml-ora1 u01]# edquota -p oracle nobody

[root@xml-ora1 u01]# chown nobody.nobodycp1.log

[root@xml-ora1 u01]# ll

total 740

-rw------- 1 root   root      7168 Aug 20 18:42 aquota.group

-rw------- 1 root   root     10240 Aug 20 18:42 aquota.user

-rw-r--r-- 1 nobody nobody   202487 Aug 20 17:06 cp1.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:11 cp2.log

-rw-r--r-- 1 oracle oinstall 202487 Aug 2017:13 cp3.log

-rw-r--r-- 1 oracle oinstall  90112 Aug 20 17:46 cp4.log

drwx------ 2 root   root     16384 Aug 19 16:17 lost+found

[root@xml-ora1 u01]# quota nobody

Disk quotas for user nobody (uid 99):

Filesystem blocks   quota   limit  grace   files   quota  limit   grace

/dev/sdb1  204*     40     500  3days       1       3      0       

 

使用awk命令来批处理:

edquota -p test `awk -F: '$3 > 499 {print $1}' /etc/passwd`

复制到uid大于499的所有用户,我的系统上有一个用户nfsnobody也符合这个条件,手动关闭它的限额。

9、后续扩展

http://linux.vbird.org/linux_basic/0420quota.php