如何在 VMWare 中运行的 Linux VM 中的 Mac 上安装 Linux ext3 磁盘映像?

如何在 VMWare 中运行的 Linux VM 中的 Mac 上安装 Linux ext3 磁盘映像?

我有一个在 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.confuser_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。使用sudoplus-o allow_root是多余的,因为vmhgfs-fuse只向运行该命令的用户授予访问权限。然而,sudo单独意味着仅有的 root可以访问~/Shared,但普通用户不能。使用sudoplus-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

相关内容