From: Josh Durgin <josh.durgin@dreamhost.com>
To: "Sławomir Skowron" <szibis@gmail.com>
Cc: ceph-devel@vger.kernel.org
Subject: Re: Problem with attaching rbd device in qemu-kvm
Date: Tue, 13 Dec 2011 12:08:05 -0800 [thread overview]
Message-ID: <4EE7B0A5.6000906@dreamhost.com> (raw)
In-Reply-To: <CAMwB3Th9ycRbMmsGon0SCFEy9yeMQ-nE5dJ=NfntwxhXFyatpw@mail.gmail.com>
On 12/13/2011 04:56 AM, Sławomir Skowron wrote:
> Finally, i manage the problem with rbd with kvm 1.0, and libvirt
> 0.9.8, or i think i manage :), but i get stuck with one thing after.
>
> 2011-12-13 12:13:31.173+0000: 21512: error :
> qemuMonitorJSONCheckError:318 : internal error unable to execute QEMU
> command 'device_add': Bus 'pci.0' does not support hotplugging
> 2011-12-13 12:13:31.173+0000: 21512: warning :
> qemuDomainAttachPciDiskDevice:244 : qemuMonitorAddDevice failed on
> file=rbd:rbd/testdysk:id=admin:key=AQANeNFOiIx9DhAAv76MRXZjWNKn2sSSTQeJog==:auth_supported=cephx
> none:mon_host=10.177.64.4\:6789,if=none,id=drive-virtio-disk2,format=raw
> (virtio-blk-pci,bus=pci.0,addr=0x7,drive=drive-virtio-disk2,id=virtio-disk2)
> 2011-12-13 12:13:31.173+0000: 21512: error :
> virSecurityDACRestoreSecurityFileLabel:143 : cannot resolve symlink
> rbd/testdysk: No such file or directory2011-12-13 12:13:31.173+0000:
> 21512: warning : qemuDomainAttachPciDiskDevice:287 : Unable to restore
> security label on rbd/testdysk
> and i can't find any info about that.
>
> my kvm.xml inject file:
>
> <disk type="network" device="disk">
> <driver name="qemu" type="raw"/>
> <auth username="admin">
> <secret type="ceph"
> uuid="0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f"/>
> </auth>
> <source protocol="rbd" name="rbd/testdysk">
> <host name="10.177.64.4" port="6789"/>
> </source>
> <target dev="sdc" bus="virtio"/>
> </disk>
>
> secret:
>
> cat /tmp/secret.xml
> <secret ephemeral='no' private='no'>
> <uuid>0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f</uuid>
> <usage type='ceph'>
> <domain>rbd/admin</domain>
> <name>admin</name>
> </usage>
> </secret>
>
> virsh secret-define /tmp/secret.xml
> Secret 0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f created
>
> virsh secret-set-value 0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f
> AQANeNFOiIx9DhAAv76MRXZjWNKn2sSSTQeJog==
> Secret value set
>
Your xml and configuration are all fine, you're hitting the libvirt bug
that I mentioned before. The fix isn't in any stable release yet, and
0.9.8 was just released yesterday, so I guess you'll have to compile it
yourself or disable the libvirt security driver.
> 2011/12/12 Josh Durgin<josh.durgin@dreamhost.com>:
>> On 12/09/2011 04:48 AM, Sławomir Skowron wrote:
>>>
>>> Sorry, for my lag, but i was sick.
>>>
>>> I handled problem with apparmor before and now it's not a problem,
>>> even when i send mail before, it was solved.
>>>
>>> Ok when i create image from qemu-img it's looks like that, and works
>>> perfect, (attachment with log of this opperation.)
>>>
>>> But when i use virsh, it's still a problem. Just like he don't know
>>> what user is going to be auth.
>>>
>>> I try, as client.admin (default i hope :)) only with id=admin in
>>> kvm.xml, or client=admin, and other combinations - like client.rbd
>>> etc., Still nothing.
>>
>>
>> admin is the default, and the correct option for client.admin is id=admin,
>> or id=foo for client.foo.
>>
>>
>>>
>>> I try, improve a keyring file, adding client rbd into keyring on
>>> machine with kvm hypervisor in /etc/ceph/keyring.bin
>>>
>>> [client.rbd]
>>> key = AAAAAAAAAAAAAAAA
>>> auid = 18446744073709551615
>>> caps mds = "allow"
>>> caps mon = "allow r"
>>> caps osd = "allow rw pool=kvmtest"
>>>
>>> and on cluster site like above. I was added, a section [client.rbd]
>>> with keyring path, and it's still a problem.
>>>
>>
>> Did you run 'ceph auth add -i /etc/ceph/keyring.bin'?
>> Make sure 'ceph auth list' shows client.rbd with the right key.
>
> Overall i want to use admin id, and i think now it's correctly used in xml.
>
>>
>>
>>> 2011-12-09 13:29:11.519096 7fe616b59700 mon.0@0(leader) e1
>>> ms_verify_authorizer 10.177.32.66:0/58020608 client protocol 0
>>> root@s3-10-177-64-4:~# tail -n10000 /var/log/ceph/mon.0.log | grep
>>> 13:29:11.
>>> 2011-12-09 13:29:11.519096 7fe616b59700 mon.0@0(leader) e1
>>> ms_verify_authorizer 10.177.32.66:0/58020608 client protocol 0
>>> 2011-12-09 13:29:11.519624 7fe61b090700 -- 10.177.64.4:6789/0<==
>>> client.? 10.177.32.66:0/58020608 1 ==== auth(proto 0 21 bytes) v1 ====
>>> 47+0+0 (3310669357 0 0) 0x17f2e00 con 0x19d2c80
>>> 2011-12-09 13:29:11.519645 7fe61b090700 mon.0@0(leader) e1 have connection
>>> 2011-12-09 13:29:11.519655 7fe61b090700 mon.0@0(leader) e1 do not have
>>> session, making new one
>>> 2011-12-09 13:29:11.519668 7fe61b090700 mon.0@0(leader) e1 ms_dispatch
>>> new session MonSession: client.? 10.177.32.66:0/58020608 is open for
>>> client.? 10.177.32.66:0/58020608
>>> 2011-12-09 13:29:11.519674 7fe61b090700 mon.0@0(leader) e1 setting
>>> timeout on session
>>> 2011-12-09 13:29:11.519680 7fe61b090700 mon.0@0(leader) e1 caps
>>> 2011-12-09 13:29:11.519688 7fe61b090700 mon.0@0(leader).auth v353
>>> AuthMonitor::update_from_paxos()
>>> 2011-12-09 13:29:11.519697 7fe61b090700 mon.0@0(leader).auth v353
>>> preprocess_query auth(proto 0 21 bytes) v1 from client.?
>>> 10.177.32.66:0/58020608
>>> 2011-12-09 13:29:11.519703 7fe61b090700 mon.0@0(leader).auth v353
>>> prep_auth() blob_size=21
>>> 2011-12-09 13:29:11.519735 7fe61b090700 -- 10.177.64.4:6789/0 -->
>>> 10.177.32.66:0/58020608 -- auth_reply(proto 0 -95 Operation not
>>> supported) v1 -- ?+0 0x1246200 con 0x19d2c80
>>>
>>> from libvirt.log
>>>
>>> 23:20:56.689: 1309: error : virSecurityDACRestoreSecurityFileLabel:143
>>> : cannot resolve symlink rbd:kvmtest/kvmtest1:name=admin: No such file
>>> or directory
>>> 23:20:56.882: 1309: warning : qemuDomainAttachPciDiskDevice:250 :
>>> Unable to restore security label on rbd:kvmtest/kvmtest1:name=admin
>>> 23:21:09.172: 1309: error : qemuMonitorTextAddDrive:2418 : operation
>>> failed: open disk image file failed
>>> 23:21:09.172: 1309: error : virSecurityDACRestoreSecurityFileLabel:143
>>> : cannot resolve symlink rbd:kvmtest/kvmtest1:name=admin: No such file
>>> or directory
>>> 23:21:09.364: 1309: warning : qemuDomainAttachPciDiskDevice:250 :
>>> Unable to restore security label on rbd:kvmtest/kvmtest1:name=admin
>>> 23:21:49.645: 1309: error : qemuMonitorTextAddDrive:2418 : operation
>>> failed: open disk image file failed
>>> 23:21:49.645: 1309: error : virSecurityDACRestoreSecurityFileLabel:143
>>> : cannot resolve symlink rbd:kvmtest/kvmtest1:id=admin: No such file
>>> or directory
>>> 23:21:49.853: 1309: warning : qemuDomainAttachPciDiskDevice:250 :
>>> Unable to restore security label on rbd:kvmtest/kvmtest1:id=admin
>>> 13:08:08.924: 1309: error : qemuMonitorTextAddDrive:2418 : operation
>>> failed: open disk image file failed
>>> 13:08:08.924: 1309: error : virSecurityDACRestoreSecurityFileLabel:143
>>> : cannot resolve symlink rbd:kvmtest/kvmtest1: No such file or
>>> directory
>>> 13:08:09.117: 1309: warning : qemuDomainAttachPciDiskDevice:250 :
>>> Unable to restore security label on rbd:kvmtest/kvmtest1
>>> 13:09:45.402: 1309: error : qemuMonitorTextAddDrive:2418 : operation
>>> failed: open disk image file failed
>>> 13:29:05.554: 1310: error : qemuMonitorTextAddDrive:2418 : operation
>>> failed: open disk image file failed
>>> 13:29:05.554: 1310: error : virSecurityDACRestoreSecurityFileLabel:143
>>> : cannot resolve symlink kvmtest/kvmtest1: No such file or directory
>>> 13:29:05.751: 1310: warning : qemuDomainAttachPciDiskDevice:250 :
>>> Unable to restore security label on kvmtest/kvmtest1
>>> 13:29:05.751: 1310: warning : virEventPollUpdateHandle:147 : Ignoring
>>> invalid update watch -1
>>
>>
>> This is libvirt mistakenly trying to treat the rbd disk as a file - fixed in
>> 20e1233c31e3150d259073c523077acdccb5d419 to libvirt. If you don't want to
>> upgrade libvirt, someone on IRC last week reported that installing
>> libapparmor1 fixed this problem for them, since libvirt no longer fell back
>> to it's own DAC implementation.
>
> hmm is this commited to any stable version now ?? i have installed
> libapparmor1,
>
> ri libapparmor1 2.7.0~beta1+bzr1774-1ubuntu2
> changehat AppArmor library
>
> and i use newest stable libvirt 0.9.8.
>
>>
>>
>>> 2011/12/1 Josh Durgin<josh.durgin@dreamhost.com>:
>>>>
>>>> On 12/01/2011 11:37 AM, Sławomir Skowron wrote:
>>>>>
>>>>>
>>>>> I have some problems. Can you help me ??
>>>>>
>>>>> ceph cluster:
>>>>> ceph 0.38, oneiric, kernel 3.0.0 x86_64 - now only one machine.
>>>>>
>>>>> kvm hypervisor:
>>>>> kvm version 1.0-rc4 (0.15.92), libvirt 0.9.2, kernel 3.0.0, Ubuntu
>>>>> oneiric x86_64.
>>>>>
>>>>> I create image from qemu-img on machine with kvm VM's, and it works very
>>>>> well:
>>>>>
>>>>> qemu-img create -f rbd rbd:kvmtest/kvmtest1 10G
>>>>> Formatting 'rbd:kvmtest/kvmtest1', fmt=rbd size=10737418240
>>>>> cluster_size=0
>>>>>
>>>>> in ceph cluster machines:
>>>>>
>>>>> rados -p kvmtest ls
>>>>> kvmtest1.rbd
>>>>> rbd_directory
>>>>> rbd_info
>>>>>
>>>>> But when i try to attach new device to kvm VM like this:
>>>>>
>>>>> virsh attach-device one-10 /tmp/kvm.xml
>>>>>
>>>>> with kvm.xml like this:
>>>>>
>>>>> <disk type='network' device='disk'>
>>>>> <driver name='qemu' type='raw' cache='writeback'/>
>>>>> <source protocol='rbd' name='rbd:kvmtest/kvmtest1'>
>>>>> <host name='10.177.64.4' port='6789'/>
>>>>> </source>
>>>>> <target dev='vdc' bus='virtio'/>
>>>>> </disk>
>>>>>
>>>>> output of virsh:
>>>>>
>>>>> error: Failed to attach device from /tmp/kvm.xml
>>>>> error: cannot resolve symlink rbd:kvmtest/kvmtest1: No such file or
>>>>> directory
>>>>
>>>>
>>>>
>>>> From the monitor output below, I'm assuming this is just a bad error
>>>> message
>>>> from libvirt.
>>>>
>>>>
>>>>> and mon.0 log in ceph cluster.
>>>>>
>>>>> 2011-12-01 20:18:17.142595 7fe02dd04700 mon.0@0(leader) e1
>>>>> ms_verify_authorizer 10.177.32.66:0/25020608 client protocol 0
>>>>> 2011-12-01 20:18:17.143041 7fe03223b700 -- 10.177.64.4:6789/0<==
>>>>> client.? 10.177.32.66:0/25020608 1 ==== auth(proto 0 21 bytes) v1 ====
>>>>> 47+0+0 (3310669357 0 0) 0x29f6a00 con 0x297adc0
>>>>> 2011-12-01 20:18:17.143095 7fe03223b700 mon.0@0(leader) e1 ms_dispatch
>>>>> new session MonSession: client.? 10.177.32.66:0/25020608 is open for
>>>>> client.? 10.177.32.66:0/25020608
>>>>> 2011-12-01 20:18:17.143125 7fe03223b700 mon.0@0(leader).auth v146
>>>>> preprocess_query auth(proto 0 21 bytes) v1 from client.?
>>>>> 10.177.32.66:0/25020608
>>>>> 2011-12-01 20:18:17.143168 7fe03223b700 -- 10.177.64.4:6789/0 -->
>>>>> 10.177.32.66:0/25020608 -- auth_reply(proto 0 -95 Operation not
>>>>> supported) v1 -- ?+0 0x2f30600 con 0x297adc0
>>>>
>>>>
>>>>
>>>> Here you can see qemu isn't authenticating correctly, probably because
>>>> the
>>>> rados user isn't being set by libvirt. With your libvirt version, you'll
>>>> need to change:
>>>>
>>>>
>>>> <source protocol='rbd' name='rbd:kvmtest/kvmtest1'>
>>>>
>>>> to
>>>>
>>>> <source protocol='rbd' name='rbd:kvmtest/kvmtest1:id=foo'>
>>>>
>>>> to authenticate as client.foo. Any ceph config option can be set like
>>>> that,
>>>> separated by colons.
>>>>
>>>> If this still doesn't work, I'd suggest setting
>>>> debug_rbd=20:debug_monc=20:debug_auth=20:log_to_stderr=2 to get more info
>>>> in
>>>> the libvirt instance log (usually
>>>> /var/log/libvirt/qemu/instance_name.log).
>>>> There may be apparmour restrictions preventing qemu from reading the
>>>> keyring
>>>> or ceph config files.
>>>>
>>>>
>>>>> ceph.conf, and keyring.bin exists on server, and machine with qemu-kvm
>>>>> in same directory:
>>>>> ; global
>>>>> [global]
>>>>> ; enable secure authentication
>>>>>
>>>>> auth supported = cephx
>>>>> keyring = /etc/ceph/keyring.bin
>>>>>
>>>>> debug rgw = 1
>>>>>
>>>>> rgw print continue = false
>>>>> rgw socket path = /var/run/radosgw.sock
>>>>>
>>>>> ; monitors
>>>>> ; You need at least one. You need at least three if you want to
>>>>> ; tolerate any node failures. Always create an odd number.
>>>>> [mon]
>>>>> mon data = /vol0/data/mon.$id
>>>>>
>>>>> ; some minimal logging (just message traffic) to aid debugging
>>>>>
>>>>> debug ms = 1 ; see message traffic
>>>>> debug mon = 0 ; monitor
>>>>> debug paxos = 0 ; monitor replication
>>>>> debug auth = 0 ;
>>>>>
>>>>> mon allowed clock drift = 2
>>>>>
>>>>> [mon.0]
>>>>> host = 10-177-64-4
>>>>> mon addr = 10.177.64.4:6789
>>>>>
>>>>> ; radosgw client list
>>>>> [client.radosgw.10-177-64-4]
>>>>>
>>>>> host = 10-177-64-4
>>>>> log file = /var/log/ceph/$name.log
>>>>> debug rgw = 1
>>>>> debug ms = 1
>>>>>
>>>>> ; osd
>>>>> ; You need at least one. Two if you want data to be replicated.
>>>>> ; Define as many as you like.
>>>>> [osd]
>>>>> ; This is where the btrfs volume will be mounted.
>>>>>
>>>>> osd data = /vol0/data/osd.$id
>>>>>
>>>>> ; Ideally, make this a separate disk or partition. A few GB
>>>>> ; is usually enough; more if you have fast disks. You can use
>>>>> ; a file under the osd data dir if need be
>>>>> ; (e.g. /data/osd$id/journal), but it will be slower than a
>>>>> ; separate disk or partition.
>>>>>
>>>>> osd journal = /vol0/data/osd.$id/journal
>>>>>
>>>>> ; If the OSD journal is a file, you need to specify the size.
>>>>> This is specified in MB.
>>>>>
>>>>> osd journal size = 512
>>>>>
>>>>> filestore journal writeahead = 1
>>>>> osd heartbeat grace = 5
>>>>>
>>>>> debug ms = 0 ; message traffic
>>>>> debug osd = 0
>>>>> debug filestore = 0 ; local object storage
>>>>> debug journal = 0 ; local journaling
>>>>> debug monc = 0
>>>>> debug rados = 1
>>>>>
>>>>> [osd.0]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.0
>>>>> keyring = /vol0/data/osd.0/keyring
>>>>>
>>>>> [osd.1]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.1
>>>>> keyring = /vol0/data/osd.1/keyring
>>>>>
>>>>> [osd.2]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.2
>>>>> keyring = /vol0/data/osd.2/keyring
>>>>>
>>>>> [osd.3]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.3
>>>>> keyring = /vol0/data/osd.3/keyring
>>>>>
>>>>> [osd.4]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.4
>>>>> keyring = /vol0/data/osd.4/keyring
>>>>>
>>>>> [osd.5]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.5
>>>>> keyring = /vol0/data/osd.5/keyring
>>>>>
>>>>> [osd.6]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.6
>>>>> keyring = /vol0/data/osd.6/keyring
>>>>>
>>>>> [osd.7]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.7
>>>>> keyring = /vol0/data/osd.7/keyring
>>>>>
>>>>> [osd.8]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.8
>>>>> keyring = /vol0/data/osd.8/keyring
>>>>>
>>>>> [osd.9]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.9
>>>>> keyring = /vol0/data/osd.9/keyring
>>>>>
>>>>> [osd.10]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.10
>>>>> keyring = /vol0/data/osd.10/keyring
>>>>>
>>>>> [osd.11]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.11
>>>>> keyring = /vol0/data/osd.11/keyring
>>>>>
>>>>> [osd.12]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.12
>>>>> keyring = /vol0/data/osd.12/keyring
>>>>>
>>>>> [osd.13]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.13
>>>>> keyring = /vol0/data/osd.13/keyring
>>>>>
>>>>> [osd.14]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.14
>>>>> keyring = /vol0/data/osd.14/keyring
>>>>>
>>>>> [osd.15]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.15
>>>>> keyring = /vol0/data/osd.15/keyring
>>>>>
>>>>> [osd.16]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.16
>>>>> keyring = /vol0/data/osd.16/keyring
>>>>>
>>>>> [osd.17]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.17
>>>>> keyring = /vol0/data/osd.17/keyring
>>>>>
>>>>> [osd.18]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.18
>>>>> keyring = /vol0/data/osd.18/keyring
>>>>>
>>>>> [osd.19]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.19
>>>>> keyring = /vol0/data/osd.19/keyring
>>>>>
>>>>> [osd.20]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.20
>>>>> keyring = /vol0/data/osd.20/keyring
>>>>>
>>>>> [osd.21]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.21
>>>>> keyring = /vol0/data/osd.21/keyring
>>>>>
>>>>> [osd.22]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.22
>>>>> keyring = /vol0/data/osd.22/keyring
>>>>>
>>>>> [osd.23]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.23
>>>>> keyring = /vol0/data/osd.23/keyring
>>>>>
>>>>> [osd.24]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.24
>>>>> keyring = /vol0/data/osd.24/keyring
>>>>>
>>>>> [osd.25]
>>>>> host = 10-177-64-4
>>>>> osd data = /vol0/data/osd.25
>>>>> keyring = /vol0/data/osd.25/keyring
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2011-12-13 20:08 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-01 19:37 Problem with attaching rbd device in qemu-kvm Sławomir Skowron
2011-12-01 20:42 ` Josh Durgin
2011-12-09 12:48 ` Sławomir Skowron
2011-12-12 18:53 ` Josh Durgin
2011-12-13 12:56 ` Sławomir Skowron
2011-12-13 20:08 ` Josh Durgin [this message]
2011-12-16 12:17 ` Sławomir Skowron
2011-12-19 15:37 ` Sławomir Skowron
2011-12-20 2:41 ` Josh Durgin
2011-12-20 9:38 ` Sławomir Skowron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EE7B0A5.6000906@dreamhost.com \
--to=josh.durgin@dreamhost.com \
--cc=ceph-devel@vger.kernel.org \
--cc=szibis@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox