Linux学习笔记12—磁盘管理

一、查看磁盘或目录的容量

1、  df命令

作用:查看已挂载磁盘的总容量、使用容量、剩余容量等,可以不加任何参数,默认是按k为单位显示的

参数:

-I : 查看inodes使用状况

-h: 使用合适的单位显示,例如 ‘G’

-k: 以K 为单位显示

-m: 以 M 为单位显示

注意:/dev/shm为内存挂载点,如果你想把文件放到内存里,就可以放到/dev/shm/目录下

2、  du命令

作用:用来查看某个目录或文件所占空间大小.

格式:du [-abckmsh] [文件或者目录名] 常用的参数有:

-a: 全部文件与目录大小都列出来; 如果不加任何选项和参数只列出目录(包含子目录)大小。

如果du不指定单位的话,默认显示单位为K.

“-b” 列出的值以bytes为单位输出。

“-k” 以KB为单位输出,和默认不加任何选项的输出值是一样的。

“-m” 以MB为单位输出

“-h” 系统自动调节单位,例如文件太小可能就几K,那么就以K为单位显示,如果大到几G,则就以G为单位显示。

“-c” 最后加总,最后显示文件的总用量。

“-s” 只列出总和,不显示具体的详细信息。

3、  fdisk命令

作用:是Linux下硬盘的分区工具,只能划分小于2T的分区。

格式:fdisk [-l ] [设备名称] 选项只有一个。

“-l” 后边不跟设备名会直接列出系统中所有的磁盘设备以及分区表,加上设备名会列出该设备的分区表。

注意:

“fdisk” 如果不加 “-l” 则进入另一个模式,在该模式下,可以对磁盘进行分区操作。

分区常用的几个选项:

‘m’ 会列出常用的命令:

“p” 打印当前磁盘的分区情况。

‘n’ 建立一个新的分区。

‘w’ 保存操作。

‘q’ 退出。

‘d’ 删除一个分区

(在linux中最多只能创建4个主分区,那如果你想多创建几个分区如何做?很容易,在创建完第三个分区后,创建第四个分区时选择扩展分区。)这时候再分区和以前有区别了,不再选择是主分区还是扩展分区了,而是直接定义大小。当分完三个主分区后,第四个扩展分区需要把剩余的磁盘空间全部划分给扩展分区,不然的话剩余的空间会浪费,因为分完扩展分区后,再划分新的分区时是在已经划分的扩展分区里来分的)

如果把第一个分区分为扩展分区,并且把全部空间都分给扩展分区的话,再继续分区的话,会提示的分区类型为主分区还是逻辑分区(logical), 用 ‘l’ 表示逻辑分区,逻辑分区的id是从5开始的,因为前四个id为主分区或者扩展分区。

二、格式化磁盘分区

1、 mke2fs, mkfs.ext2, mkfs.ext3, mkfs.ext4
这几个命令的作用都一样。
mke2fs 常用选项
‘-b’ 分区时设定每个数据区块占用空间大小,目前支持1024, 2048 以及4096 bytes每个块。如果超过4096则设备不能正常挂载。
‘-i’ 设定inode的大小
‘-N’ 设定inode数量,有时使用默认的inode数不够用,所以要自定设定inode数量。
‘-c’ 在格式化前先检测一下磁盘是否有问题,加上这个选项后会非常慢
‘-L’ 预设该分区的标签label
‘-j’ 建立ext3格式的分区,如果使用mkfs.ext3 就不用加这个选项了
‘-t’ 用来指定什么类型的文件系统,可以是ext2, ext3 也可以是 ext4.
例如:
Mke2fs –t ext4 /dev/sda1等价于mkfs.ext4 /dev/sda1
2、 e2label 命令
作用:用来查看或修改分区的标签

三、磁盘的挂载/卸载

在挂载某个分区前需要先建立一个挂载点,这个挂载点是以目录的形式出现的。一旦把某一个分区挂载到了这个挂载点(目录)下,那么再往这个目录写数据使,则都会写到该分区中。这就需要你注意一下,在挂载该分区前,挂载点(目录)下必须是个空目录。其实目录不为空并不影响所挂载分区的使用,但是一旦挂载上了,那么该目录下以前的东西就不能看到了。只有卸载掉该分区后才能看到。

1、  mount 命令

格式:mount 选项 挂载的硬盘  挂载位置

