系统管理指南:高级管理

第 7 章 管理 UFS 配额(任务)

本章介绍如何设置和管理磁盘空间和 inode 的 UFS 配额。

有关与管理 UFS 配额相关的信息,请参见以下内容:

有关管理 Oracle Solaris ZFS 配额的信息,请参见《Oracle Solaris ZFS 管理指南》中的“设置 ZFS 配额和预留空间”

什么是 UFS 配额?

利用 UFS 配额,系统管理员可以控制文件系统的大小。配额会限制磁盘空间量和 inode 数量,这些数量与各个用户可以获取的文件数量大致对应。因此,配额在用户起始目录驻留的文件系统中特别有用。通常,建立配额对 public/tmp 文件系统不会有明显的益处。

使用 UFS 配额

设置配额后,即可更改配额,以调整用户可以占用的磁盘空间量或 inode 数量。此外,随着系统需要的变化,还可以添加或删除配额。有关更改配额或配额可以超出的时间、禁用各配额或从文件系统中删除配额的说明,请参见更改和删除 UFS 配额

此外,还可以监视配额状态。使用 UFS 配额命令,管理员可以显示有关文件系统中配额的信息,或搜索已超过配额的用户。有关介绍如何使用这些命令的过程,请参见检查 UFS 配额

设置 UFS 配额的软限制和硬限制

既可以设置软限制,也可以设置硬限制。系统不允许用户超过其硬限制。但是系统管理员可能会设置软限制,用户可以临时性地超过该软限制。软限制必须低于硬限制。

一旦用户超过软限制,配额计时器便开始计时。在配额计时器计时期间,用户可以使用高于软限制的配额,但不能超过硬限制。一旦用户低于软限制,计时器就将复位。但当计时器过期时,如果用户的使用配额一直在软限制以上,则会将软限制强制作为硬限制。缺省情况下,软限制计时器设置为七天。

repquotaquota 命令中的 timeleft 字段显示了计时器的值。

例如,假定某用户的软限制为 10,000 块,硬限制为 12,000 块。如果该用户的块使用量超过 10,000 块并且七天计时器已过期,则在用户的使用量降到软限制以下之前,该用户不能在该文件系统中分配更多磁盘块。

磁盘块与文件限制之间的区别

文件系统可为用户提供两种资源:用于数据的块和用于文件的 inode。每个文件占用一个 inode。文件数据存储在数据块中。数据块通常由 1 KB 的块组成。

假定不存在任何目录,则用户可以通过创建所有空文件而不使用任何块来超过其 inode 配额。用户也可以使用一个 inode 超过其块配额,方法是创建一个足够大的文件来占用用户配额中的所有数据块。

设置 UFS 配额

设置配额包括以下常规步骤:

  1. 通过向 /etc/vfstab 文件项中添加一个配额选项,来确保每次重新引导系统时都会执行配额。此外,在文件系统的顶层目录中创建一个 quotas 文件。

  2. 为一次使用创建配额后,将其作为样例进行复制即可设置其他用户配额。

  3. 在启用配额之前,请先检查建议的配额与当前磁盘使用量之间的一致性,以确保没有冲突。

  4. 为一个或多个文件系统启用配额。

有关这些过程的特定信息,请参见设置 UFS 配额(任务图)

下表介绍了用于设置磁盘配额的命令。

表 7–1 用于设置 UFS 配额的命令

命令 

任务 

手册页 

edquota

针对每个用户设置 inode 数量和磁盘空间量的硬限制和软限制。 

edquota(1M)

quotacheck

检查每个已挂载的 UFS 文件系统,将文件系统的当前磁盘使用量与文件系统磁盘配额文件中存储的信息进行比较。然后,解决不一致问题。 

quotacheck(1M)

quotaon

为指定的文件系统激活配额。 

quotaon(1M)

quota

显示用户在已挂载文件系统中的 UFS 磁盘配额,以验证是否已正确设置配额。 

quota(1M)

设置 UFS 配额的原则

