Skip to contentSkip to conversation

lvm partition on lv

linux-lvm Randall Smith 2 participants 5 messages Aug 8, 2006 – Aug 14, 2006

lore
Share & tools
lore
#0 lore raw

Warning: This may be insane.

I like the flexibility of LVM and try to use it wherever it's feasible.
In this case, I'd like a Xen guest OS to have control over it's LV's.
The method I usually see for using LVM with Xen is to create an LV and
a filesystem on it. I would like to instead create an LV and partition it with an LVM partition and maybe other partition types. Just to test this I did the following:

1. lvcreate -L 100M -name test vg1
2. cfdisk /dev/vg1/test
3. create LVM partition on entire device
4. pvcreate /dev/vg1/test
5. vgcreate vg2 /dev/vg1/test
6. vgchange -ay /dev/vg2
7. lvcreate -L 50M -n testlv vg2
8. mkfs.ext3 /dev/vg2/testlv
9. mkdir /mnt/test
10. mount /dev/vg2/testlv /mnt/test

And it worked! Cool!

Let's say on /dev/vg1/test I had one LVM partition and one ext3 partition. How can I access those separate partitions since it's only one device (/dev/vg1/test)? Normally, a partitioned block device (/dev/hda) would show up like /dev/hda1, dev/hda2, etc.

In the example above, I'm partitioning the LV and using the partition on the same system, which is useless. What I will be doing is giving the disk image /dev/vg1/test to a Xen guest so it can have it's own VG and LVs. Are there potential problems I should look out for and/or tweaking I should do to make this work optimally?

Randall

#1 lore raw
Quoted 4 lines · Randall Smith

Let's say on /dev/vg1/test I had one LVM partition and one ext3 partition. How can I access those separate partitions since it's only one device (/dev/vg1/test)? Normally, a partitioned block device (/dev/hda) would show up like /dev/hda1, dev/hda2, etc.

With loop-device, you can use only part of the block-device as new block-device (See options -o and -s in man:losetup)

So if you know the positions where the partitions start, and their lengths (both in bytes), you could do something like this: (I havn't tested this, so there might be some errors in these commands. But the basic idea should work)

# make LVM partition available at /dev/loop1
losetup -o $lvm_start -s $lvm_size /dev/loop1 /dev/vg1/test
mkdir /mnt/test
# Mount ext3-partition at /mnt/test using loop-device
mount -t ext3 -o offset=$ext3_start,sizelimit=$ext3_length
/dev/vg1/test /mnt/test
Signature · 1 line
Markus Laire
#2 lore raw
Quoted 14 lines · Markus Laire
Quoted 4 lines · Randall Smith

Let's say on /dev/vg1/test I had one LVM partition and one ext3 partition. How can I access those separate partitions since it's only one device (/dev/vg1/test)? Normally, a partitioned block device (/dev/hda) would show up like /dev/hda1, dev/hda2, etc.

With loop-device, you can use only part of the block-device as new block-device (See options -o and -s in man:losetup)

So if you know the positions where the partitions start, and their lengths (both in bytes), you could do something like this: (I havn't tested this, so there might be some errors in these commands. But the basic idea should work)

Quoted 6 lines
# make LVM partition available at /dev/loop1
losetup -o $lvm_start -s $lvm_size /dev/loop1 /dev/vg1/test
mkdir /mnt/test
# Mount ext3-partition at /mnt/test using loop-device
mount -t ext3 -o offset=$ext3_start,sizelimit=$ext3_length
/dev/vg1/test /mnt/test

Well, last command is missing at least "loop" option - i.e. it should be

mount -t ext3 -o loop,offset=$ext3_start,sizelimit=$ext3_length /dev/vg1/test /mnt/test

or you could use these instead
losetup -o $ext3_start -s $ext3_length /dev/loop2 /dev/vg1/test mount -t ext3 /dev/loop2 /mnt/test

I hope I didn't make other mistakes...

($lvm_size and $ext3_length both means the size of the partition in bytes - I should've used 'size' or 'length' for both for consistency)

Signature · 1 line
Markus Laire
#3 lore raw
Quoted 29 lines · Markus Laire
Quoted 14 lines · Markus Laire
Quoted 4 lines · Randall Smith

Let's say on /dev/vg1/test I had one LVM partition and one ext3 partition. How can I access those separate partitions since it's only one device (/dev/vg1/test)? Normally, a partitioned block device (/dev/hda) would show up like /dev/hda1, dev/hda2, etc.

With loop-device, you can use only part of the block-device as new block-device (See options -o and -s in man:losetup)

So if you know the positions where the partitions start, and their lengths (both in bytes), you could do something like this: (I havn't tested this, so there might be some errors in these commands. But the basic idea should work)

Quoted 6 lines
# make LVM partition available at /dev/loop1
losetup -o $lvm_start -s $lvm_size /dev/loop1 /dev/vg1/test
mkdir /mnt/test
# Mount ext3-partition at /mnt/test using loop-device
mount -t ext3 -o offset=$ext3_start,sizelimit=$ext3_length
/dev/vg1/test /mnt/test

Well, last command is missing at least "loop" option - i.e. it should be

mount -t ext3 -o loop,offset=$ext3_start,sizelimit=$ext3_length /dev/vg1/test /mnt/test

Quoted 9 lines

or you could use these instead
losetup -o $ext3_start -s $ext3_length /dev/loop2 /dev/vg1/test mount -t ext3 /dev/loop2 /mnt/test

I hope I didn't make other mistakes...

($lvm_size and $ext3_length both means the size of the partition in bytes - I should've used 'size' or 'length' for both for consistency)

Thanks. That's perfect.

Working with Unix is so much fun. It always seems that anything is possible as long as I'm willing to learn something new.

Randall

#4 lore raw
In reply to Randall Smith
Quoted 18 lines · Randall Smith

Warning: This may be insane.

I like the flexibility of LVM and try to use it wherever it's feasible.
In this case, I'd like a Xen guest OS to have control over it's LV's.
The method I usually see for using LVM with Xen is to create an LV and
a filesystem on it. I would like to instead create an LV and partition it with an LVM partition and maybe other partition types. Just to test this I did the following:

1. lvcreate -L 100M -name test vg1
2. cfdisk /dev/vg1/test
3. create LVM partition on entire device
4. pvcreate /dev/vg1/test
5. vgcreate vg2 /dev/vg1/test
6. vgchange -ay /dev/vg2
7. lvcreate -L 50M -n testlv vg2
8. mkfs.ext3 /dev/vg2/testlv
9. mkdir /mnt/test
10. mount /dev/vg2/testlv /mnt/test

Quoted 6 lines

And it worked! Cool!

Let's say on /dev/vg1/test I had one LVM partition and one ext3 partition. How can I access those separate partitions since it's only one device (/dev/vg1/test)? Normally, a partitioned block device (/dev/hda) would show up like /dev/hda1, dev/hda2, etc.

In the example above, I'm partitioning the LV and using the partition on the same system, which is useless. What I will be doing is giving the disk image /dev/vg1/test to a Xen guest so it can have it's own VG and LVs. Are there potential problems I should look out for and/or tweaking I should do to make this work optimally?

/dev/vg1/test is used as a disk for the Xen guest OS. The guest then recognizes vg2 on /dev/vg1/test. By default, the host will also recognize and activate vg2. Is there a problem with this and should I somehow configure the host not to activate vg2? I know this may be confusing, but it's very useful. I actually have it working now with several LVs on vg2. So I've got PV->VG->LV->PV->VG-(LVs).

Randall