That is bad. Not a problem, though, as I can just vacate the data from that drive using pvmove.
The bad drive is /dev/bad. /dev/avail is a volume with some free space.
# pvdisplay /dev/bad /dev/avail --- Physical volume --- PV Name /dev/bad
VG Name vg0 PV Size 148.09 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 37911 Free PE 25111 Allocated PE 12800 PV UUID e5EvaO-0oo5-Zenl-KzkY-wFf7-EkQX-di1mXt --- Physical volume --- PV Name /dev/avail
VG Name vg0 PV Size 186.30 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 47694 Free PE 20658 Allocated PE 27036 PV UUID HLtCMK-751U-IFAW-5Aj3-FQ3w-5tqO-8svvwt
Let's move it to the only drive with available space, /dev/avail. /dev/bad has 12800 allocated PE while /dev/avail has 20658 free PE. I was not expecting any problem fitting the data in /dev/bad into /dev/avail.
# pvmove -i 5 -v /dev/bad
Finding volume group "vg0" Archiving volume group "vg0" metadata. Creating logical volume pvmove0 Moving 0 extents of logical volume vg0/lv0
Insufficient contiguous allocatable extents (1777) for logical volume pvmove0: 12800 required Unable to allocate temporary LV for pvmove.
Urk? It needs to be contiguous? What to do now?
Searching through the lvm mailing list shows that pvmove is dumb. It only sees the first free PE (physical extent). OK, let's work around this.
# vgcfgbackup # grep pv0 /etc/lvm/backup/vg0 pv0 { "pv0", 30720 "pv0", 0 "pv0", 17920
pv0 is the physical volume corresponding to /dev/bad. From this, we see that there are three segments residing in pv0. The first starts at PE 30720.
Let's try to fill that 1777 free PE on the dest drive, /dev/avail. That means, we'll be moving PE 30720 to (30720+1777-1=32496) from pv0.
# pvmove -i 5 -v /dev/bad:30720-32496 Finding volume group "vg0" Archiving volume group "vg0" metadata. Creating logical volume pvmove0 Moving 0 extents of logical volume vg0/lv0
Moving 1777 extents of logical volume vg0/lv1 Moving 0 extents of logical volume vg0/lv2
Moving 0 extents of logical volume vg0/lv3 Found volume group "vg0" Updating volume group metadata Creating volume group backup "/etc/lvm/backup/vg0" Found volume group "vg0" Found volume group "vg0" Loading vg0-pvmove0 Found volume group "vg0" Loading vg0-lv1
Checking progress every 5 seconds /dev/hdf2: Moved: 7.7% /dev/hdf2: Moved: 14.4% /dev/hdf2: Moved: 22.6% /dev/hdf2: Moved: 29.7% /dev/hdf2: Moved: 37.4% /dev/hdf2: Moved: 44.6% /dev/hdf2: Moved: 52.3% /dev/hdf2: Moved: 60.0% /dev/hdf2: Moved: 67.7% /dev/hdf2: Moved: 75.4% /dev/hdf2: Moved: 83.1% /dev/hdf2: Moved: 90.3% /dev/hdf2: Moved: 97.4% /dev/hdf2: Moved: 100.0% Found volume group "vg0" Found volume group "vg0" Found volume group "vg0" Loading vg0-pvmove0 Found volume group "vg0" Loading vg0-lv1
Found volume group "vg0" Found volume group "vg0" Removing temporary pvmove LV Writing out final volume group after pvmove Creating volume group backup "/etc/lvm/backup/vg0"
Finally, after repeating the above process for the remaining segments, /dev/bad, aka pv0, is free of data and is safe to take down.
# vgreduce vg0 /dev/bad
Toss it in the garbage bin.
(originally from http://microjet.ath.cx/WebWiki/pvmove%20problem.html)
No comments:
Post a Comment