设置 UFS 配额之前,需要确定要分配给每个用户的磁盘空间量和 inode 数量。如果要确保始终不超过文件系统总空间量,可根据用户数来划分文件系统空间。例如,如果三个用户共享 100 MB 的磁盘分片并且所需的磁盘空间相同,则可为每个用户分配 33 MB。

在并非所有用户都希望施加限制的环境中,您可能需要单独设置各用户的配额,以使配额总数大于文件系统的总大小。例如,如果三个用户共享 100 MB 的磁盘分片,则可为每个用户分配 40 MB。

使用 edquota 命令为一个用户建立配额后,可以将此配额用作样例,为同一文件系统中的其他用户设置相同配额。

在启用配额之前,请执行以下操作:

只有使用 quotaon 命令启用配额,才会执行使用 edquota 命令设置的配额。如果已正确配置了配额文件,则每次重新引导系统和挂载文件系统时,将自动启用配额。

设置 UFS 配额(任务图)

任务 

说明 

参考 

1. 为配额配置文件系统。 

编辑 /etc/vfstab 文件,以便在每次挂载文件系统时激活配额。此外,还应创建一个 quotas 文件。

如何为 UFS 配额配置文件系统

2. 设置一个用户的 UFS 配额。 

使用 edquota 命令为单个用户帐户创建磁盘配额和 inode 配额。

如何设置一个用户的 UFS 配额

3. (可选)设置多个用户的 UFS 配额。 

使用 edquota 命令将样例配额应用于其他用户帐户。

如何设置多个用户的 UFS 配额

4. 检查一致性。 

使用 quotacheck 命令将配额与当前磁盘使用量进行比较,以确保一个或多个文件系统中的一致性。

如何检查 UFS 配额一致性

5. 启用 UFS 配额。 

使用 quotaon 命令在一个或多个文件系统中启动 UFS 配额。

如何启用 UFS 配额

Procedure如何为 UFS 配额配置文件系统

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 对于要获取配额的每个 UFS 文件系统,编辑 /etc/vfstab 文件并向 mount options 字段中添加 rq

  3. 将目录转到将获取配额的文件系统的根目录。

  4. 创建一个名为 quotas 的文件。


    # touch quotas
    
  5. 更改读取/写入权限,以便仅供超级用户访问。


    # chmod 600 quotas
    

示例 7–1 为 UFS 配额配置文件系统

以下 /etc/vfstab 示例显示,系统 pluto 中的 /export/home 目录在本地系统中作为 NFS 文件系统挂载。通过 mount options 列下的 rq 项可以判断已启用了配额。


# device   device    mount     FS    fsck   mount   mount
# to mount       to fsck  point     type   pass  at boot options
# pluto:/export/home -   /export/home nfs    -     yes    rq

/etc/vfstab 文件中的以下示例行说明本地 /work 目录在挂载时已启用配额,mount options 列下的 rq 项指明了这一点。


#device     device        mount  FS   fsck  mount    mount
#to mount         to fsck      point  type  pass  at boot options
#/dev/dsk/c0t4d0s0 /dev/rdsk/c0t4d0s0 /work ufs  3    yes     rq

另请参见

Procedure如何设置一个用户的 UFS 配额

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用配额编辑器创建一个临时文件,对于在文件系统的根目录中包含 quotas 文件的每个已挂载的 UFS 文件系统,该临时文件都包含一行配额信息。


    # edquota username
    

    其中,username 是要为其设置配额的用户。

  3. 将 1 KB 磁盘块的数量(软限制和硬限制)更改为针对每个文件系统指定的配额。

  4. 将 inode 的数量(软限制和硬限制)从缺省值 0 更改为针对每个文件系统指定的配额。

  5. 验证用户的 UFS 配额。


    # quota -v username
    
    -v

    在存在配额的所有已挂载文件系统中显示用户的配额信息。

    username

    指定要查看配额限制的用户名。


示例 7–2 设置一个用户的 UFS 配额

以下示例显示了 edquota 在某个系统中打开的临时文件的内容,在该系统中,/files 是根目录中包含 quotas 文件的唯一已挂载文件系统。


fs /files blocks (soft = 0, hard = 0) inodes (soft = 0, hard = 0)

