Chinaunix首页 | 论坛 | 博客
  • 博客访问: 959354
  • 博文数量: 245
  • 博客积分: 11429
  • 博客等级: 上将
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-15 00:16
文章存档

2011年(56)

2010年(174)

2009年(15)

分类: LINUX

2011-04-08 13:48:13

  1. 入门:使用 df
  2. 监视磁盘空间是 UNIX 管理员的工作中很重要的一部分。本文向您介绍一些完成管理工作所需的工具,包括 df、du、find 的使用,甚至配额的使用。让我们先来看看 df 的强大功能。

  3. 对于许多管理员来说,使用 df 工具可能有点像断续的神经运动,因为它通过一个命令提供了所有文件系统中已使用的和可用的存储空间的快照视图。根据您的 UNIX 环境的不同,df 的缺省输出可能包含各种不同的信息。

  4. ~]# df -a
  5. Filesystem 1K-blocks Used Available Use% Mounted on
  6. /dev/mapper/VolGroup00-LogVol00
  7. 1886989448 101578828 1688011020 6% /
  8. proc 0 0 0 - /proc
  9. sysfs 0 0 0 - /sys
  10. devpts 0 0 0 - /dev/pts
  11. /dev/sda1 101086 20089 75778 21% /boot
  12. tmpfs 524376 0 524376 0% /dev/shm
  13. none 0 0 0 - /proc/sys/fs/binfmt_misc
  14. sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs
  15. none 524288 120 524168 1% /var/lib/xenstored
  16. 常用参数k,h不清楚可以help
  17. du 介绍
  18. /]# du -sh *
  19. 8.2M bin
  20. 15M boot
  21. 84K dev
  22. 129M etc
  23. 116M home
  24. 141M lib
  25. 16K lost+found
  26. 8.0K media
  27. 0 misc
  28. 8.0K mnt
  29. 0 net
  30. 4.0K openqrm
  31. 87G opt
  32. 0 proc
  33. 4.9G root
  34. 36M sbin
  35. 8.0K selinux
  36. 8.0K srv
  37. 0 sys
  38. 4.0K tftpboot
  39. 664K tmp
  40. 4.2G usr
  41. 999M var
  42. 8.0K windows
  43. 使用 -s 选项以打开摘要视图
  44. 它显示了当前目录 (.) 的摘要信息。要获得所有文件和目录的摘要信息,可以使用 * 通配符
  45. 注意:
  46. 使用该工具时,特别是在用户目录中使用该工具时,请特别小心,因为所显示的信息中不包含隐藏 文件,换句话说,具有单点号前缀的那些文件和目录。您可能希望使用下面的代码行,在用户目录中获得所有的摘要信息:

  47. 1. $ du -sk * .[a-zA-Z0-9]* ##注意* 和”.“ 中间有空格/]# du -sk * .[a-zA-Z0-9]*
  48. 8312 bin
  49. 14461 boot
  50. 84 dev
  51. 131412 etc
  52. 118468 home
  53. 143500 lib
  54. 16 lost+found
  55. 8 media
  56. 0 misc
  57. 8 mnt
  58. 0 net
  59. 4 openqrm
  60. 90932212 opt
  61. 0 proc
  62. 5113780 root
  63. 35900 sbin
  64. 8 selinux
  65. 8 srv
  66. 0 sys
  67. 4 tftpboot
  68. 664 tmp
  69. 4388728 usr
  70. 1022292 var
  71. 8 windows
  72. 0 .autofsck
  73. 0 .autorelabel
  74. 4 .rnd
du 命令的最后一个非常有用的选项是 -d,该选项可以防止 du 命令超过文件系统边界。例如,要确定根文件系统而不是任何其他的文件系统的磁盘使用情况,您可以使用 -d 选项:
  1. $ du -dsh /
有些系统没有这个选项,但是有 -x 命令行选项,该选项仅包含与您所指定的路径相同的设备或文件系统中的文件使用情况。
 ~]# du -xsh /home
116M    /home
查找一个特定用户的磁盘使用情况

要查找某个用户所使用的磁盘空间,在使用 find 命令的同时,您需要结合使用 du 命令以仅报告特定用户的磁盘使用情况。
  1. $ find . -user mc -type f -exec du -k {} \;
