[linux-lvm] Convert striped lv to single pv on another disk?
Gianluca Cecchi
gianluca.cecchi at gmail.com
Thu Dec 13 15:28:57 UTC 2012
Searching on Internet I found several methods and the one I tested (at
the moment only on loop devices) and seems ok is this one below, that
passes through creating a mirror between the initial striped lv
components and the new pv with lvconvert command and then gets rid off
the initial pvs
Just in case anyone else arrives here...
Gianluca
- working dir
cd /depot/test
- create pvs on file
[root at dep001 test]# time dd if=/dev/zero of=pv1 bs=1024k count=1024
same for pv2
# time dd if=/dev/zero of=pv1 bs=1024k count=1024
- setup loop devices
[root at dep001 test]# losetup -f /depot/test/pv1
[root at dep001 test]# losetup -f /depot/test/pv2
[root at dep001 test]# losetup -a
/dev/loop0: [fd00]:6029314 (/depot/test/pv1)
/dev/loop1: [fd00]:6029315 (/depot/test/pv2)
- create physical volumes
[root at dep001 test]# pvcreate /dev/loop0
Writing physical volume data to disk "/dev/loop0"
Physical volume "/dev/loop0" successfully created
[root at dep001 test]# pvcreate /dev/loop1
Writing physical volume data to disk "/dev/loop1"
Physical volume "/dev/loop1" successfully created
- create volume group
[root at dep001 test]# vgcreate vg_test /dev/loop0 /dev/loop1
/dev/cdrom: open failed: No medium found
Volume group "vg_test" successfully created
- create striped logical volume
[root at dep001 test]# lvcreate -i 2 -I 64k -n lv_test -l+100%FREE vg_test
Logical volume "lv_test" created
[root at dep001 test]# lvs -o name,size,stripes,stripesize vg_test/lv_test
LV LSize #Str Stripe
lv_test 1.99G 2 64.00K
- create third pv
[root at dep001 test]# time dd if=/dev/zero of=pvnew bs=1024k count=3076
and setup loop device
[root at dep001 test]# losetup -f /depot/test/pvnew
[root at dep001 test]# losetup -a
/dev/loop0: [fd00]:6029314 (/depot/test/pv1)
/dev/loop1: [fd00]:6029315 (/depot/test/pv2)
/dev/loop2: [fd00]:6029316 (/depot/test/pvnew)
- add new pv to vg
[root at dep001 test]# pvcreate /dev/loop2
[root at dep001 test]# vgextend vg_test /dev/loop2
- current situation
[root at dep001 test]# lvdisplay -m vg_test/lv_test
--- Logical volume ---
LV Name /dev/vg_test/lv_test
VG Name vg_test
LV UUID 0L3Dom-9frG-KeRU-mffe-lQaD-7UA2-AuuhNE
LV Write Access read/write
LV Status available
# open 0
LV Size 1.99 GB
Current LE 510
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 512
Block device 253:4
--- Segments ---
Logical extent 0 to 509:
Type striped
Stripes 2
Stripe size 64 KB
Stripe 0:
Physical volume /dev/loop0
Physical extents 0 to 254
Stripe 1:
Physical volume /dev/loop1
Physical extents 0 to 254
[root at dep001 test]# pvs --segments -o+lv_name,seg_start_pe,segtype
/dev/loop0 /dev/loop1
PV VG Fmt Attr PSize PFree Start SSize LV Start Type
/dev/loop0 vg_test lvm2 a-- 1020.00M 0 0 255 lv_test 0 striped
/dev/loop1 vg_test lvm2 a-- 1020.00M 0 0 255 lv_test 0 striped
[root at dep001 test]# vgdisplay vg_test
--- Volume group ---
VG Name vg_test
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 3.99 GB
PE Size 4.00 MB
Total PE 1021
Alloc PE / Size 510 / 1.99 GB
Free PE / Size 511 / 2.00 GB
VG UUID KSX0eT-mrPc-gRLb-w2tI-SOuj-VlaD-SMgFcc
- create mirror with new pv
[root at dep001 test]# lvconvert -m 1 /dev/vg_test/lv_test /dev/loop2
Insufficient suitable allocatable extents for logical volume : 510
more required
Unable to allocate extents for mirror(s).
the problem resides on the fact that by default it tries to use
another PV as mirror log
and we have no one...
So we use in memory mirror log with "--mirrorlog core" option
[root at dep001 test]# lvconvert -m 1 --mirrorlog core
/dev/vg_test/lv_test /dev/loop2
vg_test/lv_test: Converted: 0.2%
...
vg_test/lv_test: Converted: 92.2%
vg_test/lv_test: Converted: 93.5%
vg_test/lv_test: Converted: 100.0%
- keep off the striped leg
[root at dep001 test]# lvconvert -m 0 /dev/vg_test/lv_test /dev/loop0 /dev/loop1
Logical volume lv_test converted.
- verify new lv that is a linear one
[root at dep001 test]# lvdisplay vg_test/lv_test
--- Logical volume ---
LV Name /dev/vg_test/lv_test
VG Name vg_test
LV UUID 0L3Dom-9frG-KeRU-mffe-lQaD-7UA2-AuuhNE
LV Write Access read/write
LV Status available
# open 0
LV Size 1.99 GB
Current LE 510
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 512
Block device 253:4
[root at dep001 test]# lvdisplay -m vg_test/lv_test
--- Logical volume ---
LV Name /dev/vg_test/lv_test
VG Name vg_test
LV UUID 0L3Dom-9frG-KeRU-mffe-lQaD-7UA2-AuuhNE
LV Write Access read/write
LV Status available
# open 0
LV Size 1.99 GB
Current LE 510
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 512
Block device 253:4
--- Segments ---
Logical extent 0 to 509:
Type linear
Physical volume /dev/loop2
Physical extents 0 to 509
- keep off the old pvs
[root at dep001 test]# vgreduce vg_test /dev/loop0 /dev/loop1
Removed "/dev/loop0" from volume group "vg_test"
Removed "/dev/loop1" from volume group "vg_test"
More information about the linux-lvm
mailing list