以下示例显示了设置配额后临时文件中的同一行。


fs /files blocks (soft = 50, hard = 60) inodes (soft = 90, hard = 100)

Procedure如何设置多个用户的 UFS 配额

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用配额编辑器将已为样例用户建立的配额应用到您指定的其他用户。


    # edquota -p prototype-user username ...
    
    prototype-user

    已为其设置了配额的帐户的用户名。

    username ...

    指定其他帐户的一个或多个用户名。通过以空格分隔每个用户名来指定多个用户名。


示例 7–3 设置多个用户的样例 UFS 配额

以下示例说明如何将为用户 bob 建立的配额应用到用户 maryjohn


# edquota -p bob mary john

Procedure如何检查 UFS 配额一致性

重新引导系统时会自动运行 quotacheck 命令。通常不需要在具有配额的空文件系统中运行 quotacheck 命令。但是,如果要在包含现有文件的文件系统中设置配额,则需要运行 quotacheck 命令,以使配额数据库与文件系统中已存在的文件或 inode 同步。

此外应谨记,在大型文件系统中运行 quotacheck 命令会非常耗时。


注 –

为确保磁盘数据的准确性,在手动运行 quotacheck 命令时,检查的文件系统应处于停顿状态。


  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 对 UFS 文件系统运行一致性检查。


    # quotacheck [-va] filesystem 
    
    -v

    (可选)确定每个用户在特定文件系统中的磁盘配额。

    -a

    检查 /etc/vfstab 文件中包含 rq 项的所有文件系统。

    filesystem

    指定要检查的文件系统。

    有关更多信息,请参见 quotacheck(1M) 手册页。


示例 7–4 检查 UFS 配额一致性

以下示例说明如何检查 /dev/rdsk/c0t0d0s7 磁盘分片中 /export/home 文件系统的配额。/export/home 文件系统是 /etc/vfstab 文件中具有 rq 项的唯一文件系统。


# quotacheck -va
*** Checking quotas for /dev/rdsk/c0t0d0s7 (/export/home)

Procedure如何启用 UFS 配额

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 启用文件系统配额。


    # quotaon [-v] -a filesystem ...
    
    -v

    启用配额后为每个文件系统显示一条消息。

    -a

    为在 /etc/vfstab 文件中包含 rq 项的所有文件系统启用配额。

    filesystem ...

    为指定的一个或多个文件系统启用配额。指定多个文件系统时,需要用空格来分隔每个文件系统的名称。


示例 7–5 启用 UFS 配额

以下示例说明如何为 /dev/dsk/c0t4d0s7/dev/dsk/c0t3d0s7 磁盘分片上的文件系统启用配额。


# quotaon -v /dev/dsk/c0t4d0s7 /dev/dsk/c0t3d0s7
/dev/dsk/c0t4d0s7: quotas turned on
/dev/dsk/c0t3d0s7: quotas turned on

维护 UFS 配额(任务图)

任务 

说明 

参考 

检查超过的 UFS 配额。 

使用 quota 命令显示已激活 UFS 配额的文件系统中各用户的 UFS 配额和磁盘使用情况。

如何检查超过的 UFS 配额

检查文件系统中的 UFS 配额。 

使用 repquota 命令显示一个或多个文件系统中所有用户的 UFS 配额和磁盘使用情况。

如何检查文件系统中的 UFS 配额

更改软限制缺省值。 

使用 edquota 命令更改用户可以超过其磁盘空间配额或 inode 配额的时间长度。

如何更改软限制缺省值

更改用户的 UFS 配额。 

使用配额编辑器 edquota 更改单个用户的配额。

如何更改用户的 UFS 配额

禁用用户的 UFS 配额。 

使用配额编辑器 edquota 为单个用户禁用配额。

如何禁用用户的 UFS 配额

禁用 UFS 配额。 

使用 quotaoff 命令禁用 UFS 配额。

如何禁用 UFS 配额

检查 UFS 配额

设置并启用 UFS 磁盘配额和 inode 配额后,即可检查是否有用户超过了其配额。此外,还可以检查整个文件系统的配额信息。

