1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iSCSI+LVM環境のシャットダウンが遅延する問題

Posted at

問題

LinuxサーバにiSCSIデバイスを含むLVM VGがあると、システムシャットダウンが遅延・失敗する。

状況

Ubuntu 20.04のopen-iscsi + lvmcacheを使用したリモートストレージにデータを置く構成で発生。
open-iscsiでオートログインによりターゲットをsdaにアタッチ、_netdevマウントオプションで起動時は遅延マウントしている。
sdaはLVM PVとしてフォーマットし、ローカルNVMeの一部を混ぜてLVM VGにしている。(lvmcacheに必要なため)

# pvs
  PV              VG     Fmt  Attr PSize    PFree
  /dev/sda        remote lvm2 a--  <200.00g      0
  /dev/vda2       vg     lvm2 a--   <40.00g 520.00m
  /dev/vg/cachepv remote lvm2 a--    <5.00g      0
# lvs
  LV      VG     Attr       LSize    Pool         Origin       Data%  Meta%  Move Log Cpy%Sync Convert
  data    remote Cwi-aoC--- <200.00g [cache_cvol] [data_corig] 100.00 12.40           0.00
  boot    vg     -wi-ao----  500.00m
  cachepv vg     -wi-ao----    5.00g
  root    vg     -wi-ao----   30.00g
  swap    vg     -wi-ao----    4.00g

このままシャットダウンしようとすると、高頻度でシャットダウンが途中でブロックされ、カーネルスタックトレースが表示されて電源が落ちない。

原因

iscsiデバイスの管理は、systemd unit open-iscsi.serviceで行われている。
このunitはAfter=network-online.targetによりネットワーク構築後に起動され、シャットダウン中はネットワーク停止前に終了される。
終了時はblkdeactivateにより自動的に依存ファイルシステムのアンマウントやLVMの非アクティブ化が行われている。

ほとんどの場合これで問題ないが、複雑なlvm構成に関わるすべてを必ずしも対象としてはくれない。
ファイルシステムかLVMのいずれか、あるいは両方を正しい順序でアンマウントしてやらないと、sdaやネットワークスタックが消えたあとにiscsiデバイスにアクセスリトライしようとして恒久的にブロックされてしまう。

対処

open-iscsi.serviceのAfterかつ、他の依存serviceのBeforeになるよう、シャットダウン時だけ動くsystemd serviceを作成し、適切な順序でumount/lvchange -anで非アクティブ化しておく。

[Unit]
Wants=network-online.target remote-fs-pre.target

# open-iscsiを追加
After=network-online.target iscsid.service open-iscsi.service

# remote/dataが必要なサービスをすべて列挙
Before=snap.lxd.daemon.service snap.lxd.activate.service

DefaultDependencies=no
Conflicts=shutdown.target
Before=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=-/bin/true

# 依存順にアンマウント・非アクティブ化。
# 他のunitでアンマウントされているかもしれないのでExecStop=- でエラー無視している
ExecStop=-/bin/umount -R /data
ExecStop=-/sbin/vgchange -an remote -vv
ExecStop=-/sbin/lvchange -an vg/cachepv -vv

[Install]
WantedBy=sysinit.target

依存関係はopen-iscsi.serviceを引き写した上で、After/Beforeを追加している。
remote/dataに依存するunitはBeforeに列挙している。いちいち書かなくてすむよう、適当なtargetがないか探してみたが、それらしいremote-fs.targetをAfterで指定しているサービスはほとんどなく適当なものが見つからなかった。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?