为了能够测试磁盘不足的情况,我尝试设置一个基于文件的大小受限的文件系统,如下所示:
$ dd if=/dev/zero of=file.fs bs=1MiB count=1
$ mkfs.ext4 file.fs
$ udisksctl loop-setup -f file.fs
Mapped file file.fs as /dev/loop1.
$ udisksctl mount --options rw -b /dev/loop1
Mounted /dev/loop1 at /media/myuser/29877abe-283b-4345-a48d-d172b7252e39
$ ls -l /media/myuser/29877abe-283b-4345-a48d-d172b7252e39/
total 16
drwx------ 2 root root 16384 Dec 2 22:08 lost+found
但如您所见,它仅对 root 可写。如何使它对运行命令的用户可写?
我不能chown
或chmod
它,因为这也给出了“不允许操作”。
我尝试使用 udisksctl 的一些选项-o uid=<id>
,但随后出现有关不允许安装选项的错误。
因为这应该能够为普通用户运行,所以我不能使用 root 或 sudo。
我使用的是 Ubuntu 22.04.1。
答案1
是的,这有点卑鄙:)但你可以解决这个问题:
mkfs.ext4
采用一个-d directory/
选项,您可以使用该选项指定包含文件系统初始内容的目录;如果您已经知道稍后要填充哪些目录,那么这将是一个很好的起点。
mkfs.xfs
支持-p protofile
;这可能正是你想做的。一个文件myprotofile
只包含以下内容:
thislinejustforbackwardscompatibility/samefornextline
1337 42
d--777 1234 5678
其中第一行只是一个用于向后兼容的字符串,它将被忽略;第二行必须包含两个将被忽略的数字。 (查看man mkfs.xfs
更多详细信息,比我从头顶上记得的更多。)
第三行包含一个filemode uid gid
元组,描述根目录。将 1234 替换为您选择的用户 ID,将 5678 替换为您选择的组 ID。
随后的
mkfs.xfs -p myprotofile -f file.fs
应该可以(但是对于默认配置,您的图像文件大小需要至少为 16 MB mkfs.xfs
),所以
dd if=/dev/zero of=file.fs bs=1MiB count=16
mkfs.xfs -p myprotofile -f file.fs
udisksctl loop-setup -f file.fs
在我的系统上工作并自动挂载文件系统 rw (但在你的系统上不一定是这种情况 - 你的挂载应该可以工作;但--options rw
似乎有点多余)。