下表介绍了用于检查配额的命令。

表 7–2 用于检查 UFS 配额的命令

命令 

任务 

quota(1M)

显示用户配额和当前磁盘使用情况,以及有关超过其配额的用户的信息 

repquota(1M)

显示指定文件系统所拥有的配额、文件和空间量 

Procedure如何检查超过的 UFS 配额

您可以使用 quota 命令显示已激活配额的文件系统中各用户的 UFS 配额和磁盘使用情况。

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 显示启用配额的已挂载文件系统的用户配额。


    # quota [-v] username
    
    -v

    显示在具有配额的所有已挂载文件系统中的一个或多个用户的配额。

    username

    用户帐户的登录名或 UID。


示例 7–6 检查超过的 UFS 配额

以下示例显示由 UID 301 标识的用户帐户有一个 1KB 的配额,但尚未使用任何磁盘空间。


# quota -v 301
Disk quotas for bob (uid 301):
Filesystem  usage  quota limit timeleft files quota  limit timeleft
/export/home   0      1     2             0      2      3
Filesystem

文件系统的挂载点。

usage

当前的块使用情况。

quota

软块限制。

limit

硬块限制。

timeleft

配额计时器中剩余的时间,以天为单位。

files

当前的 inode 使用情况。

quota

软 inode 限制。

limit

硬 inode 限制。

timeleft

配额计时器中剩余的时间,以天为单位。


Procedure如何检查文件系统中的 UFS 配额

使用 repquota 命令显示一个或多个文件系统中所有用户的 UFS 配额和磁盘使用情况。

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 显示一个或多个文件系统的所有 UFS 配额(即使未使用也显示)。


    # repquota [-v]  -a filesystem
    
    -v

    报告所有用户的 UFS 配额,包括那些不占用资源的用户。

    -a

    报告所有文件系统。

    filesystem

    报告指定的文件系统。


示例 7–7 检查文件系统中的 UFS 配额

以下示例显示在仅对一个文件系统 (/export/home) 启用配额的系统中 repquota 命令的输出。


# repquota -va
/dev/dsk/c0t3d0s7 (/export/home):
                  Block limits              File limits
User      used   soft   hard  timeleft  used  soft   hard  timeleft
#301  --            0      1   2.0 days         0      2      3  
#341  --    57     50     60   7.0 days  2      90    100  
Block limits

定义

used

当前的块使用情况。

soft

软块限制。

hard

硬块限制。

timeleft

配额计时器中剩余的时间,以天为单位。

File limits

是文件限制的定义。

used

当前的 inode 使用情况。

soft

软 inode 限制。

hard

硬 inode 限制。

timeleft

配额计时器中剩余的时间,以天为单位。


更改和删除 UFS 配额

您可以更改配额,以调整用户可以占用的磁盘空间量或 inode 数量。还可以根据需要,为各用户或从整个文件系统中删除配额。

下表介绍了用于更改配额或删除配额的命令。

表 7–3 用于更改和删除 UFS 配额的命令

命令 

手册页 

说明 

edquota

edquota(1M)

更改每个用户的 inode 数量或磁盘空间量的硬限制和软限制。此外,还要更改具有配额的每个文件系统的软限制。  

quotaoff

quotaon(1M)

禁用指定文件系统的配额。 

Procedure如何更改软限制缺省值

缺省情况下,用户可以超过其 UFS 配额软时间限制一周。因此,在重复违反磁盘空间配额或 inode 配额软时间限制一周后,系统将禁止用户使用更多的 inode 或磁盘块。

使用 edquota 命令可以更改用户可超过其磁盘空间配额或 inode 配额的时间长度。

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用配额编辑器创建包含软时间限制的临时文件。


    # edquota -t
    

    其中,-t 选项指定为每个文件系统编辑软时间限制。

  3. 将时间限制从 0(缺省值)更改为指定的时间限制。因此,可使用数字和关键字 monthweekdayhourminsec


    注 –

    此过程不会影响当前的配额违反者。



示例 7–8 更改软限制缺省值

