Linux学习教程(第十一章 Linux高级文件系统管理)一

第十一章 Linux高级文件系统管理(一)

本章我们将学习高级文件系统管理,主要包括磁盘配额、 LVM (逻辑卷管理)和RAID (磁盘阵列)。其中:

  1. 磁盘配额用来限制普通用户在分区中可以使用的容量和文件个数;

  2. LVM 可以在不停机和不损失数据的情况下修改分区大小;

  3. RAID 由几块硬盘或分区组成,拥有数据冗余功能,当其中的某块硬盘或分区损坏时,硬盘或分区中保存的数据不会丟失。

一、磁盘配额是什么

磁盘配额(Quota)就是 Linux 系统中用来限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数的。

在此概念中,有以下几个重点需要注意:

  1. 磁盘配额限制的用户和用户组,只能是普通用户和用户组,也就是说超级用户 root 是不能做磁盘配额的;
  2. 磁盘配额限制只能针对分区,而不能针对某个目录,换句话说,磁盘配额仅能针对文件系统进行限制,举个例子,如果你的 /dev/sda5 是挂载在 /home 底下,那么,在 /home 下的所有目录都会受到磁盘配额的限制;
  3. 我们可以限制用户占用的磁盘容量大小(block),当然也能限制用户允许占用的文件个数(inode)。

磁盘配额在实际生活中其实是很常见的,比如,我们的邮箱不管多大,都是有限制的,而不可能无限制地存储邮件;我们可以上传文件的服务器也是有容量限制的;网页中的个人空间也不可能让我们无限制地使用。

磁盘配额就好像我们出租写字楼,虽然整栋楼的空间非常大,但是酬整栋楼的成本太高。我们可以分开出租,用户如果觉得不够用,则还可以租用更大的空间。不过租用是不能随便进行的,其中有几个规矩必须遵守:

  • 我的楼是租给外来用户的(普通用户),可以租给一个人(用户),也可以租给一家公司(用户 组),但是这栋楼的所有权是我的,所以不能租给我自己(root 用户);
  • 如果要租用,则只能在每层租用一定大小的空间,而不能在一个房间中再划分出子空间来租用(配额只能针对分区,而不能限制某个目录);
  • 租户可以决定在某层租用多大的空间(磁盘容量限制),也可以在某层租用几个人员名额,这样只有这几个人员才能进入本层(文件个数限制)。

磁盘配额要想正常使用,有以下几个前提条件:

  1. 内核必须支持磁盘配额。Centos 6.x 版本的 Linux 默认支持磁盘配额,不需要做任何修改。如果不放心,则可以查看内核配置文件,看是否支持磁盘配额。命令如下:

    [root@localhost ~]# grep CONFIG_QUOTA /boot/corrfig-2.6.32-279.el6.i686
    CONFIG_QUOTA=y
    CONFIG_QUOTA_NETLINK_INTERFACE=y
    # CONFIG_QUOTA_DEBUG is not set
    CONFIG_QUOTA_TREE=y
    CONFIG_QUOTACTL=y

    可以看到,内核已经支持磁盘配额。如果内核不支持,就需要重新编译内核,加入 quota supper 功能。
  2. 系统中必须安装了 Quota 工具。我们的 Linux 中默认安装了 Quoted 工具,查看命令如下:

    [root@localhost ~]# rpm -qa | grep quota
    quota-3.17-16.el6.i686

  3. 要支持磁盘配额的分区必须开启磁盘配额功能。这项功能可以手动开启,不再是默认开启的。

磁盘配额可用于限制每个人可用网页空间、邮件空间以及网络硬盘空间的容量。除此之外,在 Linux 系统资源配置方面,使用磁盘配额,还可以限制某一群组或某一使用者所能使用的最大磁盘配额,以及以 Link 的方式,来使邮件可以作为限制的配额(更改 /var/spool/mail 这个路径)。

1、磁盘配额中的常见概念

(1)用户配额和组配额

用户配额是指针对用户个人的配额,而组配额是指针对整个用户组的配额。如果我们需要限制的用户数量并不多,则可以给每个用户单独指定配额。如果用户比较多,那么单独限制太过麻烦,这时我们可以把用户加入某个用户组,然后给组指定配额,就会简单得多。

