如您所知,如果没有 root_owner 选项,mke2fs 将使用运行 mke2fs 的用户的用户和组 ID。让我们在 Ubuntu 22 x86_64 (mke2fs 1.46.5 (30-Dec-2021)) 上测试它:
生成图像
mke2fs -t ext2 -I 256 -E 'lazy_itable_init=0,lazy_journal_init=0' -O '^large_file' -O '^huge_file' -L ext2test 'diskEmpty.img' 102400k
挂载镜像
gnome-disk-image-mounter -w diskEmpty.img
但是只有 root 用户可以写这个……为什么?
让我们测试 root_owner 选项:
生成图像
mke2fs -t ext2 -I 256 -E 'root_owner=1000:1000,lazy_itable_init=0,lazy_journal_init=0' -O '^large_file' -O '^huge_file' -L ext2test 'diskEmpty.img' 102400k
挂载镜像
gnome-disk-image-mounter -w diskEmpty.img
现在我可以写入我的磁盘了。
为什么我不能在没有功能的情况下写入磁盘root_owner
?
您链接到的联机帮助页实际上解释得很好,因为从 1.42 版本开始,根目录的 UID:GID 不再默认为运行 mke2fs 的用户的 UID:GID。
如果在 >1.42 版本下,您希望根目录的 UID:GID 是运行 mke2fs 的用户的 UID:GID,您必须明确指定
root_owner
作为功能列表的一部分,最终省略其 uid:gid 可选参数。这是来自 T.Ts'o 的补丁的结果(mke2fs:不要自动设置根目录 UID/GID),它明确指示:
新文件系统的根由 root 所有。使用默认权限,只有 root 可以写入它。您的会话用户很可能是普通用户(可能是 UID 1000)。