以下示例显示了 edquota 命令在某一系统(其中 /export/home 是唯一具有配额的已挂载文件系统)中打开的临时文件的内容。缺省值 0 表示使用的缺省时间限制为一周。


fs /export/home blocks time limit = 0 (default), files time limit = 0 (default)

以下示例显示了在将超过块配额的时间限制更改为 2 周之后的同一临时文件。而且,超过文件数的时间限制已更改为 16 天。


fs /export/home blocks time limit = 2 weeks, files time limit = 16 days

Procedure如何更改用户的 UFS 配额

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用配额编辑器打开临时文件,对于在文件系统的根目录中具有 quotas 文件的每个已挂载文件系统,该文件都包含一行配额信息。


    # edquota username
    

    其中,username 指定要更改其配额的用户名。


    注意 – 注意 –

    可以将多个用户指定为 edquota 命令的参数。但不显示此信息所属的用户。为避免混乱,请仅指定一个用户名。


  3. 指定 1 KB 磁盘块的数量(软限制和硬限制)和 inode 数量(软限制和硬限制)。

  4. 验证是否已正确更改了用户的 UFS 配额。


    # quota -v username
    
    -v

    显示已启用配额的所有已挂载文件系统中的用户 UFS 配额信息。

    username

    指定要检查其配额的用户名。


示例 7–9 更改用户的 UFS 配额

以下示例显示了由 edquota 命令打开的临时文件的内容。在打开此临时文件的系统中,/files 是在文件系统的根目录中包含 quotas 文件的唯一已挂载文件系统。


fs /files blocks (soft = 0, hard = 0) inodes (soft = 0, hard = 0)

以下输出显示了更改配额后的同一临时文件。


fs /files blocks (soft = 0, hard = 500) inodes (soft = 0, hard = 100)


示例 7–10 验证是否已更改了硬 UFS 配额

以下示例解释如何验证用户 smith 的硬配额已更改为 500 个 1 KB 块和 100 个 inode。


# quota -v smith
Disk quotas for smith (uid 12):
Filesystem  usage  quota  limit  timeleft  files  quota  limit  timeleft
 
  /files     1       0     500              1       0     100

Procedure如何禁用用户的 UFS 配额

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 使用配额编辑器创建一个临时文件,对于在顶层目录中包含 quotas 文件的每个已挂载文件系统,该临时文件都包含一行配额信息。


    # edquota username
    

    其中,username 指定要禁用其配额的用户名。


    注意 – 注意 –

    可以将多个用户指定为 edquota 命令的参数。但不显示此信息所属的用户。为避免混乱,请仅指定一个用户名。


  3. 将 1 KB 磁盘块的数量(软限制和硬限制)更改为 0。

  4. 将 inode 的数量(软限制和硬限制)更改为 0。


    注 –

    确保将上述值更改为零。请从文本文件中删除该行。


  5. 验证是否已禁用用户的 UFS 配额。


    # quota -v username
    
    -v

    显示已启用配额的所有已挂载文件系统中的用户 UFS 配额信息。

    username

    指定要检查其 UFS 配额的用户名 (UID)。


示例 7–11 禁用用户的 UFS 配额

以下示例显示了由 edquota 命令在某一系统中打开的临时文件的内容,在该系统中,/files 是在文件系统的根目录中包含配额文件的唯一已挂载文件系统。


fs /files blocks (soft = 50, hard = 60) inodes (soft = 90, hard = 100)

以下示例显示了禁用 UFS 配额后的同一临时文件。


fs /files blocks (soft = 0, hard = 0) inodes (soft = 0, hard = 0)

Procedure如何禁用 UFS 配额

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 禁用文件系统配额。


    # quotaoff [-v] -a filesystem ...
    
    -v

    显示禁用 UFS 配额时每个文件系统中的消息。

    -a

    禁用所有文件系统的 UFS 配额。

    filesystem

    禁用指定的一个或多个文件系统的 UFS 配额。指定多个文件系统时,需要用空格来分隔每个文件系统的名称。


示例 7–12 禁用配额

以下示例说明如何为 /export/home 文件系统禁用配额。


# quotaoff -v /export/home
/export/home: quotas turned off