[dm-devel] Removing a failed device from LVM2/DM

Takahiro Yasui tyasui at redhat.com
Mon Aug 31 17:37:12 UTC 2009


On 08/31/09 12:55, Alan D. Brunelle wrote:
> On Mon, 2009-08-31 at 12:02 -0400, Takahiro Yasui wrote:
>> On 08/31/09 11:16, Alan D. Brunelle wrote:
>>> I constructed a 1-copy mirror with the following commands:
>>>
>>> # pvcreate --metadatasize 192k /dev/sdcn /dev/sdfj /dev/sdfa
>>>   Physical volume "/dev/sdcn" successfully created
>>>   Physical volume "/dev/sdfj" successfully created
>>>   Physical volume "/dev/sdfa" successfully created
>>> # vgcreate vg /dev/sdcn /dev/sdfj /dev/sdfa
>>>   Volume group "vg" successfully created
>>> # lvcreate -L 32g -m 1 -n lv vg
>>>   Logical volume "lv" created
>>>
>>> The status showed:
>>>
>>> # lvs -a -o +devices
>>>   LV            VG   Attr   LSize  Origin Snap%  Move Log     Copy%
>>> Convert Devices                      
>>>   lv            vg   mwi-a- 32.00G                    lv_mlog  29.72
>>> lv_mimage_0(0),lv_mimage_1(0)
>>>   [lv_mimage_0] vg   Iwi-ao
>>> 32.00G                                           /dev/sdcn(0)                 
>>>   [lv_mimage_1] vg   Iwi-ao
>>> 32.00G                                           /dev/sdfj(0)                 
>>>   [lv_mlog]     vg   lwi-ao
>>> 4.00M                                           /dev/sdfa(0)                 
>>>
>>> Then I forced /dev/sdfj to fail (removing the unit from the FC SAN), and
>>> the state of the mirror went to:
>>>
>>> # lvs
>>>   /dev/sdfj: read failed after 0 of 2048 at 0: Input/output error
>>>   LV   VG   Attr   LSize  Origin Snap%  Move Log Copy%  Convert
>>>   lv   vg   -wi-a- 32.00G           
>>>
>>> At this point I know I can do:
>>>
>>> # vgreduce -a vg
>>>   /dev/sdfj: read failed after 0 of 2048 at 0: Input/output error
>>>   Physical volume "/dev/sdcn" still in use
>>>   Removed "/dev/sdfa" from volume group "vg"
>>>
>>> But I run into two problems:
>>>
>>> (1) I'd like to be able to live without the constant errors
>>> about /dev/sdfj, and tried:
>>>
>>> # pvremove -f /dev/sdfj
>>>   /dev/sdfj: read failed after 0 of 2048 at 0: Input/output error
>>>   No physical volume label read from /dev/sdfj
>>>   /dev/sdfj: read failed after 0 of 2048 at 0: Input/output error
>>>   Labels on physical volume "/dev/sdfj" successfully wiped
>>>
>>> but that didn't stop it. 
>>>
>>> and:
>>>
>>> (2) I'd like to be able to recreate the 1-copy mirror from the currently
>>> linear volume, but can't (easily):
>>>
>>> # pvcreate --metadatasize 192k /dev/sdp
>>>   Physical volume "/dev/sdp" successfully created
>>> # vgextend vg /dev/sdp
>>>   ... errors from sdfj omitted...
>>>   Volume group "vg" successfully extended
>>> # vgs
>>>   /dev/sdfj: read failed after 0 of 2048 at 0: Input/output error
>>>   VG   #PV #LV #SN Attr   VSize   VFree  
>>>   vg     2   1   0 wz--n- 542.67G 510.67G
>>> # lvconvert -m 1 /dev/vg/lv
>>>   /dev/sdfj: read failed after 0 of 2048 at 0: Input/output error
>>>   Insufficient suitable allocatable extents for logical volume : 8192
>>> more required
>>>   Unable to allocate extents for mirror(s).
>>>
>>> I can use the alloc anywhere options, but I'm at a loss as to why that's
>>> needed:
>>>
>>> # lvconvert -m1 --alloc anywhere /dev/vg/lv
>>>   /dev/sdfj: read failed after 0 of 2048 at 0: Input/output error
>>>   /dev/vg/lv: Converted: 1.3%
>>>   /dev/vg/lv: Converted: 2.6%
>>>   /dev/vg/lv: Converted: 3.8%
>>> ...
>>>
>>>
>>> Any pointers on how to remove /dev/sdfj from the scan (other than, I
>>> guess, updated /etc/lvm.conf to filter it out)
>> The following URL explains how to remove lost PVs from VG.
>>
>> 6.6. Removing Lost Physical Volumes from a Volume Group
>> http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/Cluster_Logical_Volume_Manager/lost_PV_remove_from_VG.html
>>
>> I think "vgreduce --removemissing vg" will remove "/dev/sdfj."
> 
> 
> I guess this is an interesting problem:
> 
> 
>>>> # vgreduce -a vg
>>>>   /dev/sdfj: read failed after 0 of 2048 at 0: Input/output error
>>>>   Physical volume "/dev/sdcn" still in use
>>>>   Removed "/dev/sdfa" from volume group "vg"
> 
> So, /dev/sdfa was removed from the volume group instead of /dev/sdfj (Why? /dev/sdfa was being used for the mirror log - but since the volume group was downgraded to a linear array, it was no longer needed? Doesn't sound like the right thing to do - hence I should have used the --test and worked it out from that). I'll go retry the experiment and do the "removemissing" command.
> And since /dev/sdfa was removed & /dev/sdfj was failed that left only a single physical disk in the VG, then when I added in /dev/sdp it only brought the volume group to two devices. <sigh>

When you executed "vgreduce -a vg," the mirror volume, "lv", had already been converted
to non-mirror (linear) volume. The linear device is not a mirror device any more, and
a log disk is not used. So /dev/sdfa was removed since it was not used. I'm not sure why
a missing device is not removed by "vgreduce -a vg," but vgreduce provides an option to
remove a missing device and we can use it instead of executing "vgreduce -a."

Thanks,
Taka




More information about the dm-devel mailing list