- 金錢
- 2098
- 威望
- 550
- 貢獻值
- 0
- 推廣值
- 0
- 性別
- 保密
- 在線時間
- 32 小時
- 最後登錄
- 2024-11-3
- 主題
- 9
- 精華
- 0
- 閱讀權限
- 30
- 註冊時間
- 2012-3-4
- 帖子
- 0
TA的每日心情 | 開心 2024-11-3 08:57 |
---|
簽到天數: 422 天 [LV.9]以壇為家II - 推廣值
- 0
- 貢獻值
- 0
- 金錢
- 2098
- 威望
- 550
- 主題
- 9
|
樓主
發表於 2012-11-16 11:04:38
研究确定跨多个 UNIX 系统的磁盘使用情况以及如何创建一个简单的警告系统对潜在问题发出警告的方法。关注您的文件系统,确保它们没有填满,这虽然是个小事,但在 UNIX 系统的日常管理工作中是至关重要的过程。在本文中,您将了解到监视磁盘空间、发现究竟是哪些文件、用户或应用程序占用了大部分的空间、以及如何使用配额和其他解决方案查找需要的信息的方法。
关于本系列
通常,UNIX 管理员都拥有一套常用的辅助进程管理的实用工具、技巧和系统。本文提供了各种用于简化各个过程的关键实用工具、命令行链和脚本。这些工具中的一部分来自于操作系统,而大部分的技巧则来源于长期的经验积累和减轻系统管理员的工作压力的要求。本系列文章主要专注于最大限度地利用各种 UNIX 环境中可用的工具,包括简化异类环境中的管理任务的方法。
入门:使用 df
监视磁盘空间是 UNIX 管理员的工作中很重要的一部分。本文向您介绍一些完成管理工作所需的工具,包括 df、du、find 的使用,甚至配额的使用。让我们先来看看 df 的强大功能。
对于许多管理员来说,使用 df 工具可能有点像断续的神经运动,因为它通过一个命令提供了所有文件系统中已使用的和可用的存储空间的快照视图。根据您的 UNIX 环境的不同,df 的缺省输出可能包含各种不同的信息。
大部分现代的 df 变种都可以显示磁盘空间、使用情况和可用性,通常还包括装入点(有时包括设备)。例如,基于 BSD 的 Mac OS X 显示如清单 1 所示的信息。
清单 1. Mac OS X 的缺省磁盘空间信息- Filesystem kbytes used avail capacity Mounted
- on
- /dev/dsk/c0t0d0s7 35611388 930133 34325142 3%
- /export/home
複製代碼 第一列通常具有与块大小数据相对应的标题,它显示了磁盘的总大小。used 列显示了该文件系统或设备上已使用的块数。avail 列显示了该文件系统上尚未使用的(可用的)块数。
capacity 列提供了总大小中已使用的磁盘空间所占的百分比。这个信息本身可以提供关于可用空间的直观指示。
缺省情况下,UNIX 所创建的文件系统中百分之九十的容量可用于存放用户数据。剩下的百分之十由系统保留,以便 root 用户执行紧急维护工作。如果用户试图添加或创建超出该限制的文件,那么将返回一个错误(超出文件系统空间)。
有了这个紧急维护空间,就可以利用它对一块已满的磁盘进行恢复。例如,作为管理员,您可以使用这个空间来创建快速备份,或对现有的数据进行压缩而无需为达到该目的使用辅助文件系统。您可以使用 tunefs 工具或在创建文件系统时,调整保留的空闲空间的大小。对于大容量磁盘来说,这是至关重要的,因为其中百分之十的缓冲区可能等于许多个 GB 的潜在空间。通常好的做法是至少保留百分之一的空间,以便在完全用尽存储空间之前,提供最低限度的缓冲区空间。在深入研究这个问题之前,特别是如果已经使用了大量的磁盘空间,您需要确定到底是谁使用了所有的这些空间。
使用 du
du 命令并不是显示磁盘的空闲空间,而是显示磁盘使用情况的信息。du 工具用于确定文件和目录的磁盘使用情况。要使用这个工具,改变到一个目录,然后运行该工具(请参见清单 6)。
清单 6. du 命令- fs /export/home blocks (soft = 200000, hard = 400000) inodes (soft =
- 0,
- hard =
- 0)
複製代碼 如果有更多的文件系统具有配额,那么您需要为这些文件系统配置更多的行。
如果您需要对多个用户配置配额,那么可以首先为一个用户设置配额,然后对 edquota 使用 -p 命令行选项。这将使用指定的用户作为基础来创建新的用户。例如,要使用 mc 的设置为用户名 slp、tw 和 sh 设置配额,请执行下面的命令:- quota_ufs: Warning: over disk limit (pid 1738, uid 101, inum 94, fs
- /export/home)
複製代碼 请注意,留给用户 7 天的时间更正该问题,您可以使用 edquota -t 来更改这个期限。
如果用户试图创建超过硬限制的文件,那么系统将终止写进程并根据相应的限制来截断该文件:- $ mkfile 210000k overlimit
- quota_ufs: over hard disk limit (pid 1843, uid 101, inum 130, fs
- /export/home)
- overlimit: initialized 191873024 of 215040000 bytes: Disc quota exceeded
复制代码
通过运行 quota 命令,任何用户都可以检查他们自己的配额限制和磁盘使用情况:- $ quota
- Over disk quota on /export/home, remove 199993K within 7.0 days
复制代码
配额管理
使用 quota 命令,系统管理员可以检查任何用户的配额,您应该使用 -v 命令行选项以提供关于文件系统、使用情况和限制信息的完整报告(请参见清单 8)。
清单 8. 使用 -v 选项- $ quota -v mc
- Disk quotas for mc (uid 101):
- Filesystem usage quota limit timeleft files quota limit
- timeleft
- /export/home 399993 200000 400000 6.9 days 151 0 0
复制代码
要获得某个文件系统中详细描述所有用户的磁盘和配额使用情况的报告,可以使用 repquota 命令,并指定要报告的文件系统(请参见清单 9)。
清单 9. 使用 repquote 命令- $ repquota -v /export/home
- /dev/dsk/c0t0d0s7 (/export/home):
- Block limits File limits
- User used soft hard timeleft used soft hard timeleft
- mc +- 399993 200000 400000 6.9 days 151 0 0
复制代码
要确保配额信息保持最新,您应该使用 quotacheck 命令。这将利用用来报告配额信息的配额信息对文件存储数据进行验证。您应该使用 cron 来自动地运行这项任务,每天一次比较合适(因为这个过程是比较耗时的)。
配额的技巧和陷井
配额系统提供了监视和自动管理的最佳组合,但是您应该注意启用了配额的文件系统以及您所设置的限制,因为它们可能会妨碍用户的工作,而不是控制他们的磁盘使用情况。
例如,与您进行的使用配置相比,程序员可能需要更多的空间来构建一个应用程序。通过提供一个不受限制的编译区域(通过设置一个可选的临时目录),您可以在维持他们的 home 目录配额的同时避开这个问题,或者在设置很高的硬限制(甚至可能是该文件系统的最大容量)的同时,设置合适的软限制。
其结果应该是当达到软限制时给出一个警告,而不会真正地实施硬限制。用户应该仍然可以构建和创建临时文件,但是因为在构建的过程中会删除这些文件,所以不应该禁止用户创建他们所需的文件。
配额还可以用来帮助完成监视任务,并提醒您关于特殊用户帐户的空间使用情况。我过去曾使用配额来监视 Web 用户帐户,即所谓的 nobody 帐户和其他帐户,以确保它们无法向不应具有访问权限的文件系统中写入文件。要完成这项任务,可以将您需要保护的文件系统和用户的硬限制设置为 1KB。
自动监视
手动监视磁盘空间使用情况是可行的,但是您并不希望不停地运行 df(甚至 du)来确定已使用的或可用的磁盘空间。您可以使这个过程自动化,并且当可用空间降低到一定的级别时,自动地向管理员(或者管理员组)发送电子邮件。清单 10 中的脚本用来监视磁盘空间,您可以设置警告 (warninglimit) 和紧急情况 (lowlimit) 限制,以及进行检查的文件系统的列表。
清单 10. 监视磁盘空间- #!/bin/sh
- warninglimit=500000
- lowlimit=250000
- filesystems="/export/data /export/home /"
- for fs in $filesystems
- do
- size=`df -k $fs|grep $fs|awk '{ print $4; }'`
- if [ $size -le $lowlimit ]
- then
- mailx -s "URGENT: Low disk space for $fs ($size)"
- break
- fi
- if [ $size -le $warninglimit ]
- then
- mailx -s "WARNING: Low disk space for $fs ($size)"
- fi
- done
复制代码
其中关键的一行是提取每个文件系统中空闲磁盘空间的大小:- size=`df -k $fs|grep $fs|awk '{ print $4; }'`
复制代码
该脚本使用 df 仅提取了要进行 grep 的行,然后使用 awk 提取数据的第 4 列,该列是空闲空间的大小。
然后,您可以根据 warninglimit/lowlimit 来检查空闲空间,并生成合适的错误。要避免系统同时发生下限和警告错误,该脚本首先检查下限,并在尝试测试警告之前使用 break 跳到循环中的下一个文件系统。
结束语
监视磁盘空间是管理员的一项重要工作,耗尽磁盘空间将可能严重地影响用户的工作,并且在严重的情况下,可能会丢失数据,或者使得系统崩溃,因为系统无法获得运行所需的磁盘空间。
使用 df,您可以确定整个文件系统的空闲空间和空间使用情况,但这只是描述了部分信息。要确定磁盘空间用于何处,您需要使用 du 工具对不同的目录进行研究。通过使用 find,您甚至可以使用 du 来查找指定用户所使用的空间。对于更加自动化的用户级磁盘使用情况和控制,配额是一个更好的选择。
|
|