我使用以下命令在运行 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
我在我的服务器上运行自动化脚本,为了使这些脚本正常工作,我需要使用 UID 1000
、 GID创建这些文件夹和目录,目录1000
权限为rwxrwxr-x
(775),rw-rw-r--
文件权限为 (664)。我不想每次创建新文件/目录时都必须手动运行chmod
。chown
sudo
我需要解决这个问题,最好不必从头开始重新安装 VM。
对于任何好奇的人,我没有找到解决该问题的方法。但是,我通过在主机上托管一个samba 共享(使用 dperson/samba docker 容器)然后在来宾上托管一个 samba 共享,设法避免了这个问题,我安装
cifs-utils
了这一行,然后将这一行添加到\etc\fstab
:192.168.1.7
主机的 IP 地址在哪里,Shared
是 Samba 共享的名称,/media/shared
是我在来宾中安装共享的位置。您需要使用
mode=passthrough
而不是mode=mapped
. 在这里很好地解释了这一点:https ://rabexc.org/posts/p9-setup-in-libvirt 。