我使用以下命令在运行 Ubuntu Server 16.04.5 LTS 的服务器上创建了一个 Ubuntu VM:
sudo virt-install \
--name TEST \
--memory 2048 \
--vcpus 2 \
--location 'http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/' \
--os-variant ubuntu16.04 \
--disk path=/pools/pool0/images/vm/test,size=150,bus=virtio,sparse=no,format=qcow2 \
--filesystem type=mount,source=/pools/pool0/volumes/shared,target=shared,mode=mapped \
--network network=vms \
--graphics none \
--virt-type kvm \
--hvm \
--console pty,target_type=serial \
--extra-args 'console=ttyS0,115200n8 serial'
请注意,我创建了一个共享文件夹,shared
使用映射访问权限进行调用,以便允许在来宾上读取和写入。
然后我使用以下命令启动虚拟机:
virsh start TEST --console
在来宾内部,我已编辑/etc/fstab
以使用此行自动挂载共享文件夹,其中 UID 1000 是我的用户,GID 1000 是不包含其他成员的关联组:
shared /mnt 9p trans=virtio,version=9p2000.L,rw,uid=1000,gid=1000 0 0
在/mnt
客户机的目录中,运行ls -ln
将得到以下输出:
$ ls -ln /mnt
total 42
drwxrwxr-x 8 1000 1000 8 Jul 28 23:52 Backups
drwxrwxr-x 6 1000 1000 6 Dec 28 00:15 Media
drwxrwxr-x 6 1000 1000 67 Mar 31 2018 Misc
drwxrwxr-x 2 1000 1000 4 Mar 31 2018 Recipes
ls -ln
在目录中的主机上运行时,我得到相同的输出/pools/pool0/volumes/shared
:
$ ls -ln /pools/pool0/volumes/shared
total 42
drwxrwxr-x 8 1000 1000 8 Jul 28 23:52 Backups
drwxrwxr-x 6 1000 1000 6 Dec 28 00:15 Media
drwxrwxr-x 6 1000 1000 67 Mar 31 2018 Misc
drwxrwxr-x 2 1000 1000 4 Mar 31 2018 Recipes
在来宾中,我可以像我自己(非特权用户)一样创建和修改文件和文件夹:
$ mkdir /mnt/Media/test-dir
$ touch /mnt/Media/test-file
$ ls -ln /mnt/Media
total 75
drwxrwxr-x 199 1000 1000 199 Dec 28 22:07 Movies
drwxrwxr-x 152 1000 1000 153 Dec 25 16:26 Music
drwxrwxr-x 75 1000 1000 75 Jul 16 21:02 Photos
drwxrwxr-x 2 1000 1000 2 Dec 29 20:30 test-dir
-rw-rw-r-- 1 1000 1000 0 Dec 29 20:31 test-file
drwxrwxr-x 15 1000 1000 15 Dec 18 15:40 TV Shows
但是,在主机操作系统上,这些文件和文件夹仅被授予 root 访问权限:
$ ls -ln /pools/pool0/volumes/shared/Media
total 75
drwxrwxr-x 199 1000 1000 199 Dec 28 22:07 Movies
drwxrwxr-x 152 1000 1000 153 Dec 25 16:26 Music
drwxrwxr-x 75 1000 1000 75 Jul 16 21:02 Photos
drwx------ 2 0 0 2 Dec 29 20:30 test-dir
-rw------- 1 0 0 0 Dec 29 20:31 test-file
drwxrwxr-x 15 1000 1000 15 Dec 18 15:40 TV Shows
1000
我在服务器上运行自动化脚本,为了使这些脚本正常工作,我需要使用 UID 、 GID 1000
、目录权限rwxrwxr-x
(775) 和文件权限(664)创建这些文件夹和目录rw-rw-r--
。我不想每次创建新文件/目录时都手动chmod
运行。chown
sudo
我需要解决这个问题,最好不必从头开始重新安装虚拟机。
答案1
对于任何好奇的人,我没有找到问题的解决方案。然而,我通过举办一个桑巴分享在主机上(使用 dperson/samba docker 容器),然后在来宾上,我安装了cifs-utils
此行,然后将其添加到\etc\fstab
:
//192.168.1.7/Shared /media/shared cifs guest,uid=1000,iocharset=utf8,vers=3.0 0 0
其中192.168.1.7
是主机的 IP 地址,Shared
是 Samba 共享的名称,/media/shared
是我在来宾中安装共享的位置。
答案2
您需要使用mode=passthrough
而不是mode=mapped
.这在这里得到了很好的解释:https://rabexc.org/posts/p9-setup-in-libvirt。