在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.
查看创建完成的磁盘信息
[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
/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
[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 关闭才好!
使用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 一个人的设定值给其他人。
开启配额功能:
[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 启动。
[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 限值。
[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,警告用户超过了配额限制。
[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天,这个是可以修改的。如下:
[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
可以一个一个的复制:
[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也符合这个条件,手动关闭它的限额。
http://linux.vbird.org/linux_basic/0420quota.php