我可以成功挂载 ext4 分区,问题是该分区上的所有文件均由 userid 1000 的用户拥有。在一台机器上,我的 userid 是 1000,但在另一台机器上是 1010。我的用户名在两台机器上相同,但我意识到文件系统存储用户 ID,而不是用户名。
我可以使用如下内容更正文件所有权:
find /mnt/example -exec chown -h 1010 {} \;
但当我将此外部驱动器安装到另一台计算机上时,我必须将文件所有权再次更正为 1000。
我想要的是提供mount
一个选项,将用户 ID 1000 映射到 1010,这样我就不必实际修改任何文件。有没有办法做到这一点?
答案1
看看绑定文件系统包裹。 bindfs 是一个 FUSE 文件系统,允许在现有文件系统之上对文件权限、文件所有权等进行各种操作。
您正在专门寻找--地图选项绑定文件系统:
--map=user1/user2:@group1/@group2:..., -o map=...
Given a mapping user1/user2, all files owned by user1 are shown as owned by user2. When user2 creates files, they are chowned to user1 in the underlying directory. When files are chowned to user2, they are chowned to user1 in the underlying directory. Works similarly for groups.
A single user or group may appear no more than once on the left and once on the right of a slash in the list of mappings. Currently, the options --force-user, --force-group, --mirror, --create-for-*, --chown-* and --chgrp-* override the corresponding behavior of this option.
Requires mounting as root.
因此,要将用户 ID 为 1001 的文件映射/mnt/wrong
到/mnt/correct
用户 ID 为 1234 的文件,请运行以下命令:
sudo bindfs --map=1001/1234 /mnt/wrong /mnt/correct
答案2
如果您的内核 >5.12 且支持文件系统(ext4 应该没问题,但直到 5.15 才添加 BTRFS 支持),您可以使用身份映射在坐骑功能中。您将需要使用挂载 ID 映射程序,直到你有一个足够新的 util-linux 来支持X-mount.idmap
功能为mount
.
一个简单的例子是: 使用mount-idmapped
当你的 uid 为 1010 的机器上时,你可以使用以下命令:
mount-idmapped --map-mount b:1000:1010:1 /mnt/example /mnt/example
有一些警告,例如您不能将两个主机 uid 映射到同一目标 uid。因此,bindfs 是一个更通用的解决方案,但这应该适用于您的用例。
答案3
您可以使用绑定文件系统。它可以将文件系统绑定到具有不同 uid/gid 的其他安装点。不过我想我只需更改 uid,这样它在两个系统上都是相同的。