作用:如果什么都不加则可以查看当前系统已经挂载的所有分区,以及分区文件系统的类型,挂载点和一些选项等信息,所以你如果想知道某个分区的文件系统类型直接用该命令查看即可

常用选项:

-a: 把/etc/fstab中出现的所有磁盘分区挂载上

-t: 选项用来指定挂载的分区类型,默认不指定会自动识别

-o: 选项用来指定挂载的分区有哪些特性,即 “/etc/fatab” 配置文件中第四列的那些选项

2、/etc/fstab

Linux学习笔记12—磁盘管理

1、  该文件是系统启动时需要挂载的各个分区。第一列就是分区的标识,可以写成分区LABEL/分区的UUID/分区名;第二列是挂载点;第三列是分区格式;第四列是mount的一些挂载参数,一般情况下,直接写defaults即可;第五列数字表示是否被dump备份,是的话这里就是1,否则就是0;第六列是开机时是否自检磁盘。1,2都表示检测,0表示不检测,在Redhat/CentOS中,这个1,2还有个说法,/ 分区必须设为1,而且整个fstab中只允许出现一个1,这里有一个优先级的说法。1比2优先级高,所以先检测1,然后再检测2,如果有多个分区需要开机检测那么都设置成2吧,1检测完了后会同时去检测2。

2、  第四列常用参数介绍

“auto/noauto” : 开机自动挂载/不自动挂载;

“default” : 按照大多数永久文件系统的缺省值设置挂载定义,它包含了rw, suid, dev, exec, auto, nouser, async

“ro” : 按只读权限挂载 ;

“rw” : 按可读可写权限挂载 ;

“exec/noexec” : 允许/不允许可执行文件执行,但千万不要把根分区挂载为noexec,那就无法使用系统了,连mount命令都无法使用了,这时只有重新做系统了;

“user/nouser” : 允许/不允许root外的其他用户挂载分区,为了安全考虑,请用nouser ;

“suid/nosuid” : 允许/不允许分区有suid属性,一般设置nosuid ;

“usrquota” : 启动使用者磁盘配额模式,磁盘配额相关内容在后续章节会做介绍;

“grquota” : 启动群组磁盘配额模式;

3、  blkid 命令

作用:获取各分区的UUID:

通过UUID或者LABEL 挂载磁盘分区;这样可以避免因为硬盘拆下之后在重新接入而接入错误的位置的时候出现的问题

如果想让某个分区开机后就自动挂载,有两个办法可以实现:

u  在 /etc/fstab 中添加一行;

u  把挂载命令写到 /etc/rc.d/rc.local 文件中去,阿铭会经常把想要开机启动的命令加到这个文件中。系统启动完后会执行这个文件中的命令,所以只要你想开机后运行什么命令统统写入到这个文件下面吧,直接放到最后面即可,阿铭把挂载的命令放到该文件的最后一行了:

4、  umonut 命令

作用:卸载挂载的磁盘

注意:后边可以跟挂载点,也可以跟分区名(/dev/hdb1), 但是不可以跟LABEL和UUID.

如果卸载的时候是在当前目录下是不能卸载成功的,但是加上参数 –l  之后就可以卸载成功;或者切换到其他的目录也可以卸载成功

四、建立一个swap文件增加虚拟内存

基本的思路就是:建立swapfile -> 格式化为swap格式 -> 启用该虚拟磁盘。

1、打开终端,切换到root用户,输入:free -m查看内存状态

[root@lxt lxt]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:

2、输入df -B M(或df -m)查看各分区当前使用情况

[root@lxt lxt]# df -B M
文件系统 1M-块 已用 可用 已用% 挂载点
/dev/mapper/vg_lxt-lv_root
12875M 4059M 8162M % /
/dev/sda7 194M 14M 170M % /boot
tmpfs 250M 1M 249M % /dev/shm
(fdisk -l可查看磁盘分区情况)

3、选择一个较大的分区,建立分区文件:

[root@lxt lxt]# dd if=/dev/zero of=/swapadd bs= count=
+ records in
+ records out
bytes ( MB) copied,13.0709 秒,41.1 MB/秒

以上命令在根目录新建一个名为swapadd,大小为512M的虚拟内存文件;if 指定指定源,基本上除了 “/dev/zero” 外基本上不会写别的,而/dev/zero 是UNIX系统特有的一个文件,它可以提供源源不断的 “0”;“of” 指定目标文件, “bs” 定义块的大小, “count” 定义块的数量,这两个参数的多少决定了目标文件的大小,目标文件大小 = bs x count.

