我有一组 Linux 服务器,每个服务器都有一个本地硬盘,其中有一个 /tmp 目录。有时,服务器上的 /tmp 目录会填满并导致错误。我想自动检查每个本地驱动器上的可用空间,以便在 /tmp 导致问题之前清理它。有没有一种优雅的、编程的方式来确定 Linux 上磁盘上的可用空间量?我知道“经典”的答案是运行
df -h
在每个服务器上(可能使用分布式 shell 工具,例如 dsh) 并编写脚本来解析输出。网上有很多这样的脚本。我正在寻找一个更优雅的解决方案,例如返回结构化数据的较新的磁盘实用程序,或隐藏在 /proc 文件系统中的一些信息。
答案1
DU 命令使用状态文件从已挂载的文件系统收集数据。挂载的文件系统似乎是通过查看 mtab 文件来确定的。
# strace du /
...
open("/etc/mtab", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=793, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6fdd497000
read(3, "/dev/mapper/vg-root / ext"..., 4096) = 793
read(3, "", 4096) = 0
close(3) = 0
munmap(0x7f6fdd497000, 4096) = 0
stat("/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
statfs("/", {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=118071114, f_bfree=115631354, f_bavail=109633684, f_files=29990912, f_ffree=29574660, f_fsid={-611634627, -1860045897}, f_namelen=255, f_frsize=4096}) = 0
...
因此,如果你想连接细节,你可以快速编写一个调用 statfs/ 的 python(或其他)脚本状态文件系统然后以您喜欢的格式向您提供信息。