My LXC data was stored on a ZFS dataset. Since then, due to rearranging other things on the system, I had to move the LXC data to another ZFS dataset on another ZFS pool.
I cannot get LXD to recognize the new pool. I’m unable to start the daemon at all to mess with config, with the following error:
ERROR [2023-03-17T21:50:56Z] Failed mounting storage pool err="ZFS zpool exists but dataset is missing" pool=default
That’s correct, the default pool is missing because it’s now in a different place. For example, it’s no longer at
tank/lxc, but it’s now at
submarine/lxc. Everything was moved over via ZFS replication.
For various reasons I can’t just put the data back on the
tank pool, and in either case I don’t want it there anymore.
The thing that confuses me is that I tried manually editing the SQLite database at
/var/lib/lxd/database/global/db.bin. I edited the records in
storage_pools_config that point to
tank/lxc to point to
submarine/lxc. However, when I tried starting the LXD daemon, I got the same error, and the settings were reverted back to
/tank/lxc in the db.bin file. Ultimately I can’t start the daemon at all, so the only other option I know of is to delete the entire database and start over, but I’d really rather not do that!
Where can I go to simply change the root path of the ZFS dataset for LXC without having to start everything all over again? It seems like moving the dataset should be possible offline, even if it means editing the database. But since changing the value in the database doesn’t seem to work and indeed it gets changed back, that value is also being stored somewhere else - where?