On 10.02.2016 14:10, Benjamin Weik wrote:
Hello,
we are trying to create a new setup with a centralized storage server. Currently we are
running multiple "All-in-One" hosts using raw volumes stored on the local disk
of the server.
I tried it first with samba but it did not work so currently I have configured it as
NFS.
This is my current setup:
For Storage:
OS: Ubuntu 16.04 beta (to match vHost version),
IP: 123.123.123.2
NFS: v1.2.8
Samba: v4.3.3
For vHost:
OS: Ubuntu 16.04 beta (as the Package in Ubuntu 14.04 has still a bug that prevents
mounting of samba shares)
IP: 123.123.123.3
Libvirt: v2.21
Qemu: 2.5
Both are simply connected via switched network for testing.
So on the Storage server I created a user and a group called vstorage (uid:1000,gid:500)
Then created a folder /pool owned by this user, permission 777
And exported it via nfs in /etc/exports:
/pool 123.123.123.3(rw,async,no_subtree_check,all_squash,anonuid=1000,anongid=500)
On the vHost I defined the pool via XML:
<pool type='netfs'>
<name>pool</name>
<source>
<host name='123.123.123.2'/>
<dir path='pool'/>
<format type='nfs'/>
</source>
<target>
<path>/var/lib/virt/images</path>
</target>
</pool>
When I try to define a volume in the pool, it will always fail if raw format (default) is
used.
virsh vol-create-as --pool pool --name test --capacity 512M
error: Failed to create vol test
error: Failed to create file '/var/lib/virt/images/test': Operation not
permitted
In /var/log/syslog I can find the following
libvirtd[889]: cannot chown '/var/lib/virt/images/test' to (0, 0): Operation not
permitted
libvirtd[889]: Failed to create file '/var/lib/virt/images/test': Operation not
permitted
When I try it with a different format, like qcow2 it is working fine:
virsh vol-create-as --pool pool --name test --capacity 512M --format qcow2
Vol test created
Unfortunately, this will create the volume with the default permissions
as there are none specified in vol-create XML. This vol-create-as
command creates a very minimalistic volume XML and passes it to
virStorageVolCreateXML() API which if no perms specified in the XML will
use current euid/egid of libvirtd (0:0). Hence the error message.
What you can do here is create your own volume XML with perms specified
and use vol-create instead.
What we can do is:
1) introduce --print-xml option to vol-crate-as like other commands
constructing an XML have.
2) Make libvirt to inherit pool perms for the volume if none specified.
3) Teach vol-create-as to accept permissions.
Michal