21.03.2013 14:04, Lystopad Aleksandr пишет:

> On Thu, Mar 21, 2013 at 01:30:26PM +0700
> eu...@grosbein.net wrote about "Re: [freebsd] bsnmpd and 
> hrStorageAllocationUnits":
> 
>> То есть, net-snmp таки делает трансляцию сам, причём по дефолту.
>> Осталось всего ничего: дописать такую же трансляцию в код 
>> bsnmpd/modules/snmp_hostres
> 
> Евгений, спасибо.
> Хорошая раобта!
> Я как это и подозревал, но думал, что есть способ решить это не
> залезая в исходники.. :(

Патч получился достаточно тривиальный:

http://www.grosbein.net/freebsd/patches/shift.diff

Применять:

cd /usr/src
patch < shift.diff
cd usr.sbin/bsnmpd
make all install
service bsnmpd restart

Патч включает безусловную трансляцию значений для файловых систем,
у которых размер больше чем INT_MAX блоков, 2^31*512 байт, 1 терабайт.

Потестил у себя, работает:

# truncate -s 3T f # делаем трехтерабайтный дырявый файл
# mdconfig -af f
md0
# newfs -O2 -b 4096 -f 512 -i $((1024*1024*1024)) /dev/md0 >/dev/null #файл 
разбухает до 18G
# mount /dev/md0 /mnt/tmp
# rmdir /mnt/tmp/.snap; dd if=/dev/zero bs=2048 count=1000 of=/mnt/tmp/f2
# df -k /mnt/tmp
Filesystem 1024-blocks Used      Avail Capacity  Mounted on
/dev/md0    3217454200 2004 2960055860     0%    /mnt/tmp

snmpwalk теперь говорит:

HOST-RESOURCES-MIB::hrStorageType.393 = OID: 
HOST-RESOURCES-TYPES::hrFSBerkeleyFFS
HOST-RESOURCES-MIB::hrStorageDescr.393 = STRING: /mnt/tmp, type: ufs, dev: 
/dev/md0
HOST-RESOURCES-MIB::hrStorageAllocationUnits.393 = INTEGER: 2048 Bytes
HOST-RESOURCES-MIB::hrStorageSize.393 = INTEGER: 1608727100
HOST-RESOURCES-MIB::hrStorageUsed.393 = INTEGER: 1002

2048*3294673100800=3217454200*1024, всё верно.

Ответить