TL;博士;
我发现我使用 设置的zfs
内容、过程lxd
中可能执行的操作lxd init
以及我期望看到的内容之间存在一些差异。
我已经使用 LXD 大约一个月了,浏览了文档并进行了几次搜索,但它们似乎没有触及这个话题。
请查看以下部分以获取有关我的问题的更多详细信息:
- 有人可以解释为什么我观察到 LXD 和 ZFS 之间的挂载点差异以及这可能会产生什么影响(如果有的话)?
- LXD 是否实际上将
tank/lxd
数据集内容从其挂载位置 at和 into移出ZFS 池 VDEV ,还是正在执行其他操作?(a)我如何确认/验证这两种情况?(b)更好的是,我怎样才能让 LXD 将所有内容保存/放入我设置使用的数据集中?/mnt/tank/lxd/...
/var/lib/lxd/...
zfs
- 我希望通常存储的所有内容都
/var/lib/lxd/
存储在tank/lxd
我指定的范围内lxd init
:我该怎么做?(一个好的 ZFS/LXD 方式更可取;我可以mv /var/lib/lxd
进入油箱和ln -s
指向的目录/mnt/tank/...
,但这似乎是一个糟糕的 hack,并且想要避免它。必须有更好的方法。)
提前致谢。
背景
我在 Ubuntu 18.04 中使用 LXD 3.0.0,将其设置为使用预先存在的 ZFS 池和数据集。这是运行前lxd init
的样子:
$ sudo zpool create -m /mnt/tank tank raidz3 <6 storage SSDs omitted>
$ sudo zfs set compression=on tank
$ sudo zfs create tank/lxd
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 216K 1.31T 43.7K /mnt/tank
tank/lxd 41.7K 1.31T 41.7K /mnt/tank/lxd
这看起来和我预期的一样。然后我运行lxd init
并跟进如下:
$ lxd init
[...]
Create a new ZFS pool? (yes/no) [default=yes]: no
Name of the existing ZFS pool or dataset: tank/lxd
[...]
完成上述内容后zfs list
显示如下:
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 589K 1.31T 41.7K /mnt/tank
tank/lxd 250K 1.31T 41.7K none
tank/lxd/containers 41.7K 1.31T 41.7K none
tank/lxd/custom 41.7K 1.31T 41.7K none
tank/lxd/deleted 41.7K 1.31T 41.7K none
tank/lxd/images 41.7K 1.31T 41.7K none
tank/lxd/snapshots 41.7K 1.31T 41.7K none
LXD 创建了一些数据集,但mountpoint
s 不再是它们以前的样子(即tank/lxd
消失了),也不是我所期望的(下面没有lxd/...
列出任何内容)。简而言之,原来的挂载点消失了,其他数据集也没有像我预期的那样出现。
我在这里可能错了,但看起来LXD 已经将应该/mnt/tank/lxd/...
位于 ZFS 池 vdevs/var/lib/lxd/
下的数据移到了安装操作系统的 LVM 上的目录中。我不确定我错过了什么。
我可以使用zfs set
命令来改变“正确”这个:
$ sudo zfs set mountpoint=/mnt/tank/lxd tank/lxd
$ sudo zfs set mountpoint=/mnt/tank/lxd/containers tank/lxd/containers
$ sudo zfs set mountpoint=/mnt/tank/lxd/custom tank/lxd/custom
$ sudo zfs set mountpoint=/mnt/tank/lxd/deleted tank/lxd/deleted
$ sudo zfs set mountpoint=/mnt/tank/lxd/images tank/lxd/images
$ sudo zfs set mountpoint=/mnt/tank/lxd/snapshots tank/lxd/snapshots
并验证它们是否再次按预期显示:
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 641K 1.31T 43.7K /mnt/tank
tank/lxd 252K 1.31T 43.7K /mnt/tank/lxd
tank/lxd/containers 41.7K 1.31T 41.7K /mnt/tank/lxd/containers
tank/lxd/custom 41.7K 1.31T 41.7K /mnt/tank/lxd/custom
tank/lxd/deleted 41.7K 1.31T 41.7K /mnt/tank/lxd/deleted
tank/lxd/images 41.7K 1.31T 41.7K /mnt/tank/lxd/images
tank/lxd/snapshots 41.7K 1.31T 41.7K /mnt/tank/lxd/snapshots
但这似乎是一个部分解决方案,因为所有其他文件(例如lxd.db
,密钥等)都留在了/var/lib/lxd
. 所以,我不确定我是否在“修复”任何东西,或者是否有任何东西需要修复。
此外,我不清楚我是否真的用这些zfs set
命令实现了任何目标。例如,touch /var/lib/lxd/containers/hi.txt
不显示 下的文件,如果他们都在看同一个位置/mnt/tank/lxd/containers/
,我会预料到的。
在此先感谢您的帮助。
EDIT0:评论和结果中的建议测试
有人建议我尝试写出一些文件作为测试,以根据系统信息查看实际使用的空间在哪里消耗。测试步骤如下:
- 销毁并重新创建 ZFS 池和 LXD 配置,但不运行
zfs set mountpoint
命令让 LXD 做自己的事情,看看会发生什么。(为简洁起见,下面省略了步骤。) - 作为对照,检查主机上的池/数据集存储容量和使用情况。
- 输入一个容器,然后对空间使用情况进行另一次控制检查。
- 在容器内写出一个测试文件。
- 对步骤 1 和 2 重复检查以查找更改。
结果是不确定的,可以在下面看到。
2.主机上的控制检查
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 1.18G 1.31T 41.7K /mnt/tank
tank/lxd 1.18G 1.31T 41.7K none
tank/lxd/containers 270M 1.31T 41.7K none
tank/lxd/containers/base-server 251M 1.31T 588M /var/lib/lxd/storage-pools/lxd-pool/containers/base-server
tank/lxd/containers/dev-server 9.18M 1.31T 588M /var/lib/lxd/storage-pools/lxd-pool/containers/dev-server
tank/lxd/containers/qa-server 9.14M 1.31T 588M /var/lib/lxd/storage-pools/lxd-pool/containers/qa-server
tank/lxd/custom 125K 1.31T 41.7K none
tank/lxd/custom/dev-volume 41.7K 512G 41.7K /var/lib/lxd/storage-pools/lxd-pool/custom/dev-volume
tank/lxd/custom/qa-volume 41.7K 512G 41.7K /var/lib/lxd/storage-pools/lxd-pool/custom/qa-volume
tank/lxd/deleted 41.7K 1.31T 41.7K none
tank/lxd/images 937M 1.31T 41.7K none
tank/lxd/images/ab23ac2bda8cfb48c176a2d1e790181d5a1ed3522732a0cf8ff189dea848d3f1 588M 1.31T 588M none
tank/lxd/images/b36ec647e374da4816104a98807633a2cc387488083d3776557081c4d0333618 349M 1.31T 349M none
tank/lxd/snapshots 41.7K 1.31T 41.7K none
3. 容器内部
root@dev-server:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tank/lxd/containers/dev-server 1.4T 589M 1.4T 1% /
none 492K 0 492K 0% /dev
udev 32G 0 32G 0% /dev/tty
tmpfs 100K 0 100K 0% /dev/lxd
tank/lxd/custom/dev-volume 512G 128K 512G 1% /mnt/tank
tmpfs 100K 0 100K 0% /dev/.lxd-mounts
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 160K 32G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 32G 0 32G 0% /sys/fs/cgroup
4.在容器中写出测试文件
root@dev-server:~$ dd if=/dev/zero of=/root/test.img bs=8MB
^C3929+0 records in
3929+0 records out
31432000000 bytes (31 GB, 29 GiB) copied, 17.7005 s, 1.8 GB/s
root@dev-server:~$ ls -lh
total 512
-rw-r--r-- 1 root root 30G May 7 20:21 test.img
5.1。检查容器的结果
root@dev-server:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tank/lxd/containers/dev-server 1.4T 589M 1.4T 1% /
none 492K 0 492K 0% /dev
udev 32G 0 32G 0% /dev/tty
tmpfs 100K 0 100K 0% /dev/lxd
tank/lxd/custom/dev-volume 512G 128K 512G 1% /mnt/tank
tmpfs 100K 0 100K 0% /dev/.lxd-mounts
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 160K 32G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 32G 0 32G 0% /sys/fs/cgroup
5.2. 检查主机的结果
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 1.18G 1.31T 41.7K /mnt/tank
tank/lxd 1.18G 1.31T 41.7K none
tank/lxd/containers 270M 1.31T 41.7K none
tank/lxd/containers/base-server 251M 1.31T 588M /var/lib/lxd/storage-pools/lxd-pool/containers/base-server
tank/lxd/containers/dev-server 9.18M 1.31T 588M /var/lib/lxd/storage-pools/lxd-pool/containers/dev-server
tank/lxd/containers/qa-server 9.14M 1.31T 588M /var/lib/lxd/storage-pools/lxd-pool/containers/qa-server
tank/lxd/custom 125K 1.31T 41.7K none
tank/lxd/custom/dev-volume 41.7K 512G 41.7K /var/lib/lxd/storage-pools/lxd-pool/custom/dev-volume
tank/lxd/custom/qa-volume 41.7K 512G 41.7K /var/lib/lxd/storage-pools/lxd-pool/custom/qa-volume
tank/lxd/deleted 41.7K 1.31T 41.7K none
tank/lxd/images 937M 1.31T 41.7K none
tank/lxd/images/ab23ac2bda8cfb48c176a2d1e790181d5a1ed3522732a0cf8ff189dea848d3f1 588M 1.31T 588M none
tank/lxd/images/b36ec647e374da4816104a98807633a2cc387488083d3776557081c4d0333618 349M 1.31T 349M none
tank/lxd/snapshots 41.7K 1.31T 41.7K none
df -h
在创建/销毁测试文件之前和之后在主机上运行命令也显示没有任何变化。我用一个更大的(100GB)测试文件重复了这个,但没有注意到有什么不同。