21.03.2013 02:06, Lystopad Aleksandr пишет: > Hello, Eugene Grosbein! > > On Thu, Mar 21, 2013 at 12:17:16AM +0700 > [email protected] wrote about "Re: [freebsd] bsnmpd and > hrStorageAllocationUnits": > >> Пример-то вывода из таблички hrStorageTable для этой ZFS можно увидеть? > > HOST-RESOURCES-MIB::hrStorageDescr.14 = STRING: /hosting, type: zfs, dev: > zdata > HOST-RESOURCES-MIB::hrStorageUsed.14 = INTEGER: 107 > HOST-RESOURCES-MIB::hrStorageSize.14 = INTEGER: 2147483647 > HOST-RESOURCES-MIB::hrStorageAllocationUnits.14 = INTEGER: 512 Bytes > > # zfs list /hosting > NAME USED AVAIL REFER MOUNTPOINT > zdata 177K 40.9T 53.5K /hosting
В случае UFS в качестве hrStorageAllocationUnits отдаётся параметр fragment size с файловой системы, а в качестве hrStorageSize параметр blocks, например: # df -k /backup Filesystem 1024-blocks Used Avail Capacity Mounted on /dev/da1s1a 71078336 18127624 47264448 28% /backup # dumpfs /backup | egrep 'blocks|fsize' ncg 24 size 8956617 blocks 8884792 fsize 8192 shift 13 mask 0xffffe000 Видим, что 8192*8884792/1024=71078336. При этом в коде модуля hostres у bsnmpd нет различия между типами файловых систем, что ядро отдало, то bsnmpd и показывает, обрезая лишь переполнения 32-битных значений (потому что в стандартном MIB они 32 бита). Это тут: /usr/src/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_storage_tbl.c Функция storage_OS_get_fs() использует системный вызов getfsstat() для получения этой информации из ядра. Выходит, само ядро рапортует такие значения. Тут вопрос: имеет ли право SNMP-агент (bsnmpd) транслировать полученные от ядра циферки, чтобы уложиться в 32-битное количество блоков? Сейчас никакой трансляции нет.
