Как я могу хранить файлы в смонтированной общей папке?

18

Я использую виртуальную машину Fedora Workstation на хосте Ubuntu.
Я создал папку /home/cl/shareв гостевой системе и подключил общую папку /media/cl/system/virtual/shareкак root, следуя инструкциям из linux-kvm :

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

Я могу получить доступ (читать) файлы и папки из общих папок, но я не могу писать в них.

Пример: я пытаюсь сохранить файл mount-share.txtв папку /home/cl/share.

Обе папки (host и guest) имеют права на чтение и запись, но я получаю сообщение об ошибке

Error opening file '/home/cl/share/mount-share.txt': Operation not permitted.
  • Операционная система хоста: Ubuntu 15.10, 64-битный рабочий стол
  • Гостевая операционная система: 64-битная рабочая станция Fedora 23
  • Программное обеспечение для виртуализации: qemu qemu-kvm virt-manager
  • Расположение хост-системы: 1-й встроенный SSD - формат ext4
  • Расположение виртуального хранилища: 2-й встроенный жесткий диск - формат NTFS
  • Расположение общих папок: 2-й встроенный жесткий диск - формат NTFS

вирт-менеджер

Как я могу разделить каталог между гостем и хостом и разрешить гостю доступ на чтение и запись?

sudo chmod a+x /media/clи sudo 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
сл-NetBox
источник
Почему вы используете NTFS для обмена между двумя системами Linux? Вы пробовали эту же настройку с более родным форматом файла?
Клаату фон Шлакер
2
@KlaatuvonSchlacker: второй жесткий диск содержит все, что не связано с операционной системой, и отформатирован с помощью ntfs, чтобы обеспечить гибкость в случае, если я хочу получить доступ к данным в других операционных системах, таких как Windows. Когда я использую VirtualBox для виртуализации, все работает правильно в отношении общего доступа к папкам.
cl-netbox
Что касается сообщения об ошибке при попытке записи в файловую систему: вы получаете эту ошибку при попытке записи с хоста или только при попытке записи с гостя?
Wildcard
@Wildcard: я получаю сообщение об ошибке при попытке записать (сохранить) что-либо из гостя.
cl-netbox

Ответы:

14

Я мог воспроизвести проблему в моей системе.
Ваша главная проблема - ограничения ACL вашего хоста.
По этой причине измените атрибуты ACL libvirt-qemuпользователя:

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

Измените Modeнастройки для Filesystem /host с Passthroughна Mapped.


Почему? Вот почему:

Ваша гостевая система работает как libvirt-qemuпользователь, и ваши настройки ACL ограничивают разрешения этого пользователя.

user:libvirt-qemu:--x

Правильный вывод getfaclдолжен быть:

user:libvirt-qemu:rwx
AB
источник
2

Если ваша основная цель - просто обмениваться файлами назад и вперед, и вы открыты для использования TCP, вы можете просто обмениваться файлами через ssh или аналогичные.

Например, если вы перенаправите локальный порт на разумный порт гостя, вы сможете использовать этот порт для доступа. Я использую SSH / SCP.

При запуске моей виртуальной машины:

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

А затем для доступа к ВМ я использую SSH; Я открываю терминал на моей машине:

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

fishили sshfsв любом файловом менеджере GUI, который вы используете, работает так же хорошо, пока вы устанавливаете порт.

Клаату фон Шлакер
источник
1
Что бы я сделал: на вашем хосте Ubuntu настройте NFS-сервер, обслуживающий общий каталог (вы можете сделать его доступным для чтения и записи для клиента). И просто смонтируйте его на клиенте Fedora VM. Поскольку у вас есть возможность подключения по IP, это, скорее всего, будет работать как шарм.
KWubbufetowicz