do_su_0805's blog

dairyquestions は typo です。

Ubuntu Server 18.04 が CLI インストールで lvm に インストールしたら、起動に失敗する(してた)話

これは何

備忘録的な何かです。

状況について

自宅サーバ(もどき) に、Ubuntu Server 18.04 LTS をインストールしたところ、再起動すると

Begin: Mounting root file system ... Begin: Running /scripts/local-top ... WARNING: Failed to connect to lvmetad.

と出てきて、initramfs shell に飛ばされてしまう、というお話。

今回書くこと

  1. どうやってインストールしたらそうなったか
  2. その状況から起動させるにはどうするか
  3. (是正策レベルですが) 「2.」で触れるような対策をせずに再起動してもすんなり起動するようにするにはどうするか

もうちょっと詳しく

構成について

  • i7-3700k / DDR3 8GB *4 なサーバ
  • HDD は下記の構成
    • メイン: 160GB 7200rpm HDD (こっちにOSを突っ込む)
    • サブ: 320GB 5400rpm HDD *2

インストール方法

  • USB に iso 焼いて、USB から起動してインストール
  • Download Ubuntu Server | Download | Ubuntu から持ってきた。
  • インストール時に、下記のような領域割り当てを行った

領域について

  • メインHDD (160GB)
    • /boot 1GB (975MiB)
    • swap 8GB ちょい?
    • lvm PV (これしか pv 割り当ててないので実質 VG )に割り当て (140GiB ちょい)
      • lvm-/ 20.04GiB (下三つ割り当てたあまり)
      • lvm-/usr 30GiB
      • lvm-/home 60GiB
      • lvm-/var 30GiB
  • サブHDD (320 GB * 2)
    • とりあえず md0 として RAID 1 を組ませて放置

起動後状況

  • 起動時は問題なし
  • 再起動すると、下記エラーメッセージとともに、initramfs に落とされる
    (下記文面はコピーできず、手で転写したため多少の誤りがあるかもしれません)
Begin: Running /scripts/init-premount ... done
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... WARNING: Failed to connect to lvmetad. Falling back to device scanning.
done.
Begin: Running /scripts/local-premount ... [    3.599890] Btrfs loaded, crc32c=crc32c-intel
Scanning for Btrfs filesystems
done.
Warning: fsck not present, so skipping root file system
[    3.954848] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null)
done.
Begin: Mounting /usr file system ... Begin: Waiting for /usr file system ... Begin: /scripts/local-block ... done.
done.
Gave up waiting for /usr file system device.  Common problems:
 - Boot args ( cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT! UUID=XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB does not exist.  Dropping to a shell!
(ここでの UUID=XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB は、fstab での /usr の UUID
  • この状況で、 lvm コマンドで lvm プロンプトに入って、 lvdisplay を打つと、 / に割り当てた LV 以外が全部 LV Status NOT available となっている。
    • / に割り当てた LV のみ、 LV Status available となっている。
  • ちょっとググってみて、 下記ブログに行き当たった。
  • 参考に、 vgchange -ayLV Status available となった。
  • この状況が無限に引き起こされるので、再起動のたびに、 vgchange -ay する必要があった。

この問題について

とりあえずの対処法

  • エラーメッセージなどをもとに、 lvmetad につなげられないことで困っているような雰囲気を感じた。
    • 公式の bug にも上がってそうだし、今はまだ lvm に慣れてないことから、根本解決に向かうのはあきらめた。
  • initramfs 周りについて軽く調べてみて、上記のメッセージがどうやら、/usr/share/initramfs-tools/script/local-top あたりにありそうなことがわかってきた。
  • そのあたりを読んでみると、 /usr/share/initramfs-tools/scripts/local-top/lvm2 にそれっぽい関数が出てきた。
lvchange_activate() {
        lvm lvchange -aay -y --sysinit --ignoreskippedcluster "$@"
}
  • 今回はとりあえず動けば、と思っているので、下記のようにしてみた
lvchange_activate() {
        # lvm lvchange -aay -y --sysinit --ignoreskippedcluster "$@"
        vgchange -ay
}
  • この後、起動時はこのスクリプトまでたどり着けない( /usr がマウントできない ) し、そもそもそういうために initramfs があるはずなので、 initramfs を生成しなおす。
$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-4.15.0-34-generic
I: The initramfs will attempt to resume from /dev/sda3
I: (UUID=df17b70a-b6bf-11e8-a9e2-60a44c37bf6a)
I: Set the RESUME variable to override this.
  • これで再起動すると、問題なく起動する
    • んですが、相変わらず、 WARNING: Failed to connect to lvmetad. の文面自体は見えるので、今後も動向は追っていこうと思います…