文件系统Inode标志:FS_IOC_GETFLAGS和FS_IOC_FSGETXATTR之间的区别

文件系统Inode标志:FS_IOC_GETFLAGS和FS_IOC_FSGETXATTR之间的区别

FS_IOC_GETFLAGSFS_IOC_FSGETXATTR ioctl命令有什么区别?两者都返回什么标志?

答案1

在 Linux 环境中,FS_IOC_GETFLAGS两者FS_IOC_FSGETXATTR都检索 inode 标志。

GETFLAGS是较旧的ioctl,并且最初来自ext2(同样,在 Linux 中);它操作的是 32 位值,因此扩展能力有限——没有太多未使用的位可用。

FSGETXATTR来自 XFS,最近(2016 年)从 XFS 转移到共享 VFS 层。它使用一种数据结构struct fsxattr,允许更多的值和更多的扩展。

这两者以及它们返回的数据的含义都定义在linux/fs.h。这些GETFLAGS标志还记录在ioctl_iflags(2)。两者之间的共同值主要对应GETFLAGS于历史上支持的标志XFS:“仅追加”、“无 atime 更新”、“无转储”、“不可变”和“同步更新”。

请注意,在这两种情况下,不同文件系统的支持有所不同,并且某些标志实际上根本不受支持。

答案2

FS_IOC_GETFLAGS是访问 BSD 样式文件标志的接口。它只是使用比 *BSD 更糟糕的界面,因为您需要打开文件才能访问。 *BSD 在 中包含这些信息struct stat,因此如果您想在 Linux 上的 /dev/ 条目中获取相关信息,您可能会导致磁带驱动器倒带其介质。

FS_IOC_FSGETXATTR是来自 XFS 的一个类似但显然不兼容的接口,自 2015 年 9 月以来,ext4 似乎也支持该接口。

结论:这两个界面都设计得很糟糕,因为它们需要打开文件才能访问。维护人员似乎并不关心他们的界面,因为他们没有通知重要用户,例如star哪些用户能够从FS_IOC_GETFLAGS界面备份和恢复标志。

相关内容