4、移动该文件到空间较大的其他分区:

[root@lxt lxt]# mkdir /mnt/swap
[root@lxt /]# mv swapadd /mnt/swap

5、执行以下命令启用虚拟内存并重启电脑

[root@lxt /]# mkswap /mnt/swap/swapadd
Setting up swapspace version , size = KiB
no label, UUID=a5c8b651-6f64--bb5f-580b742acfce
[root@lxt /]# swapon /mnt/swap/swapadd

查看内存:

[root@lxt /]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:

6、如果不需要使用新增的虚拟内存,则输入:
swapoff -v /mnt/swap/swapadd

五、磁盘配额

磁盘配合其实就是给每个用户分配一定的磁盘额度,只允许他使用这个额度范围内的磁盘空间。在linux系统中,是多用户多任务的环境,所以会有很多人共用一个磁盘的情况。针对每个用户去限定一定量的磁盘空间是有必要的,这样才显得公平。随着硬件成本的降低,服务器上的磁盘资源似乎不再刻意的去限制了,所以磁盘配额也就可有可无了,但是你也需要了解一下这部分内容,用到时必须会操作。
在linux中,用来管理磁盘配额的东西就是quota了。如果你的linux上没有quota,则需要你安装这个软件包 quota-3.13-5.el5.RPM (其实版本是多少无所谓了,关键是这个软件包)。quota在实际应用中是针对整个分区进行限制的。比如,如果我们限制了/dev/sdb1这个分区,而/dev/sdb1 是挂载在/home 目录下的,那么/home 所有目录都会受到限制。
quota 这个模块主要分为quota quotacheck quotaoff quotaon quotastats edquota setquota warnquota repquota这几个命令,下面就分别介绍这些命令。
命令 : quota
“quota” 用来显示某个组或者某个使用者的限额。
语法:quota [-guvs] [user,group]
“-g” 显示某个组的限额
“-u” 显示某个用户的限额
“-v” 显示的意思
“-s” 选择inod或硬盘空间来显示
命令 : quotacheck
“quotacheck” 用来扫描某一个磁盘的quota空间。
语法:quotacheck [-auvg] /path
“-a” 扫描所有已经mount的具有quota支持的磁盘
“-u” 扫描某个使用者的文件以及目录
“-g” 扫描某个组的文件以及目录
“-v” 显示扫描过程
“-m” 强制进行扫描
命令 : edquota
“edquota” 用来编辑某个用户或者组的quota值。
语法:edquota [-u user] [-g group] [-t]
“-u” 编辑某个用户的quota
“-g” 编辑某个组的quota
“-t” 编辑宽限时间
“-p” 拷贝某个用户或组的quota到另一个用户或组
当运行 edquota -u user 时,系统会打开一个文件,你会看到这个文件中有7列,它们分别代表的含义是:
“Filesystem” 磁盘分区,如/dev/sdb5
“blocks” 当前用户在当前的Filesystem中所占用的磁盘容量,单位是Kb。该值请不要修改。
“soft/hard” 当前用户在该Filesystem内的quota值,soft指的是最低限额,可以超过这个值,但必须要在宽限时间内将磁盘容量降低到这个值以下。hard指的是最高限额,即不能超过这个值。当用户的磁盘使用量高于soft值时,系统会警告用户,提示其要在宽限时间内把使用空间降低到soft值之下。
“inodes” 目前使用掉的inode的状态,不用修改。
命令 : quotaon
“quotaon” 用来启动quota,在编辑好quota后,需要启动才能是quota生效
语法:quotaon [-a] [-uvg directory]
“-a” 全部设定的quota启动
“-u” 启动某个用户的quota
“-g” 启动某个组的quota
“-s” 显示相关信息
命令 : quotaoff
“quotaoff” 用来关闭quota, 该命令常用只有一种情况 quotaoff -a 关闭全部的quota.
以上讲了很多quota的相关命令,那么接下来阿铭教你如何在实践应用中去做这个磁盘配额。整个执行过程如下:
首先先确认一下,你的/home目录是不是单独的挂载在一个分区下,用df 查看即可。如果不是则需要你跟我一起做。否则这一步即可省略。

Linux学习笔记12—磁盘管理

