Como posso armazenar arquivos na pasta compartilhada montada?

18

Estou executando uma máquina virtual da Estação de Trabalho Fedora em um host Ubuntu.
Criei uma pasta /home/cl/shareno convidado e montei a pasta compartilhada /media/cl/system/virtual/sharecomo raiz, seguindo as instruções do linux-kvm :

mount -t 9p -o trans=virtio,version=9p2000.L /host /home/cl/share

Consigo acessar (ler) arquivos e pastas de pastas compartilhadas, mas não consigo gravar neles.

Um exemplo: Eu estou tentando salvar o arquivo mount-share.txtpara a pasta /home/cl/share.

Ambas as pastas (host e convidado) têm permissões de leitura e gravação, no entanto, recebo o erro

Error opening file '/home/cl/share/mount-share.txt': Operation not permitted.
  • Sistema operacional host: Ubuntu 15.10 desktop 64-bit
  • Sistema operacional convidado: estação de trabalho Fedora 23 de 64 bits
  • Software de virtualização: qemu qemu-kvm virt-manager
  • Localização do sistema host: 1º SSD integrado - formato ext4
  • Local de armazenamento virtual: 2º disco rígido interno - formato NTFS
  • Local das pastas compartilhadas: 2º disco rígido interno - formato NTFS

virt-manager

Como posso compartilhar um diretório entre convidado e host e permitir o acesso de leitura e gravação de convidados?

sudo chmod a+x /media/cle sudo chmod -R 777 /medianão mudou a situação.

Sistema convidado:

ls -la /home/cl/share  
total 16  
drwxrwxrwx.  1 cl cl 4096 20. Jan 14:41 .  
drwx------. 18 cl cl 4096 24. Jan 19:11 ..  
drwxrwxrwx.  1 cl cl 4096 17. Dez 09:49 fedora  
drwxrwxrwx.  1 cl cl    0  5. Jan 11:43 solus  
drwxrwxrwx.  1 cl cl    0  6. Jan 12:10 ubuntu  
drwxrwxrwx.  1 cl cl 4096 24. Jan 16:58 various    

stat /home/cl/share  
  File: ‘/home/cl/share’  
  Size: 4096         Blocks: 8          IO Block: 4096   directory  
Device: 25h/37d    Inode: 135       Links: 1  
Access: (0777/drwxrwxrwx)  Uid: ( 1000/     cl)   Gid: ( 1000/      cl)  
Access: 2016-01-27 10:11:12.566303000 +0100  
Modify: 2016-01-26 21:34:48.647707300 +0100  
Change: 2016-01-26 21:34:48.647707300 +0100  
 Birth: -  

Sistema host:

ls -ld /media /media/cl/ /media/cl/system /media/cl/system/virtual/ /media/cl/system/virtual/share  
drwxr-xr-x  3 root root 4096 Okt 22 16:06 /media  
drwxr-x---+ 6 root root 4096 Jan 24 10:49 /media/cl/  
drwxrwxrwx  1 cl   cl   4096 Jan 19 15:28 /media/cl/system  
drwxrwxrwx  1 cl   cl   4096 Jan 22 13:43 /media/cl/system/virtual/  
drwxrwxrwx  1 cl   cl   4096 Jan 20 14:41 /media/cl/system/virtual/share  

getfacl /media/cl/  
getfacl: Removing leading '/' from absolute path names  
# file: media/cl/  
# owner: root  
# group: root  
user::rwx  
user:libvirt-qemu:--x  
user:cl:r-x  
group::---  
mask::r-x  
other::---

ps aux | grep virt
root       988  0.0  0.2 1207024 39888 ?       Ssl  12:48   0:01 /usr/sbin/libvirtd  
libvirt+  1204  0.0  0.0  45268  2720 ?        S    12:48   0:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper  
root      1207  0.0  0.0  45240   368 ?        S    12:48   0:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper  
cl        4204  0.0  0.0  15184  2532 pts/2    S+   14:06   0:00 grep --color=auto virt
cl-netbox
fonte
Por que você está usando o NTFS para compartilhar entre dois sistemas linux? você tentou esta mesma configuração com um formato de arquivo mais nativo?
Klaatu von Schlacker
2
@KlaatuvonSchlacker: O segundo HDD contém tudo o que não está relacionado ao sistema operacional e é formatado com NTFS para ser flexível, caso eu queira acessar os dados com outros sistemas operacionais, como o Windows. Quando eu uso o VirtualBox para virtualização, tudo funciona corretamente em relação ao compartilhamento de pastas.
Cl-netbox
Em relação à mensagem de erro ao tentar gravar no sistema de arquivos: você recebe esse erro ao tentar gravar no host ou apenas quando tenta gravar no convidado?
Curinga
@Wildcard: Eu recebo a mensagem de erro ao tentar escrever (armazenar) algo de dentro do convidado.
Cl-netbox

Respostas:

14

Eu poderia reproduzir o problema no meu sistema.
Seu principal problema são as restrições de ACL do seu host.
Por esse motivo, altere os atributos da ACL do libvirt-qemuusuário:

sudo setfacl -R -m u:libvirt-qemu:rwx /media/cl

Altere as Modeconfigurações de Filesystem /host de Passthroughpara Mapped.


Por quê? Essa é a razão pela qual:

Seu sistema convidado é executado como libvirt-qemuusuário e as configurações da ACL restringem as permissões desse usuário.

user:libvirt-qemu:--x

A saída correta de getfacldeve ser:

user:libvirt-qemu:rwx
AB
fonte
2

Se seu objetivo principal é apenas compartilhar arquivos de um lado para o outro e você estiver aberto para usar o TCP, basta compartilhar arquivos por ssh ou similar.

Por exemplo, se você redirecionar uma porta local para uma porta sensata no convidado, poderá usar essa porta para acessar. Eu uso SSH / SCP.

Ao iniciar minha VM:

qemu-kvm [all your usual qemu options] -net nic -net user -redir tcp:22122::22

E então, para acessar a VM, eu uso o SSH; Abro um terminal na minha máquina host:

scp -P22122 myfile.txt klaatu@localhost:~/ssh-share-dir

fishou sshfsem qualquer gerenciador de arquivos da GUI usado, funciona da mesma forma, desde que você defina a porta.

Klaatu von Schlacker
fonte
11
O que eu faria: no host do Ubuntu, configure o servidor NFS que serve o diretório compartilhado (você pode fazer com que ele seja lido / gravado no cliente). E simplesmente monte-o no cliente VM do Fedora. Como você tem conectividade IP, isso provavelmente funcionará como um encanto.
KWubbufetowicz