如何将文件存储在已安装的共享文件夹中?


18

我在Ubuntu主机上运行Fedora Workstation虚拟机。
/home/cl/share在guest 虚拟机中创建了一个文件夹,并/media/cl/system/virtual/share按照linux-kvm的说明将共享文件夹作为root 挂载:

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

我可以从共享文件夹访问(读取)文件和文件夹,但无法对其进行写入。

一个例子:我试图将文件保存到文件mount-share.txt/home/cl/share

这两个文件夹(主机和来宾)都具有读写权限,但是我仍然收到错误

Error opening file '/home/cl/share/mount-share.txt': Operation not permitted.
  • 主机操作系统:Ubuntu 15.10桌面64位
  • 来宾操作系统:Fedora 23工作站64位
  • 虚拟化软件: qemu qemu-kvm virt-manager
  • 主机系统位置:1个内置SSD-ext4格式
  • 虚拟存储位置:第2个内置HDD-NTFS格式
  • 共享文件夹位置:第2个内置HDD-NTFS格式

经理

如何在来宾和主机之间共享目录,并允许来宾进行读写访问?

sudo chmod a+x /media/clsudo chmod -R 777 /media没有改变这种情况。

访客系统:

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: -  

主机系统:

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

为什么要使用NTFS在两个Linux系统之间共享?您是否尝试过使用更本地的文件格式进行相同的设置?
Klaatu von Schlacker,2016年

2
@KlaatuvonSchlacker:第二个HDD包含与操作系统无关的所有内容,并使用ntfs格式化,以便在我想使用其他操作系统(例如Windows)访问数据时灵活使用。当我使用VirtualBox进行虚拟化时,有关文件夹共享的所有操作均正常进行。
cl-netbox

关于尝试写入文件系统时的错误消息:尝试从主机写入还是仅从来宾写入,会得到该错误?
通配符

@Wildcard:尝试从来宾内部写入(存储)内容时,我收到错误消息。
cl-netbox

Answers:


14

我可以在系统上重现该问题。
您的主要问题是主机的ACL限制。
因此,请更改libvirt-qemu用户的ACL属性:

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

将的Mode设置Filesystem /host 从更改PassthroughMapped


为什么?这就是为什么:

您的访客系统以libvirt-qemu用户身份运行,并且您的ACL设置限制了该用户的权限。

user:libvirt-qemu:--x

的正确输出getfacl应为:

user:libvirt-qemu:rwx

2

如果您的主要目标只是来回共享文件,并且愿意使用TCP,则可以通过ssh或类似文件共享文件。

例如,如果您将本地端口重定向到客户机上的合理端口,则应该能够使用该端口进行访问。我使用SSH / SCP。

启动虚拟机时:

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

然后使用SSH访问VM;我在主机上打开一个终端:

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

fishsshfs在您使用的任何GUI文件管理器中都可以正常工作,只要您设置端口即可。


1
我要做什么:在Ubuntu主机上,配置为共享目录提供服务的NFS服务器(您可以使其对客户端进行读写)。只需将其安装在Fedora VM客户端上即可。由于您具有IP连接性,因此很可能会像魅力一样工作。
KWubbufetowicz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.