需要注意的是,组中的用户是共享空间或文件数的。也就是说,如果用户 lamp1、lamp2 和 lamp3 都属于 brother 用户组,我给 brother 用户组分配 100MB 的磁盘空间,那么,这三个用户不是平均分配这 100MB 空间的,而是先到先得,谁先占用,谁就有可能占满这 100MB 空间,后来的就没有空间可用了。

(2)磁盘容量限制和文件个数限制

我们除了可以通过限制用户可用的 block 数量来限制用户可用的磁盘容量,也可以通过限制用户可用的 inode 数量来限制用户可以上传或新建的文件个数。

(3)软限制和硬限制

软限制可理解为警告限制,硬限制就是真正的限制了。比如,规定软限制为 100MB,硬限制为 200MB,那么,当用户使用的磁盘空间为 100~200MB 时,用户还可以继续上传和新建文件,但是每次登录时都会收到一条警告消息,告诉用户磁盘将满。

(4)宽限时间

如果用户的空间占用数处于软限制和硬限制之间,那么系统会在用户登录时警告用户磁盘将满,但是这个警告不会一直进行,而是有时间限制的,这个时间就是宽限时间,默认是 7 天。

如果到达宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。也就是说,如果软限制是 100MB,硬限制是 200MB,宽限时间是 7天,此时用户占用了 120MB,那么今后 7 天用户每次登录时都会出现磁盘将满的警告,如果用户置之不理,7 天后这个用户的硬限制就会变成 100MB,而不是 200MB 了。

二、磁盘配额启动的前期准备准备

磁盘配额启动的前期准备(设置挂载参数usrquota和grpquota)

前面我们已经谈到,使用磁盘配额的前提,是必须要内核以及文件系统支持才行,这里假设大家使用的就是支持磁盘配额的内核,那么接下来就是要配置文件系统,使其支持配额限制。

由于 Quota 仅针对文件系统进行限制,因此我们有必要查一下,/home 是否是独立的文件系统,执行命令如下:

[root@localhost ~]# df -h /home
Filesystem     Size  Used Avail Use% Mounted on
/dev/hda3      4.8G  740M  3.8G  17% /home  <-- /home 确实是独立的!

可以看到,/home 确实是独立的文件系统,因此可以直接对其进行限制。但如果读者所用系统中,/home 不是独立的文件系统,则可能就要针对根目录做磁盘配额了,但不建议大家这样做。

另外,由于 VFAT 文件系统并不支持磁盘配额功能,因此,这里需要查看 /home 的文件系统,执行命令如下:

[root@localhost ~]# mount | grep home
/dev/hda3 on /home type ext3 (rw)

显然,/home 的文件系统为 ext3,是支持磁盘配额的。

在此基础上,如果想要获得文件系统的支持,还需要为执行的文件系统添加挂载参数,分别是 usrquota(启用用户限额)和 grpquota(启动用户组限额),添加的方式有以下 2 种:

  1. 如果只是想在本次启动中试验磁盘配额,则只需使用如下的方式手动添加挂载参数:

    [root@localhost ~]# mount -o remount,usrquota,grpquota /home
    [root@localhost ~]# mount | grep home
    /dev/hda3 on /home type ext3 (rw,usrquota,grpquota)

  2. 手动添加的方式,会在下次重新挂载时消失,因此我们可以直接修改 /etc/fstab 文件,将挂载参数写入到配置文件中,这样,即便重新挂载也不会消失,执行命令如下:

    [root@www ~]# vi /etc/fstab
    ......
    LABEL=/home   /home  ext3   defaults,usrquota,grpquota  1 2
    [root@www ~]# umount /home
    [root@www ~]# mount -a
    [root@www ~]# mount | grep home
    /dev/hda3 on /home type ext3 (rw,usrquota,grpquota)

    注意,修改完 /etc/fatab 文件后,务必要亲自测试一下,有问题赶紧处理,因为此文件修改错误,将直接导致系统无法启动。

由此,我们就成功启用了文件系统对磁盘配额的支持,但此时还是不能立即使用磁盘配额,还需进一步检测相应的文件系统,并建立磁盘配额文件,这就需要使用 quotacheck 命令。

三、Linux 扫描文件系统并建立磁盘配额记录文件(quotacheck命令)

Linux quotacheck命令:扫描文件系统并建立Quota记录文件

