go 语言 获取物理机器主要参数

获取disk参数

命令行:

df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 41153856 28058544 10998160 72% /
tmpfs 3925384 0 3925384 0% /dev/shm
/dev/sda1 487652 144402 317650 32% /boot
/dev/sda5 915383628 307557352 561320756 36% /home

通过/proc虚拟文件系统

cat /proc/diskstats
输出:
1 0 ram0 0 0 0 0 0 0 0 0 0 0 0
1 1 ram1 0 0 0 0 0 0 0 0 0 0 0
1 2 ram2 0 0 0 0 0 0 0 0 0 0 0
1 3 ram3 0 0 0 0 0 0 0 0 0 0 0
1 4 ram4 0 0 0 0 0 0 0 0 0 0 0
1 5 ram5 0 0 0 0 0 0 0 0 0 0 0
1 6 ram6 0 0 0 0 0 0 0 0 0 0 0
1 7 ram7 0 0 0 0 0 0 0 0 0 0 0
1 8 ram8 0 0 0 0 0 0 0 0 0 0 0
1 9 ram9 0 0 0 0 0 0 0 0 0 0 0
1 10 ram10 0 0 0 0 0 0 0 0 0 0 0
1 11 ram11 0 0 0 0 0 0 0 0 0 0 0
1 12 ram12 0 0 0 0 0 0 0 0 0 0 0
1 13 ram13 0 0 0 0 0 0 0 0 0 0 0
1 14 ram14 0 0 0 0 0 0 0 0 0 0 0
1 15 ram15 0 0 0 0 0 0 0 0 0 0 0
7 0 loop0 0 0 0 0 0 0 0 0 0 0 0
7 1 loop1 0 0 0 0 0 0 0 0 0 0 0
7 2 loop2 0 0 0 0 0 0 0 0 0 0 0
7 3 loop3 0 0 0 0 0 0 0 0 0 0 0
7 4 loop4 0 0 0 0 0 0 0 0 0 0 0
7 5 loop5 0 0 0 0 0 0 0 0 0 0 0
7 6 loop6 0 0 0 0 0 0 0 0 0 0 0
7 7 loop7 0 0 0 0 0 0 0 0 0 0 0
11 0 sr0 0 0 0 0 0 0 0 0 0 0 0
8 0 sda 1344106 1663542 29293600 2377613 270750 5550066 46583400 27877737 0 3015302 30258156
8 1 sda1 696 275 27488 597 20 6 64 531 0 1011 1127
8 2 sda2 116010 51679 5829362 327116 167370 1100011 10139128 2335122 0 1163309 2662218
8 3 sda3 6206 23271 235816 39420 8468 856234 6928160 2516768 0 50862 2557927
8 4 sda4 3 0 12 86 0 0 0 0 0 86 86
8 5 sda5 1221018 1588316 23199530 2010088 94071 3593815 29516048 23017612 0 1998328 25028788
8 16 sdb 0 0 0 0 0 0 0 0 0 0 0
8 32 sdc 0 0 0 0 0 0 0 0 0 0 0
8 80 sdf 0 0 0 0 0 0 0 0 0 0 0
8 64 sde 0 0 0 0 0 0 0 0 0 0 0
8 48 sdd 0 0 0 0 0 0 0 0 0 0 0

go代码(读取/proc/diskstats来实现)

package disk

import "golang.org/x/sys/unix"

// Usage returns a file system usage. path is a filessytem path such
// as "/", not device file path like "/dev/vda1".  If you want to use
// a return value of disk.Partitions, use "Mountpoint" not "Device".
func Usage(path string) (*UsageStat, error) {
        stat := unix.Statfs_t{}
        err := unix.Statfs(path, &stat)
        if err != nil {
                return nil, err
        }
        bsize := stat.Bsize

        ret := &UsageStat{
                Path:        path,
                Fstype:      getFsType(stat),
                Total:       (uint64(stat.Blocks) * uint64(bsize)),
                Free:        (uint64(stat.Bavail) * uint64(bsize)),
                InodesTotal: (uint64(stat.Files)),
                InodesFree:  (uint64(stat.Ffree)),
        }

        // if could not get InodesTotal, return empty
        if ret.InodesTotal < ret.InodesFree {
                return ret, nil
        }
        ret.InodesUsed = (ret.InodesTotal - ret.InodesFree)
        ret.Used = (uint64(stat.Blocks) - uint64(stat.Bfree)) * uint64(bsize)

        
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值