我有一个在 Mac 上下载的 Linux ext3 磁盘映像(运行 macOS Sierra 10.12.3)。我在 Mac 上的 VMWare(Fusion 版本 8.5.3)中还运行了一个 Linux VM(Ubuntu 16.04)。我想在 Linux VM 中安装此磁盘映像。
我已将 Mac 上的包含磁盘映像的文件夹共享到 VM,并且可以使用以下命令将其挂载:
$ vmhgfs-fuse ".host:/$(vmware-hgfsclient)" ~/Shared
但是当我尝试在此目录中挂载磁盘映像时,出现权限被拒绝错误:
$ sudo mount -t ext3 -o loop ~/Shared/linux-ext3.img /mnt
mount: /home/dave/Shared/linux-ext3.img: failed to setup loop device: Permission denied
即使我尝试以只读方式安装它,也会发生同样的事情:
$ sudo mount -t ext3 -o loop,ro ~/Shared/linux-ext3.img /mnt
mount: /home/dave/Shared/linux-ext3.img: failed to setup loop device: Permission denied
共享目录以读写方式挂载:
vmhgfs-fuse on /home/dave/Shared type fuse.vmhgfs-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
并且磁盘映像文件对所有人都是可读写的:
$ cd ~/Shared/
$ ls -lh linux-ext3.img
-rw-rw-rw- 1 501 dialout 25G Feb 2 21:01 linux-ext3.img
所以我不明白为什么我会收到这个错误。
答案1
感谢上面 @dirkt 的提示,我能够确定vmhgfs-fuse
默认情况下不允许 root 访问。从vmhgfs-fuse --help
输出中:
-o allow_other allow access to other users
-o allow_root allow access to root
最初尝试-o allow_root
失败:
$ vmhgfs-fuse -o allow_root ".host:/$(vmware-hgfsclient)" ~/Shared
fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
并且,果然注释掉/etc/fuse.conf
了user_allow_other
:
# Allow non-root users to specify the allow_other or allow_root mount options.
#user_allow_other
但vmhgfs-fuse
以 root 身份运行最终成功了:
$ sudo vmhgfs-fuse -o allow_other ".host:/$(vmware-hgfsclient)" ~/Shared
$ sudo mount -t ext3 -o loop,ro ~/Shared/linux-ext3.img /mnt
$ ls /mnt/
...
allow_other
请注意not的用法allow_root
。使用sudo
plus-o allow_root
是多余的,因为vmhgfs-fuse
只向运行该命令的用户授予访问权限。然而,sudo
单独意味着仅有的 root
可以访问~/Shared
,但普通用户不能。使用sudo
plus-o allow_other
允许 root 和普通用户(以及任何其他人)访问~/Shared
。在真正共享的环境中,启用 可能更安全,user_allow_other
这样/etc/fuse.conf
您就可以使用-o allow_root
并避免vmhgfs-fuse
使用运行sudo
。
并且,根据记录,要卸载所有这些:
$ sudo umount /mnt
$ sudo fusermount -u ~/Shared
答案2
另外,我发现了如何避免以 root 身份挂载任何东西,使用fuse-ext2
。首先,需要安装:
$ sudo apt-get install fuseext2
然后像这样安装它:
$ vmhgfs-fuse ".host:/$(vmware-hgfsclient)" ~/Shared
$ fuse-ext2 ~/Shared/linux-ext3.img ~/mnt/ -o ro
$ ls ~/mnt/
...
请注意,这不会使用sudo
,并且仅对您的用户可见。要卸载,请使用:
$ fusermount -u ~/mnt
$ fusermount -u ~/Shared