はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

メモ 2024-04

2024-04-16

ZFSとのバージョン不整合で動作しなくなったLXDのバージョンを戻した

Ubuntuサーバをアップデート後に再起動したところ、LXDが動作しなくなった。 原因はZFSとのバージョン不整合。 LXDを旧バージョンに戻したところ動作するようになった。

環境:

  • Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-176-generic x86_64)
  • LXD 5.21.1-43998c6 (snapでインストール)
  • ZFS 0.8.3
エラーが発生

lxcコマンドを実行するとエラーが発生する。

$ lxc list
Error: LXD unix socket not accessible: Get "http://unix.socket/1.0": EOF

journalctl -u snap.lxd.daemon でログを確認。

Apr 13 02:06:04 kiliman lxd.daemon[2137448]: => Preparing the system (28155)
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Loading snap configuration
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Setting up mntns symlink (mnt:[4026532608])
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Setting up kmod wrapper
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Preparing /boot
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Preparing a clean copy of /run
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Preparing /run/bin
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Preparing a clean copy of /etc
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Preparing a clean copy of /usr/share/misc
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Setting up ceph configuration
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Setting up LVM configuration
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Setting up OVN configuration
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Rotating logs
Apr 13 02:06:04 kiliman lxd.daemon[2137448]: ==> Unsupported ZFS version (0.8)
(中略)
Apr 13 02:06:04 server1 lxd.daemon[2137448]: => Re-using existing LXCFS
Apr 13 02:06:04 server1 lxd.daemon[2137448]: ==> Reloading LXCFS
Apr 13 02:06:04 server1 lxd.daemon[2137448]: => Starting LXD
Apr 13 02:06:04 server1 lxd.daemon[2137608]: time="2024-04-13T02:06:04+09:00" level=warning msg=" - Couldn't find the CGroup blkio.weight, disk priority will be ignored"
Apr 13 02:06:04 server1 lxd.daemon[2137608]: time="2024-04-13T02:06:04+09:00" level=warning msg=" - Couldn't find the CGroup memory swap limits will be ignored"
Apr 13 02:06:06 server1 lxd.daemon[2137608]: time="2024-04-13T02:06:06+09:00" level=error msg="Failed loading storage pool" err="Required tool 'zpool' is missing" pool=default
Apr 13 02:06:06 server1 lxd.daemon[2137608]: time="2024-04-13T02:06:06+09:00" level=error msg="Failed to start the daemon" err="Failed applying patch \"storage_move_custom_iso_block_volumes_v2\": Failed loading pool \"default\": Required tool 'zpool' is missing"
Apr 13 02:06:06 server1 lxd.daemon[2137608]: Error: Failed applying patch "storage_move_custom_iso_block_volumes_v2": Failed loading pool "default": Required tool 'zpool' is missing
Apr 13 02:06:06 server1 lxd.daemon[2137448]: Killed
Apr 13 02:06:06 server1 lxd.daemon[2137448]: => LXD failed to start

"Unsupported ZFS version (0.8)" と表示されている。 LXD 5.21.1 LTS has been released - LXD / News - Ubuntu Community Hub のコメントに同様のメッセージ報告があるため、LXDとZFSバージョンのミスマッチだと判断。 Notes on upgrading when on Ubuntu 18.04 and 20.04 にいくつかの選択肢が書かれているが、現在の環境ではZFSのバージョンは上がらなそうなのでLXDのバージョンを戻すことにした。

LXDのバージョンを戻した

LXDはsnapでインストールしていたので、前バージョンを確認。

$ snap list lxd --all
Name  Version         Rev    Tracking       Publisher   Notes
lxd   5.20-f3dd836    27049  latest/stable  canonical✓  disabled
lxd   5.21.1-43998c6  28155  latest/stable  canonical✓  -

現在は28155を使っているが27049が残っていたため、hanhan's blog - snap で古いバージョンをインストールする を参考に27049に戻した。

$ sudo snap revert lxd --revision 27049
2024-04-16T13:17:18+09:00 INFO Waiting for "snap.lxd.daemon.service" to stop.
lxd reverted to 5.20-f3dd836
まだ動かない

再起動したところ以下のエラーが出てLXDが起動していなかった。

Apr 16 13:36:45 server1 lxd.daemon[42415]: time="2024-04-16T13:36:45+09:00" level=error msg="Failed to start the daemon" err="Failed to initialize global database: failed to ensure schema: schema version '73' is more recent than expected '69'"
Apr 16 13:36:45 server1 lxd.daemon[42415]: Error: Failed to initialize global database: failed to ensure schema: schema version '73' is more recent than expected '69'

原因はデータベースのスキーマバージョンが上がってしまっていること。

データベースを元に戻した

LXDデータベースについて - LXD ドキュメント によるとsnapで入れたLXDの場合、データベースの場所は /var/snap/lxd/common/lxd/database/ とのこと。

データベースを確認した。

/var/snap/lxd/common/lxd/database# ls
global  global.bak  local.db  local.db.bak

global.bakをglobalに変更した。 local.db.bakは数年前のものだったので戻さなかった。

# cp -a global global_new
# cp -a global.bak global
動作するようになった

再起動したところ動作するようになった。

Apr 16 13:48:41 server1 lxd.daemon[7916]: => Starting LXD
Apr 16 13:48:41 server1 lxd.daemon[8077]: time="2024-04-16T13:48:41+09:00" level=warning msg=" - Couldn't find the CGroup blkio.weight, disk priority will be ignored"
Apr 16 13:48:41 server1 lxd.daemon[8077]: time="2024-04-16T13:48:41+09:00" level=warning msg=" - Couldn't find the CGroup memory swap accounting, swap limits will be ignored"
Apr 16 13:48:48 server1 lxd.daemon[8077]: time="2024-04-16T13:48:48+09:00" level=warning msg="Failed to initialize fanotify, falling back on inotify" err="Failed to initialize fanotify: invalid argument"
Apr 16 13:48:51 server1 lxd.daemon[8077]: time="2024-04-16T13:48:51+09:00" level=error msg="Failed to update the image" err="Failed getting remote image info: Failed getting image: The requested image couldn't be found for fingerprint \"debian/10\"" fingerprint=156bab33e052ede274a16cf936be345cdf61c537073b90c83c4c3e869e1244d0
Apr 16 13:48:52 server1 lxd.daemon[7916]: => LXD is ready

ゲストイメージのfingerprintが違うというエラーが出ている。 ゲストを構築する際に使用したイメージのfingerprintが変わってしまっているらしい。

$ lxc image list
+-------+--------------+--------+--------------------------------------+--------------+-----------+----------+-------------------------------+
| ALIAS | FINGERPRINT  | PUBLIC |             DESCRIPTION              | ARCHITECTURE |   TYPE    |   SIZE   |          UPLOAD DATE          |
+-------+--------------+--------+--------------------------------------+--------------+-----------+----------+-------------------------------+
|       | 156bab33e052 | no     | Debian buster amd64 (20240131_05:24) | x86_64       | CONTAINER | 75.74MiB | Jan 31, 2024 at 10:24am (UTC) |
+-------+--------------+--------+--------------------------------------+--------------+-----------+----------+-------------------------------+

実害はなさそうなのでこちらは無視することにした。

LXDが勝手にバージョンアップしないようにした

snapで現在のバージョンを保持するように指定した。

$ sudo snap refresh --hold=forever lxd
General refreshes of "lxd" held indefinitely