2017年2月10日金曜日

gfs2マウントについて(その1:自動マウント)

前回の記事で「gfs2がアンマウントされない」って記載した。
(実際には、ocfs2がアンマウントされない、と勘違いしていたが、実体はgfs2の方がアンマウントされない、だった。)

で、調べていくうちに、「手作業でmountした場合、シャットダウンする前に手作業でumountしないとダメだよ」というところまで分かった。

確かに、umountしておけばシャットダウン処理でハングすることもない。

だったら/etc/fstabに記載してあったらどうなんだ?ということで/etc/fstabに記載してみたが…起動時にマウントされない。
--/etc/fstabへの追記内容
/dev/mapper/vg--gfs2-lv--gfs /mnt/gfs2 gfs2 _netdev 0 0
--追記ココまで

起動時に自動マウントされないが、/etc/fstabへの記載があるので手作業でマウントは出来る。
(gemini) $ sudo mount -a
もしくは
(gemini) $ sudo mount /mnt/gfs2
ただ、この状態でシャットダウンすると、やはりハングする。

どうしたものか…と調査を続けていったら、systemdにmnt-gfs2.mountというユニットが追加されていることが発覚。
どうやら、/etc/fstabから自動生成されている模様。
そして、これがマウント処理を行おうとして失敗している。

(gemini) $ systemctl status mnt-gfs2.mount
(gemini) $ journalctl -l --unit=mnt-gfs2.mount
(gemini) $ journalctl -o cat --unit=mnt-gfs2.mount
3つ目のコマンドで確認できるのは「mount: mount /dev/mapper/vg--gfs2-lv--gfs on /mnt/gfs2 failed: 通信端点が接続されていません」というメッセージだ。
これ、dlmの設定が出来ていない時にgfs2領域をmountしようとした時のメッセージじゃないか?
ってことは、dlmの起動処理が終わらないうちに、mountコマンドが走り出したってことじゃないだろうか?

このユニットの詳細を見てみたい。
(gemini) $ systemctl show mnt-gfs2.mount
(gemini) $ systemctl --no-pager show mnt-gfs2.mount | less
After宣言を見てみると、確かにdlm.serviceは前提として定義されていない。
でもこれ、設定を変えようにも変え方が分からない。

(gemini) $ systemctl show -p FragmentPath mnt-gfs2.mount
これを見る限り、/run/systemd/generator/mnt-gfs2.mountが設定ファイルなのだが…。
(gemini) $ cat /run/systemd/generator/mnt-gfs2.mount
確かに設定ファイルなのだが、このファイル自体、tmpfs上に作成されていて、OSブート時に自動的に生成されるもののようだ。

ということで、予めこのファイルをイジっておく、というわけにはいかない。

このファイル自体は、systemd-fstab-generatorというツールが作成しているようだ。
manを見てみるが…
(gemini) $ man systemd-fstab-generator
あまり詳しくは書かれていない。

が、systemd.mountも参照しろ、と書かれていた。
こちらも参照してみる。
(gemini) $ man systemd.mount
む?何かヒントっぽいことが書かれているぞ!?
x-systemd.requires=
というエントリだ。

う~ん。良くわからないがfstabを書き換えてみよう。
(gemini) $ sudo vi /etc/fstab
--ココから
/dev/mapper/vg--gfs2-lv--gfs /mnt/gfs2 gfs2 _netdev 0 0

/dev/mapper/vg--gfs2-lv--gfs /mnt/gfs2 gfs2 _netdev,x-systemd.requires=dlm.service 0 0
--ココまで

再起動(gfs2領域はアンマウントしておくこと)
(gemini) $ sudo shutdown -r now

どうだろうか…
(gemini) $ grep gfs2 /etc/mtab
マウントされてる!

自動作成された設定は…?
(gemini) $ cat /run/systemd/generator/mnt-gfs2.mount
お!AfterとRequiresの定義が追加されて、それぞれdlm.serviceが指定されている!
どうやら期待通りの動きをしてくれたみたいだ。

さて、問題はシャットダウンだが…。
このまま再起動してみる。
(gemini) $ sudo shutdown -r now
普通に再起動出来た…。

これで起動時にマウントする設定が出来たよ…。

--2017/04/14追記
ちょっと不安定な部分があったので、/etc/fstabの中の/mnt/gfs2のマウントエントリ、noautoオプションを付けて、起動時に自動マウントされないようにしておく。
/dev/mapper/vg--gfs2-lv--gfs /mnt/gfs2 gfs2 noauto,_netdev,x-systemd.requires=dlm.service 0 0
こんな感じ
--2017/04/14追記終了

0 件のコメント:

コメントを投稿