web-dev-qa-db-ja.com

マウントされた共有フォルダにファイルを保存するにはどうすればよいですか?

UbuntuホストでFedora Workstation仮想マシンを実行しています。
ゲストにフォルダー/home/cl/shareを作成し、共有フォルダー/media/cl/system/virtual/shareをルートとしてマウントしました linux-kvm の指示に従ってください:

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ビット
  • 仮想化ソフトウェア:qemuqemu-kvmvirt-manager
  • ホストシステムの場所:最初の組み込みSSD-ext4形式
  • 仮想ストレージの場所:2番目の内蔵HDD-NTFSフォーマット
  • 共有フォルダーの場所:2番目の内蔵HDD-NTFS形式

virt-manager

ゲストとホストの間でディレクトリを共有し、ゲストに読み取り/書き込みアクセスを許可するにはどうすればよいですか?

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
18
cl-netbox

システムで問題を再現できました。
主な問題は、ホストのACL制限です。
このため、libvirt-qemuユーザーのACL属性を変更します。

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

変更 Mode の設定 Filesystem /HostPassthroughからMappedへ。


なぜ?それが理由です:

ゲストシステムはlibvirt-qemuユーザーとして実行され、ACL設定はこのユーザーの権限を制限します。

user:libvirt-qemu:--x

getfaclの正しい出力は次のようになります。

user:libvirt-qemu:rwx
14
A.B.

主な目的が単にファイルをやり取りすることであり、TCPを使用することを受け入れる場合は、sshまたは同様の方法でファイルを共有するだけです。

たとえば、ローカルポートをゲストの適切なポートにリダイレクトすると、そのポートをアクセスに使用できるはずです。 SSH/SCPを使用しています。

VMを起動するとき:

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

そして、VMにアクセスするには、SSHを使用します。ホストマシンでターミナルを開きます。

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

fishまたはsshfsは、ポートを設定する限り、使用するGUIファイルマネージャーで同様に機能します。