其实,磁盘配额(Quota)就是通过分析整个文件系统中每个用户和群组拥有的文件总数和总容量,再将这些数据记录在文件系统中的最顶层目录中,然后在此记录文件中使用各个用户和群组的配额限制值去规范磁盘使用量的。因此,建立 Quota 的记录文件是非常有必要的。

扫描文件系统(必须含有挂载参数 usrquota 和 grpquota)并建立 Quota 记录文件,可以使用 quotacheck 命令。此命令的基本格式为:

[root@localhost ~]# quotacheck [-avugfM] 文件系统

表 1 罗列出了此命令常用的选项以及各自的功能。

表 1 quotacheck命令常用选项及功能

选项功能
-a扫瞄所有在 /etc/mtab 中,含有 quota 支持的 filesystem,加上此参数后,后边的文件系统可以不写;
-u针对使用者扫瞄文件与目录的使用情况,会创建 aquota.user
-g针对群组扫瞄文件与目录的使用情况,会创建 aquota.group
-v显示扫瞄的详细过程;
-f强制扫瞄文件系统,并写入新的 quota 记录文件
-M(大写)强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用。

在使用这些选项时,读者只需一起下达 -avug 即可。至于 -f 和 -M 选项,是在文件系统以启动 quota 的情况下,还要重新扫描文件系统(担心有其他用户在使用 quota 中),才需要使用这两个选项。

例如,我们可以使用如下的命令,对整个系统中含有挂载参数(usrquota 和 grpquota)的文件系统进行扫描:

[root@localhost ~]# quotacheck -avug
quotacheck: Scanning /dev/hda3 [/home] quotacheck: Cannot stat old user quota
file: No such file or directory <--有找到文件系统,但尚未制作记录文件!
quotacheck: Cannot stat old group quota file: No such file or directory
quotacheck: Cannot stat old user quota file: No such file or directory
quotacheck: Cannot stat old group quota file: No such file or directory
done  <--上面三个错误只是说明记录文件尚未创建而已,可以忽略不理!
quotacheck: Checked 130 directories and 107 files <--实际搜寻结果
quotacheck: Old file not found.
quotacheck: Old file not found.
# 若运行这个命令却出现如下的错误信息,表示你没有任何文件系统有启动 quota 支持!
# quotacheck: Can't find filesystem to check or filesystem not mounted with quota option.

[root@localhost ~]# ll -d /home/a*
-rw------- 1 root root 8192 Mar  6 11:58 /home/aquota.group
-rw------- 1 root root 9216 Mar  6 11:58 /home/aquota.user
# 可以看到,扫描的同时,会创建两个记录文件,放在 /home 底下

需要注意的是,此命令不要反复的执行,因为若启动 Quota 后还执行此命令,会破坏原有的记录文件,同时产生一些错误信息。

通过执行 quotacheck 命令,就可以成功创建支持配额的记录文件,读者不要去手动编辑这两个文件,一方面,这两个文件是 Quota 自己的数据文件,并不是纯文本文件;并且在你对该文件系统进行操作时,操作的结果会同步到这两个文件中,因此文件中的数据会发生变化。

通过本节的学习,读者只需要知道,要启动 Quota,需创建两个记录文件,分别为 aquota.group 和 aquota.user,而创建的工作,不是手动编辑的,需要使用 quotacheck 命令。

四、Linux 开启磁盘配额限制(quotaon命令)

Linux quotaon命令:开启磁盘配额限制

通过前面章节的学习,我们已经使用 quotacheck 命令创建好了磁盘配额(Quota)的记录文件,接下来就可以启动 Quota 了,启动方法也很简单,直接使用 quotaon 命令即可。

quotaon 命令的功能就是启动 Quota 服务,此命令的基本格式为:

[root@localhost ~]# quotaon [-avug]
[root@localhost ~]# quotaon [-vug] 文件系统名称

表 1 罗列了此命令常用的选项及各自的功能。

表 1 quotaon 命令常用选项及功能

选项功能
-a根据 /etc/mtab 文件中对文件系统的配置,启动相关的Quota服务,如果不使用 -a 选项,则此命令后面就需要明确写上特定的文件系统名称
-u针对用户启动 Quota(根据记录文件 aquota.user)
-g针对群组启动 Quota(根据记录文件 aquota.group)
-v显示启动服务过程的详细信息

