解决 LVM Can’t remove locked LV 锁定无法删除的问题

开发机有一块希捷的 1TB 硬盘报废了,读写速度超慢,坏道一堆(别买希捷,真的)

今天想把这块硬盘换掉,简单看了一下硬盘里没有什么文件,基本上就几个 G 的文件而已,把文件移动到其他盘之后就准备开始移除硬盘。

刚开始我用的是 Webmin 操作的硬盘,当我尝试删除逻辑卷的时候,它提示我要将体量移动到其他物理卷,然后点了确定之后发现 Webmin 卡死了,过了一分钟 SSH 掉线了,打开服务器的显示器一看,内核错误了,无奈只能强制重启服务器。

重启完之后进系统就卡住了,然后过了一会进入了应急维护模式,我想了下要不干脆就直接把逻辑卷删除吧,反正也没东西,当我尝试执行删除命令 lvremove home 的时候报错了,提示:

Can't remove locked LV home

这是为啥呢?因为死机之前,正在将原逻辑卷的体量转移到其他物理卷,所以这时候会创建一个叫 pvmove0 的镜像逻辑卷,然后会把目标(要迁移的)逻辑卷锁定,这时候就会出现上面这个情况。

我上网查了一下,最简单的解决锁定的情况,就是通过备份 vg 配置文件,然后手动删除 locked 标识,再还原回去即可,操作方法如下:

$ vgcfgbackup vol1 (你的卷组名字)
  Volume group "vol1" successfully backed up.

这时候卷组 vol1 的配置文件就会保存到 /etc/lvm/backup/vol1,可以用 vim 编辑,打开之后内容大概如下

# Generated by LVM2 version 2.02.187(2)-RHEL7 (2020-03-24): Thu Apr 22 16:41:42 2021

contents = "Text Format Volume Group"
version = 1

description = "Created *after* executing 'vgreduce vol1 /dev/sdc1'"

creation_host = "ZeroDream-Develop"   # Linux ZeroDream-Develop 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64
creation_time = 1619080902  # Thu Apr 22 16:41:42 2021

vol1 {
    id = "CMZ8Ou-Emkm-UJ9c-e7yt-ODRW-Fa3r-6QVYcV"
    seqno = 10
    format = "lvm2"           # informational
    status = ["RESIZEABLE", "READ", "WRITE"]
    flags = []
    extent_size = 8192      # 4 Megabytes
    max_lv = 0
    max_pv = 0
    metadata_copies = 0

    physical_volumes {

        pv0 {
            id = "IK9HLV-FTxJ-jhoC-qvH3-0mqM-RyYl-dYxBdC"
            device = "/dev/sdb1"  # Hint only

            status = ["ALLOCATABLE"]
            flags = []
            dev_size = 3907027087   # 1.81935 Terabytes
            pe_start = 2048
            pe_count = 476931   # 1.81935 Terabytes
        }

        pv1 {
            id = "Mfi9ej-dNW0-O08P-jvQa-Ds70-gzt8-Aj3SO1"
            device = "/dev/sdd1"  # Hint only

            status = ["ALLOCATABLE"]
            flags = []
            dev_size = 976771087    # 465.761 Gigabytes
            pe_start = 2048
            pe_count = 119234   # 465.758 Gigabytes
        }
    }

    logical_volumes {

        block1 {
            id = "92VDUd-i80z-gZRJ-vYw3-uTGc-MRbw-DZ7zRd"
            status = ["READ", "WRITE", "VISIBLE", "LOCKED"]
            flags = []
            creation_time = 1553284089  # 2019-03-23 03:48:09 +0800
            creation_host = "ZeroDream-I5"
            allocation_policy = "contiguous"
            segment_count = 1

            segment1 {
                start_extent = 0
                extent_count = 476931   # 1.81935 Terabytes

                type = "striped"
                stripe_count = 1    # linear

                stripes = [
                    "pv0", 0
                ]
            }
        }
    }

}

留意这个 logical_volumes 下面的 <逻辑卷> 名,status 里面如果有 LOCKED,把它删除掉,然后保存。

保存完之后输入下面这条命令即可把配置文件恢复回逻辑卷。

$ vgcfgrestore vol1

不出意外,就会看到下面这样的提示,输入 y 确认:

Volume group vol1 has active volume: block1.
WARNING: Found 1 active volume(s) in volume group "vol1".
Restoring VG with active LVs, may cause mismatch with its metadata.
Do you really want to proceed with restore of volume group "vol1", while 1 volume(s) are active? [y/n]: y(是否要执行,直接输入 y 回车即可)
Restored volume group vol1
Scan of VG vol1 from /dev/sdb1 found metadata seqno 8 vs previous 7.
Scan of VG vol1 from /dev/sdc1 found metadata seqno 8 vs previous 7.
Scan of VG vol1 from /dev/sdd1 found metadata seqno 8 vs previous 7.

此时再输入 lvremove home 就可以成功删除掉 home 逻辑卷了。

当然,如果是像我一样硬盘坏了的话,还需要输入 pvremove /dev/sdc1 这样来删除物理卷。

完事之后不要忘了在 /etc/fstab 里面把对应磁盘的挂载项删除或者注释。

推荐阅读文章

2 条评论

  1. 站元素主机说道:

    感谢分享 赞一个

  2. Ray说道:

    你是我亲爹,折腾一晚上恨不得把盘都格式化烂了还是没法装上系统,结果只有你这个办法可以移除卷组

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注