如何获得免费索引节点的数量?(相当于"df-i")



Go中是否有方法检查文件系统上可用/已使用/总索引节点的数量?

我想要df -i返回的内容,如果可能的话,我不想调用df

df:示例

# On macOs 10.15 (-i not needed here)
df /
Filesystem   512-blocks     Used Available Capacity iused      ifree %iused  Mounted on
/dev/disk1s2  236568496 22038704  44026328    34%  488339 1182354141    0%   /
# On Ubuntu 18.04
df -i /
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vda1      2621440 219719 2401721    9% /

您可以使用syscall。Statfs。它的参数是路径名和指向Statfs_t结构的指针。它在结构中填充包含路径名指定的文件或目录的文件系统的统计信息。通常使用./或装载点的路径名。

下面是一个Go程序,它以路径名为参数并显示inode信息。

package main
import (
"fmt"
"os"
"syscall"
)
func main() {
var statfs syscall.Statfs_t
path := os.Args[1]
if err := syscall.Statfs(path, &statfs); err != nil {
fmt.Fprintf(os.Stderr, "Cannot stat %s: %vn", path, err)
os.Exit(1)
}
fmt.Printf("Inodes: total %d, free %dn", statfs.Files, statfs.Ffree)
}

在您提到的macOs和Ubuntu系统上,您可以使用

func Fstatfs(fd int, buf *Statfs_t) (err error)

假设unix.Fstatfs调用没有出错,那么输入参数*unix.Statfs_t将被更新。

unix.Statfs_t.Filesunix.Statfs_t.Ffree分别是与unix.Fstatfs调用的第一分段fd相对应的文件系统的索引节点总数和空闲索引节点数。


另请参阅:statfs系统调用的手册

最新更新