Como posso montar uma imagem de disco ext3 do Linux em um Mac em uma VM Linux em execução no VMWare?

3

Eu tenho uma imagem de disco ext3 do Linux que baixei no meu Mac (executando o macOS Sierra 10.12.3). Eu também tenho uma VM Linux (Ubuntu 16.04) em execução no VMWare (Fusion versão 8.5.3) no Mac. Eu gostaria de montar esta imagem de disco na VM Linux.

Eu compartilhei a pasta no Mac que contém a imagem do disco para a VM, e posso montá-la usando este comando:

$ vmhgfs-fuse ".host:/$(vmware-hgfsclient)" ~/Shared

Mas quando tento montar uma imagem de disco nesse diretório, recebo um erro de permissão negada:

$ 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

A mesma coisa acontece mesmo se eu tentar montá-lo somente leitura:

$ 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

O diretório compartilhado é montado como leitura-gravação:

vmhgfs-fuse on /home/dave/Shared type fuse.vmhgfs-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)

E o arquivo de imagem de disco é legível e gravável por todos:

$ cd ~/Shared/
$ ls -lh linux-ext3.img 
-rw-rw-rw- 1 501 dialout 25G Feb  2 21:01 linux-ext3.img

Portanto, não entendo por que estou recebendo este erro.

    
por Dave Dribin 16.02.2017 / 05:51

2 respostas

1

Como alternativa, descobri como evitar montar qualquer coisa como root, usando fuse-ext2 . Primeiro, isso precisa ser instalado:

$ sudo apt-get install fuseext2

E depois monte assim:

$ vmhgfs-fuse ".host:/$(vmware-hgfsclient)" ~/Shared
$ fuse-ext2 ~/Shared/linux-ext3.img ~/mnt/ -o ro
$ ls ~/mnt/
...

Observe que isso não usa sudo e é visível apenas para seu usuário. Para desmontar, use:

$ fusermount -u ~/mnt
$ fusermount -u ~/Shared
    
por 17.02.2017 / 06:28
4

Graças a uma dica do @dirkt acima, consegui determinar que vmhgfs-fuse não permite o acesso root, por padrão. Do vmhgfs-fuse --help output:

    -o allow_other         allow access to other users
    -o allow_root          allow access to root

A tentativa de -o allow_root falhou inicialmente:

$ 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

E, com certeza, /etc/fuse.conf tem user_allow_other comentou:

# Allow non-root users to specify the allow_other or allow_root mount options.
#user_allow_other

Mas a execução de vmhgfs-fuse como root finalmente funcionou:

$ sudo vmhgfs-fuse -o allow_other ".host:/$(vmware-hgfsclient)" ~/Shared
$ sudo mount -t ext3 -o loop,ro ~/Shared/linux-ext3.img /mnt
$ ls /mnt/
...

Observe o uso de allow_other not allow_root . Usar sudo plus -o allow_root é redundante, pois vmhgfs-fuse concede acesso apenas ao usuário que executa o comando. No entanto, sudo sozinho significa apenas root pode acessar ~/Shared , mas não seu usuário comum. Usar sudo plus -o allow_other permite que o root e seu usuário normal (e qualquer outra pessoa) acessem ~/Shared . Pode ser mais seguro, em um ambiente verdadeiramente compartilhado, habilitar user_allow_other em /etc/fuse.conf para que você possa usar -o allow_root e evitar executar vmhgfs-fuse com sudo .

E, para registro, desmontar tudo isso:

$ sudo umount /mnt
$ sudo fusermount -u ~/Shared
    
por 16.02.2017 / 17:32