[linux-lvm] pvmove is stuck
Alasdair G Kergon
agk at redhat.com
Wed Aug 31 22:29:47 UTC 2005
On Wed, Aug 31, 2005 at 10:52:01PM +0100, Martin Ebourne wrote:
> pvmove0 vg_hordein 4 p-C-ao 372.56G -1 -1 253 10 /dev/hda1 75.14 247BqL-aEnl-ApBy-bLCf-W2Cs-1spS-GFfERx
> vg_hordein-pvmove0: 0 356515840 linear 22:64 384
> vg_hordein-pvmove0: 356515840 20971520 linear 22:64 356516224
> vg_hordein-pvmove0: 377487360 209715200 mirror core 1 1024 2 3:1 356516224 22:64 377487744
> vg_hordein-pvmove0: 587202560 194117632 linear 3:1 587202944
So pvmove split into 4 parts and it's currently doing the 3rd one. [See man page]
> vg_hordein-pvmove0: 377487360 209715200 mirror 2 3:1 22:64 204799/204800
Look at the last fraction saying how far it got: it suggests you got a
bad sector. Check your system log to see if it reported this (and says
which sector).
The tools don't handle this yet - all they let you do is 'pvmove --abort'
which commits parts 1 and 2 but will abandon part 3.
Several ways to workaround it - none of them trivial.
If you're familiar with gdb, the simplest way would be to use it to
override the status information returned and trick pvmove into
thinking it's reached 204800/204800.
Or compile up a one-off version of pvmove that says in _target_percent()
in lib/mirror/mirrored.c: [this code has moved file recently - lib/activate/]
if (numerator == 204799)
numerator = 204800;
before the existing lines:
if (seg)
seg->extents_copied = seg->area_len * numerator / denominator;
return 1;
There are other options involving editing metadata, but they're harder to
explain.
A way for the system to cope with situations like this automatically is
being worked upon.
Alasdair
--
agk at redhat.com
More information about the linux-lvm
mailing list