pvscan 报 Global lock failed 且没有返回信息,不一定是数据没了。停掉 sanlock 和 lvmlockd 再 pvscan,只要 pv 在,一切都好说。

现象

在 ubuntu18 arm 上,pvscan 没有返回信息:

root@host:/etc/lvm/archive# pvscan
  Global lock failed: error -210
  No matching physical volumes found

这个时候不要慌,不一定是数据没了。

排查

把 sanlock 和 lvmlockd 停掉,再 pvscan 看看是否有,一般来说是在的:

root@host:/etc/lvm/archive# pvscan
  WARNING: lvmlockd process is not running.
  Reading without shared global lock.
  Reading VG vg_b without a lock.
  PV /dev/mapper/mpath-b   VG vg_b     lvm2 [<500.00 GiB / <499.00 GiB free]
  Reading VG vg_a without a lock.
  PV /dev/mapper/mpath-a   VG vg_a     lvm2 [<1000.00 GiB / <545.00 GiB free]
  Total: 2 [1.46 TiB] / in use: 2 [1.46 TiB] / in no VG: 0 [0   ]

只要 pv 在,那么一切都好说。

把 sanlock 和 lvmlockd 启动起来后,vgs 还是一样,只有一行输出 Global lock failed: error -210。

和平时 VG vg_b lock skipped: error -32 下面打印 vg 信息的场景很不一样。

这种情况不要慌,直接执行 vgchange --lockstart:

root@host:/etc/lvm/archive# vgchange --lockstart
  Global lock failed: error -210
  VG vg_a starting sanlock lockspace
  Starting locking.  Waiting for sanlock may take 20 sec to 3 min...

根因

1. ubuntu18 arm 上 lvmlockd 服务名问题

ubuntu18 arm lvm2.02 上没有 lvmlockd 的服务,原来它叫 lvm2-lvmlockd。

关键是 lvm2-lvmlockd 里启动命令还是 /sbin/lvmlockd -f。

解决:

cp /lib/systemd/system/lvm2-lvmlockd.service /lib/systemd/system/lvmlockd.service

2. lvmetad 缓存和 sanlock 锁不协调

ubuntu18 上默认开启了 lvm2-lvmetad,这个缓存和 sanlock 锁不协调,要禁用掉:

systemctl stop lvm2-lvmetad
systemctl stop lvm2-lvmetad.socket

lvm.conf 中的配置也要改 use_lvmetad=0。

这个问题会导致 vgchange --lockstart 锁总是启动不起来。

3. 多 vg 时单独启动

ubuntu18 上的 vgchange --lockstart 感觉是只启动了一个 vg,如果是多个记得记上 vg 名称单独启动试试。

小结

  • pvscan 报 Global lock failed 且无返回,不一定是数据没了;
  • 停掉 sanlock 和 lvmlockd 再 pvscan,只要 pv 在,一切都好说;
  • ubuntu18 arm 上 lvmlockd 服务名是 lvm2-lvmlockd,需要复制一份;
  • lvmetad 缓存和 sanlock 锁不协调,要禁用掉;
  • 多 vg 时 vgchange --lockstart 可能只启动一个,要单独指定 vg 名称。