/home并没有单独占用一个分区。所以需要把/home目录挂载在一个单独的分区下,因为quota是针对分区来限额的。下面阿铭把 /dev/sdb5 挂载到/home 目录下, 编辑 /etc/fstab 把刚才添加的那行修改为:

Linux学习笔记12—磁盘管理

保存 /etc/fstab 后,运行 mount -a 命令挂载全部的分区。

Linux学习笔记12—磁盘管理

Linux学习笔记12—磁盘管理

此时的 /home 为一个单独分区了。

1.建立测试账户

首先建立一个test用户,则同时建立了一个test组。其中uid和gid都为511 ,然后又建立一个test1账号,使其加入test组,查看/etc/passwd文件发现test和test1用户的gid都为511.

[root@localhost ~]# useradd test
[root@localhost ~]# grep test /etc/passwd
test:x::::/home/test:/bin/bash
[root@localhost ~]# useradd -g test1
[root@localhost ~]# grep test1 /etc/passwd
test1:x::::/home/test1:/bin/bash

2.打开磁盘的quota功能

默认linux并没有对任何分区做quota的支持,所以需要我们手动打开磁盘的quota功能,你是否记得,在前面内容中分析/etc/fstab文件的第四列时讲过这个quota选项(usrquota, grpquota),没错,要想打开这个磁盘的quota支持就是需要修改这个第四列的。用vi编辑/etc/fstab 编辑刚才加的那一行,如下:

UUID=c61117ca--4d0b-be4d-1b0f434359a7     /home        ext4    defaults,usrquota,grpquota      

保存 /etc/fstab 后,重新挂载/home分区。

[root@localhost ~]# umount /home/
[root@localhost ~]# mount -a
[root@localhost ~]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=,mode=)
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/sdb5 on /home type ext4 (rw,usrquota,grpquota)

使用 mount 命令可以查看到 /home 分区已经加上了 “usrquota,grpquota” 两个配额相关的参数。

3.扫描磁盘的使用者使用状况,并产生重要的aquota.group与aquota.user

这一步就需要用到quotacheck了,aquota.group与aqouta.user分别是组以及用户磁盘配额需要的配置文件。如果没有这两个文件,则磁盘配额是不会生效的。

[root@localhost ~]# quotacheck -augv

可能会有一些错误信息,不要管它。看一看你的/home分区下是否多了两个文件(aquota.group, aquota.user)

[root@localhost ~]# ll /home/
总用量
-rw------- root root 5月 : aquota.group
-rw------- root root 5月 : aquota.user
drwxr-xr-x root root 5月 : dir1
drwx------ root root 5月 : lost+found
drwx------ test test 5月 : test
drwx------ test1 test 5月 : test1

如果有了,则可以进入下一步了。

4.启动quota配额

[root@localhost ~]# quotaon -av
/dev/sdb5 [/home]: group quotas turned on
/dev/sdb5 [/home]: user quotas turned on

5. 编辑用户磁盘配额

先来设定test账户的配额,然后直接把test的配额拷贝给test1即可。这里就需要用到edquota了。

[root@localhost ~]# edquota -u test

将下面内容

/dev/sdb5                                                                      

修改为:

/dev/sdb5                                                                      

其中单位是Kb,所以soft 值大约为20Mb,hard值为30Mb,保存这个文件,保存的方式跟vi一个文件的方式一样的。下面将test的配额复制给test1.

[root@localhost ~]# edquota -p test test1

下面继续设定宽限时间:

[root@localhost ~]# edquota -t

将7days 改为 1days

/dev/sdb5                     1days                  1days

下面查看一下test以及test1用户的配额吧。

[root@localhost ~]# quota -uv test test1
Disk quotas for user test (uid ):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb5
Disk quotas for user test1 (uid ):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb5

6.编辑组磁盘配额

[root@localhost ~]# edquota -g test

修改为:.

/dev/sdb5                                                                     

设定组test的soft配额值为40M,hard值为50M。下面查看组test的配额。

[root@localhost ~]# quota -gv test
Disk quotas for group test (gid ):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb5

7.设定开机启动

前面已经讲到启动磁盘配额的命令是 quotaon -aug 所以要想开机启动,只需将这条命令加入到 /etc/rc.d/rc.local文件即可。

[root@localhost ~]# echo "quotaon -aug" >> /etc/rc.d/rc.local

参考文档:

http://www.apelearn.com/study_v2/


上一篇:二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨


下一篇:FTP的主动模式和被动模式