根据文档,结构字段说明如下:
struct statfs {
__SWORD_TYPE f_type; /* type of file system (see below) */
__SWORD_TYPE f_bsize; /* optimal transfer block size */
fsblkcnt_t f_blocks; /* total data blocks in file system */
fsblkcnt_t f_bfree; /* free blocks in fs */
fsblkcnt_t f_bavail; /* free blocks available to
unprivileged user */
fsfilcnt_t f_files; /* total file nodes in file system */
fsfilcnt_t f_ffree; /* free file nodes in fs */
fsid_t f_fsid; /* file system id */
__SWORD_TYPE f_namelen; /* maximum length of filenames */
__SWORD_TYPE f_frsize; /* fragment size (since Linux 2.6) */
__SWORD_TYPE f_spare[5];
};
“ 文件系统中的总文件节点数>>”表示我们现有多少文件?它包括目录和链接吗?
什么是“ fs中的免费文件节点
”的意思?什么是f_spare
?[在某些Linux分支中(例如,在Android中),我看到f_spare
的大小为4,并定义了其他字段f_flags
。 f_flags
定义了哪些标志?
f_fsid
是唯一标识文件系统的随机数,还是什么?
根据文档,结构字段说明如下:struct statfs {__SWORD_TYPE f_type; / *文件系统的类型(见下文)* / __SWORD_TYPE f_bsize; / *最佳传输块大小* / ...
<几乎。两个文件可以共享同一个索引节点。在这种情况下,它们被硬链接并共享硬盘上的相同空间,但是在文件系统中被视为不同的文件。示例说明:
% echo Hello > test1.txt % ln test1.txt test2.txt % ls -i test1.txt test2.txt 14946320 test1.txt 14946320 test2.txt
您将在文件名左侧看到的数字是索引节点(与我的示例中的数字不同)。如您所见,它们具有相同的inode。如果您对一个文件进行更改,则相同的更改将通过另一个文件可见。什么是“ fs中的免费文件节点”?
文件系统通常具有可以跟踪的inode上限。实际类型fsfilcnt_t
设置了一个限制(在我的系统上为18446744073709551615),但最有可能是较低的限制。除非您以非常特殊的方式使用文件系统,否则通常不会出现此限制。
f_spare是什么?在某些Linux分支中(例如,在Android中),我看到f_spare的大小为4,并定义了其他字段f_flags。
f_spare
只是用于填充结构本身的备用字节。填充字节保留供将来使用。如果将来将__fsword_t
的信息添加到结构中,他们将从__fsword_t
中删除一个备用的f_spare
。例如,我的系统只有4个备用__fsword_t
(32字节)。
为f_flags定义了哪些标志?
为您的系统定义的安装标志可能有所不同,但是我的man statfs64
页面显示了这些标志:
ST_MANDLOCK
Mandatory locking is permitted on the filesystem (see fcntl(2)).
ST_NOATIME
Do not update access times; see mount(2).
ST_NODEV
Disallow access to device special files on this filesystem.
ST_NODIRATIME
Do not update directory access times; see mount(2).
ST_NOEXEC
Execution of programs is disallowed on this filesystem.
ST_NOSUID
The set-user-ID and set-group-ID bits are ignored by exec(3) for executable files on this filesystem
ST_RDONLY
This filesystem is mounted read-only.
ST_RELATIME
Update atime relative to mtime/ctime; see mount(2).
ST_SYNCHRONOUS
Writes are synched to the filesystem immediately (see the description of O_SYNC in open(2)).
ST_MANDLOCK
Mandatory locking is permitted on the filesystem (see fcntl(2)).
ST_NOATIME
Do not update access times; see mount(2).
ST_NODEV
Disallow access to device special files on this filesystem.
ST_NODIRATIME
Do not update directory access times; see mount(2).
ST_NOEXEC
Execution of programs is disallowed on this filesystem.
ST_NOSUID
The set-user-ID and set-group-ID bits are ignored by exec(3) for executable files on this filesystem
ST_RDONLY
This filesystem is mounted read-only.
ST_RELATIME
Update atime relative to mtime/ctime; see mount(2).
ST_SYNCHRONOUS
Writes are synched to the filesystem immediately (see the description of O_SYNC in open(2)).
f_fsid是唯一标识文件系统的随机数,还是什么?
直接从man statfs64
页面上:
“没人知道f_fsid应该包含什么(但请参见下文)”
以及下面的内容:f_fsid
字段
通常的想法是f_fsid包含一些随机的内容,以便该对(f_fsid,ino)唯一地确定一个文件。某些操作系统使用设备编号(或设备编号)或与文件系统类型结合使用的设备编号。几个操作系统限制仅将f_fsid字段分配给超级用户(对于非特权用户,则将其设置为零),因为导出NFS时,此字段在文件系统的文件句柄中使用,并且将其分发是出于安全考虑。
在某些操作系统下,fsid可用作sysfs(2)系统调用的第二个参数。