复制代码
-user 选项允许您指定 find 将仅报告属于特定用户的文件。-type 选项强制 find 仅返回特定类型(在本示例中是文件)项目的路径,这样可以防止 du 包含目录,因为这些目录可能属于某个用户,但其中却包含了许多用户的文件。然后,对于查找到的每个路径,执行 du 命令以报告磁盘使用情况。

要获得摘要信息,换句话说,即某个特定用户所使用的总空间,您可以使用 awk 对该信息进行总计,并打印出最后的值:
  1. $ find . -user mc -type f -exec du -k {} \;|awk '{ s =
  2.      s+$1 } END { print "Total used: ",s }'
  3. Total used:  123721
复制代码
对于组,您可以根据相同的原则对 find 使用 -group 选项:
  1. $ find . -group mcslp -type f -exec du -k {} \;|awk '{ s = s+$1 } END { print
  2. "Total used: ",s }'
  3. Total used:  542485
复制代码
然而,如果启用了磁盘配额,那么就有一种更简单的方法。

使用配额

配额系统以文件系统为单位,自动监视该文件系统中各个用户的磁盘使用情况。配额环境不仅允许您监视磁盘的使用情况,而且还允许设置相应的使用限制,在超过使用限制时提供警告或者更直接地禁止用户使用超过所分配的配额值的磁盘空间。下限(发出警告)称为软限制,而上限(禁止创建超过该限制的文件)称为硬限制。有些系统可能还允许您控制每个用户所拥有的文件的数目。

在您的计算机上启动配额的确切方法取决于您所使用的操作系统。大多数 UNIX 系统在缺省情况下都包含配额的支持。Linux® 系统可能需要构建新的包含配额支持的内核。然而,通常大多数操作系统为每个文件系统使用一个称为 quotas 的文件,其中包含了对每个用户的空间使用限制。

要启用配额,您首先需要创建该文件,并确保仅有 root 用户可以编辑该配额文件:
  1. $ touch /export/home/quotas
  2. $ chmod 600 /export/home/quotas
复制代码
然后,使用 quotaon 命令启用配额功能:
  1. $ quotaon /export/home
复制代码
最后,您必须为每个用户编辑适当的配额。可以使用 edquota 命令并指定相应的用户来完成这项任务:
  1. $ edquota mc
复制代码
这将打开缺省的编辑器(或者 vi,如果您没有设置可选的编辑器),其中包含一个用来设置配额值的简单表格。在下面您可以看到,已为用户 home 目录文件系统启用了配额,并且软限制为 200,000KB,硬限制为 400,000KB。文件限制的设置为零,这表示没有设置限制,用户可以设置并创建任意数目的文件。

fs /export/home blocks (soft = 200000, hard = 400000) inodes (soft = 0,
hard = 0)



如果有更多的文件系统具有配额,那么您需要为这些文件系统配置更多的行。

如果您需要对多个用户配置配额,那么可以首先为一个用户设置配额,然后对 edquota 使用 -p 命令行选项。这将使用指定的用户作为基础来创建新的用户。例如,要使用 mc 的设置为用户名 slp、tw 和 sh 设置配额,请执行下面的命令:
  1. $ edquota -p mc slp tw sh
复制代码
使用配额进行文件限制警告

当用户创建一个超过其软限制的文件时,他们将会得到下面的警告:

quota_ufs: Warning: over disk limit (pid 1738, uid 101, inum 94, fs /export/home)



请注意,留给用户 7 天的时间更正该问题,您可以使用 edquota -t 来更改这个期限。

如果用户试图创建超过硬限制的文件,那么系统将终止写进程并根据相应的限制来截断该文件:
  1. $ mkfile 210000k overlimit
  2. quota_ufs: over hard disk limit (pid 1843, uid 101, inum 130, fs
  3. /export/home)
  4. overlimit: initialized 191873024 of 215040000 bytes: Disc quota exceeded
复制代码
通过运行 quota 命令,任何用户都可以检查他们自己的配额限制和磁盘使用情况:
  1. $ quota
  2. Over disk quota on /export/home, remove 199993K within 7.0 days
复制代码
配额管理

