使用udisksctl创建可写文件系统

使用udisksctl创建可写文件系统

为了能够测试磁盘不足的情况,我尝试设置一个基于文件的大小受限的文件系统,如下所示:

$ 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 可写。如何使它对运行命令的用户可写?

我不能chownchmod它,因为这也给出了“不允许操作”。

我尝试使用 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似乎有点多余)。

相关内容