需要注意的是,quotaon -auvg 命令只需要在第一次启动 Quota 服务时才需要进行,因为下次重新启动系统时,系统的 /etc/rc.d/rc.sysinit 初始化脚本会自动下达这个命令。

【例 1】如果要同时启动针对用户和群组的 Quota 服务,可以使用如下命令:

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

【例 2】如果只针对用户启动 /var 的 Quota 支持,可以使用如下命令:

[root@localhost ~]# quotaon -uv /var

五、Linux 关闭磁盘配额限制(quotaoff命令)

Linux quotaoff命令:关闭磁盘配额限制

磁盘配额(Quota)服务既然能使用 quotaon 命令手动开启,那么自然也能手动关闭,使用 quotaoff 命令即可。

quotaoff 命令的功能就是关闭 Quota 服务,此命令的基本格式同 quotaon 命令一样,如下所示:

[root@localhost ~]# quotaoff [-avug]
[root@localhost ~]# quotaoff [-vug] 文件系统名称

表 1 罗列了此命令常用的选项及各自的功能。

quotaoff 命令常用选项及功能

选项功能
-a根据 /etc/mtab 文件,关闭已启动的 Quota 服务,如果不使用 -a 选项,则此命令后面就需要明确写上特定的文件系统名称
-u关闭针对用户启动的 Quota 服务。
-g关闭针对群组启动的 Quota 服务。
-v显示服务过程的详细信息

【例 1】如果要关闭所有已开启的Quota服务,可以使用如下命令:

[root@localhost ~]# quotaoff -auvg

【例 2】如果只针对用户关闭 /var 启动的 Quota 支持,可以使用如下命令:

[root@localhost ~]# quotaoff -uv /var

六、Linux 修改用户(群组)的磁盘配额(edquota命令)

Linux edquota命令:修改用户(群组)的磁盘配额

针对用户和群组的配额限制(Quota),不仅可以手动控制开启和关闭,还可以手动修改配额参数,即使用 edquota 命令。

edquota 命令,是 edit quota 缩写,用于修改用户和群组的配额限制参数,包括磁盘容量和文件个数限制、软限制和硬限制值、宽限时间,该命令的基本格式有以下 3 种:

[root@localhost ~]# edquota [-u 用户名] [-g 群组名]
[root@localhost ~]# edquota -t
[root@localhost ~]# edquota -p 源用户名 -u 新用户名

此命令各常用选项及功能如表 1 所示。

表 1 edquota命令选项及功能

选项功能
-u 用户名进入配额的 Vi 编辑界面,修改针对用户的配置值;
-g 群组名进入配额的 Vi 编辑界面,修改针对群组的配置值;
-t修改配额参数中的宽限时间;
-p将源用户(或群组)的磁盘配额设置,复制给其他用户(或群组)。

例如,以用户 myquota 为例,通过如下命令配置此命令的 Quota:

[root@localhost ~]# edquota -u myquota
Disk quotas for user myquota (uid 710):
  Filesystem    blocks  soft   hard  inodes  soft  hard
  /dev/hda3         80     0      0      10     0     0

此命令的输出信息共 3 行,第一章指明了针对哪个用户进行配额限制,第二行是各个配额值的表头,共分为 7 列,其每一列的含义如表 2 所示。

表 2 edquota 命令配额限制信息

表头含义
文件系统(filesystem)说明该限制值是针对哪个文件系统(或分区);
磁盘容量(blocks)此列的数值是 quota 自己算出来的,单位为 Kbytes,不要手动修改;
磁盘容量的软限制(soft)当用户使用的磁盘空间超过此限制值,则用户在登陆时会收到警告信息,告知用户磁盘已满,单位为 KB;
磁盘容量的硬限制(hard)要求用户使用的磁盘空间最大不能超过此限制值,单位为 KB;
文件数量(inodes)同 blocks 一样,此项也是 quota自己计算出来的,无需手动修改;
文件数量的软限制(soft)当用户拥有的文件数量超过此值,系统会发出警告信息;
文件数量的硬限制(hard)用户拥有的文件数量不能超过此值。

注意,当 soft/hard 为 0 时,表示没有限制。另外,在 Vi(或 Vim)中修改配额值时,填写的数据无法保证同表头对齐,只要保证此行数据分为 7 个栏目即可。

【例 1】 修改用户 myquota 的软限制值和硬限制值。

