Re: RBD boot from volume weirdness in OpenStack

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for the pointers Josh.

Stupidly, I had not looked at those docs.  I forgot all about them
since they didn't used to be there.  I was only using OpenStack docs
and not the Ceph ones.  Looks like they are filled with great
information.  You answered all my questions!  Thanks again.

 - Travis

On Thu, Oct 25, 2012 at 1:25 PM, Josh Durgin <josh.durgin@xxxxxxxxxxx> wrote:
> On 10/25/2012 09:27 AM, Travis Rhoden wrote:
>>
>> Josh,
>>
>> Do you mind if I ask you a few follow-up questions?  I can ask on the
>> OpenStack ML if needed, but I think you are the most knowledgeable
>> person for these...
>
>
> I don't mind. ceph-devel is fine for these ceph-related questions.
>
>
>> 1. To get "efficient volumes from images" (i.e. volumes that are a COW
>> copy of the image), do the images and volumes need to live in the same
>> pool?  I have glance configured to use a pool called "glanceimages",
>> and nova-volume/Cinder uses a second pool called "nova-volume".  Is
>> this always going to prevent the COW process from working?  If I check
>> out my volume, I see this:
>>
>> # rbd -p nova-volume info volume-8c30ee47-5ec3-4600-b332-1bdc2a650837
>> rbd image 'volume-8c30ee47-5ec3-4600-b332-1bdc2a650837':
>>         size 220 MB in 55 objects
>>         order 22 (4096 KB objects)
>>         block_name_prefix: rb.0.1f04.4ba87ea2
>>         parent:  (pool -1)
>>
>> If the COW process is actually working, I think I'll see a parent
>> other than (pool -1), correct?
>
>
> They can be in different pools. With a COW clone you would see a parent
> there. Did you set show_image_direct_url=True for Glance (i.e.
> http://ceph.com/docs/master/rbd/rbd-openstack/#configuring-glance)?
>
>
>> I had split glance/cinder into different RADOS pools because I figured
>> it would give me more flexibility (could set different rep size/crush
>> rules) and potentially more security (use different cephx
>> clients/keys.  Glance keys aren't on nova-compute nodes, only glance
>> node).  But this isn't a strict requirement.
>
>
> Yeah, that's how it's designed to work. The Glance pool can
> be read-only from nova-compute, and Glance doesn't need access
> to the pool used for volumes.
>
>
>> 2. Do you know if "raw" is the only disk format accepted for
>> boot-from-volume?  I did the whole "create volume from image" step,
>> and my source image was a qcow2.  But when I do the boot-from-volume,
>> the -disk line contains format=raw.  Not sure how to control that
>> anymore -- there is no metadata attached to the volume that indicates
>> if it is qcow2 vs raw.  I'll have to dig into the code and see if
>> looks for anything.  Thought you might know...
>
>
> Raw is the only thing that works by default. Although it's possible
> to layer other formats on top of rbd, it's not well tested or
> recommended. Now that rbd supports cloning natively, there's not much
> benefit to e.g. qcow2 on top of it. The interfaces for QEMU and
> libvirt generally don't handle such layered formats well in any case.
>
>
>> 3.  I edited my libvirt XML to saw raw instead of qcow2, and the VM
>> started to boot!  Hooray!  boot-from-volume over RBD.  But then
>> console.log shows stuff like:
>>
>> Begin: Mounting root file system ... Begin: Running /scripts/local-top ...
>> done.
>> Begin: Running /scripts/local-premount ... done.
>> [    1.044112] EXT4-fs (vda1): mounted filesystem with ordered data
>> mode. Opts: (null)
>> Begin: Running /scripts/local-bottom ... [    1.052379] FDC 0 is a S82078B
>> done.
>> done.
>> Begin: Running /scripts/init-bottom ... done.
>> [    1.156951] Refined TSC clocksource calibration: 2266.803 MHz.
>> [    1.796114] end_request: I/O error, dev vda, sector 16065
>> [    1.800018] Buffer I/O error on device vda1, logical block 0
>> [    1.800018] lost page write due to I/O error on vda1
>> [    1.805294] EXT4-fs (vda1): re-mounted. Opts: (null)
>> cloud-init start-local running: Thu, 25 Oct 2012 16:06:34 +0000. up
>> 2.86 seconds^M
>> no instance data found in start-local^M
>> [    3.802465] end_request: I/O error, dev vda, sector 1257161
>> [    3.803629] Buffer I/O error on device vda1, logical block 155137
>> [    3.804020] Buffer I/O error on device vda1, logical block 155138
>> ....
>>
>>
>> And that just continues on and obviously the VM is unusable.  Any
>> thoughts on why that might happen.  You ever run into this during your
>> testing?
>
>
> I haven't seen such errors. It may be due to using qcow2 on top of rbd.
>
>
>> I'm thinking that I probably need to not use UEC images for this -- It
>> tries to go in and resize the file system and stuff like that.  I
>> should probably just make a bunch of fixed images (10G, 20G, etc.) and
>> make volumes from those.  Right now, I'm not even positive that the
>> RBD has even been formatted with a filesystem.
>
>
> UEC images work, but you have to convert them to raw first, as shown here:
>
> http://ceph.com/docs/master/rbd/rbd-openstack/#booting-from-a-block-device
>
>
>> Regards,
>>
>>   - Travis
>>
>> On Thu, Oct 25, 2012 at 11:51 AM, Travis Rhoden <trhoden@xxxxxxxxx> wrote:
>>>
>>> Awesome, thanks Josh.  I mispoke -- my client was 0.48.1.  glad
>>> upgrading to 0.48.2 will do the trick!  thanks again.
>>>
>>> On Thu, Oct 25, 2012 at 11:42 AM, Josh Durgin <josh.durgin@xxxxxxxxxxx>
>>> wrote:
>>>>
>>>> On 2012-10-25 08:22, Travis Rhoden wrote:
>>>>>
>>>>>
>>>>> I've been trying to take advantage of the code additions made by Josh
>>>>> Durgin to OpenStack Folsom for combining  boot-from-volume and Ceph
>>>>> RBD.  First off, nice work Josh!  I'm hoping you folks can help me out
>>>>> with something strange I am seeing.  The question may be more
>>>>> OpenStack related than Ceph, though, but hear me out first.
>>>>>
>>>>> I created a new volume (to use for boot-from-volume) from an existing
>>>>> image like so:
>>>>>
>>>>> #cinder create --display-name uec-test-vol --image-id
>>>>> 699137a2-a864-4a87-98fa-1684d7677044 5
>>>>>
>>>>> This completes just fine.
>>>>>
>>>>> Later I try to boot from it, that fails.  Cutting to the chase, here is
>>>>> why:
>>>>>
>>>>> kvm: -drive
>>>>>
>>>>>
>>>>>
>>>>> file=rbd:nova-volume/volume-9f4e4b70-7fbb-4d81-b912-b1c6fcf86c8b,if=none,id=drive-virtio-disk0,format=raw,cache=none:
>>>>> error reading header from volume-9f4e4b70-7fbb-4d81-b912-b1c6fcf86c8b
>>>>> kvm: -drive
>>>>>
>>>>>
>>>>>
>>>>> file=rbd:nova-volume/volume-9f4e4b70-7fbb-4d81-b912-b1c6fcf86c8b,if=none,id=drive-virtio-disk0,format=raw,cache=none:
>>>>> could not open disk image
>>>>> rbd:nova-volume/volume-9f4e4b70-7fbb-4d81-b912-b1c6fcf86c8b: No such
>>>>> file or directory
>>>>>
>>>>> It's weird that creating the volume was successful, but that KVM can't
>>>>> read it.  Poking around a bit more, it was clear why:
>>>>>
>>>>> # rbd -n client.novavolume --pool nova-volume ls
>>>>> <returns nothing>
>>>>>
>>>>> # rbd -n client.novavolume ls
>>>>> volume-9f4e4b70-7fbb-4d81-b912-b1c6fcf86c8b
>>>>>
>>>>> Okay, the volume is the "rbd" pool!  That's really weird, though.
>>>>> Here is the my nova.conf entries:
>>>>> volume_driver=nova.volume.driver.RBDDriver
>>>>> rbd_pool=nova-volume
>>>>> rbd_user=novavolume
>>>>>
>>>>>
>>>>> AND, here are the log entries from nova-volume.log (cleaned up a
>>>>> little):
>>>>>
>>>>> rbd create --pool nova-volume --size 5120
>>>>> volume-9f4e4b70-7fbb-4d81-b912-b1c6fcf86c8b
>>>>> rbd rm --pool nova-volume volume-9f4e4b70-7fbb-4d81-b912-b1c6fcf86c8b
>>>>> rbd import --pool nova-volume /tmp/tmplQUwzt
>>>>> volume-9f4e4b70-7fbb-4d81-b912-b1c6fcf86c8b
>>>>>
>>>>> I'm not sure why it goes create/delete/import, but regardless all of
>>>>> that worked.  More importantly, all these commands used --pool
>>>>> nova-volume.  So how the heck did that RBD end up in the "rbd" pool
>>>>> instead of the "nova-volume" pool?  Any ideas?
>>>>>
>>>>> Before I hit "send", I figured I should at least test this myself.
>>>>> Watch
>>>>> this:
>>>>>
>>>>> #rbd create -n client.novavolume --pool nova-volume --size 1024 test
>>>>> # rbd ls -n client.novavolume --pool nova-volume
>>>>> test
>>>>> # rbd export -n client.novavolume --pool nova-volume test /tmp/test
>>>>> Exporting image: 100% complete...done.
>>>>> # rbd rm -n client.novavolume --pool nova-volume test
>>>>> Removing image: 100% complete...done.
>>>>> # rbd import -n client.novavolume --pool nova-volume /tmp/test test
>>>>> Importing image: 100% complete...done.
>>>>> # rbd ls -n client.novavolume --pool nova-volume
>>>>>
>>>>> # rbd ls -n client.novavolume --pool rbd
>>>>> test
>>>>>
>>>>>
>>>>> So it seems that "rbd import" doesn't honor the --pool argument?
>>>>
>>>>
>>>>
>>>> This was true in 0.48, but it should have been fixed in 0.48.2 (and
>>>> 0.52).
>>>> I'll add a note about this to the docs.
>>>>
>>>>
>>>>> I am using 0.53 on the backend, but my client is 0.48.2.  I'll upgrade
>>>>> that and see if that makes a different.
>>>>
>>>>
>>>>
>>>> The ceph-common package in particular should be 0.48.2 or >=0.52.
>>>>
>>>>>   - Travis
>>>>
>>>>
>>>>
>
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux