ext4 上的可用磁盘空间是如何计算的?

ext4 上的可用磁盘空间是如何计算的?

我知道有一些工具df可以显示磁盘上剩余的磁盘空间,但我找不到任何有关该工具如何实际获取此信息的信息。我想文件系统会以某种方式跟踪这些信息,但我也找不到这方面的信息。

是否有关于如何从文件系统(特别是 ext4)收集此信息的简单解释或任何有助于查找此信息的术语?

答案1

你可以看看df使用什么strace

$ strace df / |& grep -i ext
statfs("/", {f_type=EXT2_SUPER_MAGIC, f_bsize=4096, f_blocks=4611519, f_bfree=864281, f_bavail=624269, f_files=1179648, f_ffree=620737, f_fsid={126240841, 1491846125}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_RELATIME}) = 0

并从man 2 statfs:

The statfs() system call returns information about a mounted
filesystem.  path is the pathname of any file within the mounted
filesystem.  buf is a pointer to a statfs structure defined
approximately as follows:

   struct statfs {
       __fsword_t f_type;    /* Type of filesystem (see below) */
       __fsword_t f_bsize;   /* Optimal transfer block size */
       fsblkcnt_t f_blocks;  /* Total data blocks in filesystem */
       fsblkcnt_t f_bfree;   /* Free blocks in filesystem */
       fsblkcnt_t f_bavail;  /* Free blocks available to
                                unprivileged user */
       fsfilcnt_t f_files;   /* Total file nodes in filesystem */
       fsfilcnt_t f_ffree;   /* Free file nodes in filesystem */
       fsid_t     f_fsid;    /* Filesystem ID */
       __fsword_t f_namelen; /* Maximum length of filenames */
       __fsword_t f_frsize;  /* Fragment size (since Linux 2.6) */
       __fsword_t f_flags;   /* Mount flags of filesystem
                                (since Linux 2.6.36) */
       __fsword_t f_spare[xxx];
                       /* Padding bytes reserved for future use */
   };

如果您只想要安装点的可用空间,statfs似乎是一个不错的选择。空闲块*块大小=空闲空间(-保留空间等)。


我想 ext4 必须保留超级块中某处的空闲块数,然后将其与块大小一起使用以获得可用空间。

相关内容