[root@localhost ~]# edquota -u myquota
Disk quotas for user myquota (uid 710):
  Filesystem    blocks    soft    hard  inodes  soft  hard
  /dev/hda3         80  250000  300000      10     0     0

【例 2】 修改群组 mygrpquota 的配额。

[root@localhost ~]# edquota -g mygrpquota
Disk quotas for group mygrpquota (gid 713):
  Filesystem    blocks    soft     hard  inodes  soft  hard
  /dev/hda3        400  900000  1000000      50     0     0

【例 3】修改宽限天数。

[root@localhost ~]# 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/hda3                14days                  7days

七、Linux 非交互式设置磁盘配额(setquota命令)

Linux setquota命令详解:非交互式设置磁盘配额

如果我们需要写脚本建立大量的用户,并给每个用户都自动进行磁盘配额,那么 edquota 命令就不能在脚本中使用了,因为这个命令的操作过程和 vi 类似,需要和管理员产生交互。

这种情况下就需要利用 setquota 命令进行设置,这个命令的好处是通过命令行设定配额,而不用和管理员交互设定。

edquota 命令格式如下:

[root@localhost ~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 个数硬限制 分区名

举个例子,我们再建立用户 lamp4,并用 setquota 命令设定磁盘配额。

[root@localhost ~]# useradd lamp4
[root@localhost ~]# passwd lamp4
#建立用户
[root@localhost ~]# setquota -u lamp4 10000 20000 5 8/disk
#设定用户在/disk分区中的容量软限制为10MB,硬限制为20MB;文件个数软限制为5个,硬限制为8个
[root@localhost ~]# quota -uvs lamp4
Disk quotas for user Iamp4 (uid 503):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdbl 0 10000 20000 0 5 8
#查看一下,配额生效了

这个命令在写脚本进行批量设置时更加方便。当然,在写脚本时也可以先建立一个模板用户,设定好磁盘配额,再进行配额复制。

八、Linux 查询和已建立好的磁盘配额(quota和repquota命令)

Linux quota和repquota命令查询磁盘配额方法详解

对于建立好的磁盘配额,还需要有效的查询配额的手段,这样才能知道系统中到底有哪些分区设定了哪些配额。

查询磁盘配额有两种方法:

  • 使用 quota 命令查询用户或用户组的配额;
  • 使用 repquota 命令查询整个分区的配额情况。

1、quota 命令查询用户或用户组配额

[root@localhost~] # quota [选项] [用户名或组名]

选项:

  • -u 用户名:查询用户配额;
  • -g 组名:查询组配额;
  • -v:显示详细信息;
  • -s:以习惯单位显示容量大小,如M、G;

[root@localhost 〜]# quota -uvs lamp1
Disk quotas for user lamp1 (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda3 20 0 0 6 0 0
/dev/sdbl 0 40000 50000 0 8 10
#查看lamp1用户的配额值
[root@localhost ~]# quota -uvs lamp2
Disk quotas for user lamp2 (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda3 36752 0 0 2672 0 0
/dev/sdbl 0 245M 293M 0 0 0
#查看lamp2用户的配额值

lamp 用户的配额值还不够大,所以没有换算成 MB 单位,但是 lamp2 用户已经换算了。在选项列当中多出了 grace 字段,这里是用来显示宽限时间的,我们现在还没有达到软限制,所以 grace 字段为空。

2、repquota命令查询文件系统配额

[root@localhost ~] # repquota [选项] [分区名]

选项:

  • -a:依据 /etc/mtab 文件查询配额。如果不加 -a 选项,就一定要加分区名;
  • -u:查询用户配额;
  • -g:查询组配额;
  • -v:显示详细信息;
  • -s:以习惯单位显示容量太小;

[root@localhost ~] # repquota -augvs
*** Report for user quotas on device /dev/sdbl
#用户配额信息
Block grace time: 8days; Inode grace time: 8days
Block limits File limits
User used soft hard grace used soft hard grace
root -- 13 0 0 2 0 0
lampl -- 0 40000 50000 0 8 10
lamp2 -- 0 245M 293M 0 0 0
lamp3 -- 0 245M 293M 0 0 0
#用户的配额值
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 4
Used average: 4.000000
*** Report for group quotas on device /dev/sdbl
#组配额信息
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
root -- 13 0 0 2 0 0
brother -- 0 440M 489M 0 0 0
#组的配额值
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2.000000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值