Назад | Перейти на главную страницу

Есть ли программный способ определения свободного дискового пространства на сервере Linux?

У меня есть набор серверов Linux, каждый из которых имеет локальный жесткий диск с каталогом / tmp. Иногда каталог / tmp на сервере заполняется и вызывает ошибки. Я хочу автоматизировать процесс проверки свободного места на каждом локальном диске, чтобы / tmp можно было очистить до того, как это вызовет проблему. Есть ли элегантный программный способ определить количество свободного места на диске в Linux? Я знаю, что "классический" ответ - бежать

df -h

на каждом сервере (возможно, используя инструмент распределенной оболочки, такой как dsh) и напишите сценарий для анализа вывода. Многие такие скрипты можно найти в Интернете.. Я ищу более элегантное решение, например новую дисковую утилиту, которая возвращает структурированные данные или некоторую информацию, скрытую в файловой системе / proc.

Команда DU использует statfs для сбора данных из смонтированных файловых систем. Файловые системы монтирования, кажется, определяются при просмотре файла 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
...

Поэтому, если вы хотите связать детали, вы можете быстро взломать скрипт python (или любой другой), который вызывает statfs /statvfs а затем предоставить вам информацию в любом удобном для вас формате.