使用 quota 命令,系统管理员可以检查任何用户的配额,您应该使用 -v 命令行选项以提供关于文件系统、使用情况和限制信息的完整报告(请参见清单 8)。

清单 8. 使用 -v 选项
  1. $ quota -v mc
  2. Disk quotas for mc (uid 101):
  3. Filesystem     usage  quota  limit    timeleft  files  quota  limit   
  4. timeleft
  5. /export/home  399993 200000 400000    6.9 days    151      0      0
复制代码
要获得某个文件系统中详细描述所有用户的磁盘和配额使用情况的报告,可以使用 repquota 命令,并指定要报告的文件系统(请参见清单 9)。

清单 9. 使用 repquote 命令
  1. $ repquota -v /export/home
  2. /dev/dsk/c0t0d0s7 (/export/home):
  3.                       Block limits                  File limits
  4. User           used   soft   hard  timeleft  used   soft   hard timeleft
  5. mc        +- 399993 200000 400000  6.9 days   151      0      0     
复制代码
要确保配额信息保持最新,您应该使用 quotacheck 命令。这将利用用来报告配额信息的配额信息对文件存储数据进行验证。您应该使用 cron 来自动地运行这项任务,每天一次比较合适(因为这个过程是比较耗时的)。

配额的技巧和陷井

配额系统提供了监视和自动管理的最佳组合,但是您应该注意启用了配额的文件系统以及您所设置的限制,因为它们可能会妨碍用户的工作,而不是控制他们的磁盘使用情况。

例如,与您进行的使用配置相比,程序员可能需要更多的空间来构建一个应用程序。通过提供一个不受限制的编译区域(通过设置一个可选的临时目录),您可以在维持他们的 home 目录配额的同时避开这个问题,或者在设置很高的硬限制(甚至可能是该文件系统的最大容量)的同时,设置合适的软限制。

其结果应该是当达到软限制时给出一个警告,而不会真正地实施硬限制。用户应该仍然可以构建和创建临时文件,但是因为在构建的过程中会删除这些文件,所以不应该禁止用户创建他们所需的文件。

配额还可以用来帮助完成监视任务,并提醒您关于特殊用户帐户的空间使用情况。我过去曾使用配额来监视 Web 用户帐户,即所谓的 nobody 帐户和其他帐户,以确保它们无法向不应具有访问权限的文件系统中写入文件。要完成这项任务,可以将您需要保护的文件系统和用户的硬限制设置为 1KB。

自动监视

手动监视磁盘空间使用情况是可行的,但是您并不希望不停地运行 df(甚至 du)来确定已使用的或可用的磁盘空间。您可以使这个过程自动化,并且当可用空间降低到一定的级别时,自动地向管理员(或者管理员组)发送电子邮件。清单 10 中的脚本用来监视磁盘空间,您可以设置警告 (warninglimit) 和紧急情况 (lowlimit) 限制,以及进行检查的文件系统的列表。

清单 10. 监视磁盘空间
  1. #!/bin/sh

  2. warninglimit=500000
  3. lowlimit=250000

  4. filesystems="/export/data /export/home /"

  5. for fs in $filesystems
  6. do
  7.         size=`df -k $fs|grep $fs|awk '{ print $4; }'`
  8.         if [ $size -le $lowlimit ]
  9.         then
  10.                 mailx -s "URGENT: Low disk space for $fs ($size)"
  11.                 break
  12.         fi
  13.         if [ $size -le $warninglimit ]
  14.         then
  15.                 mailx -s "WARNING: Low disk space for $fs ($size)"
  16. fi
  17. done
复制代码
其中关键的一行是提取每个文件系统中空闲磁盘空间的大小:
  1. size=`df -k $fs|grep $fs|awk '{ print $4; }'`
复制代码
该脚本使用 df 仅提取了要进行 grep 的行,然后使用 awk 提取数据的第 4 列,该列是空闲空间的大小。

然后,您可以根据 warninglimit/lowlimit 来检查空闲空间,并生成合适的错误。要避免系统同时发生下限和警告错误,该脚本首先检查下限,并在尝试测试警告之前使用 break 跳到循环中的下一个文件系统。

 
阅读(898) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~