LXD Init从预先存在的ZFS池移动数据在哪里?

时间:2018-05-01 21:21:27

标签: configuration dataset lxc zfs lxd

TL; DR;

我发现使用zfs设置的内容,lxd过程中lxd init可能正在执行的内容与我期望看到的内容之间存在一些差异。

我已经使用LXD大约一个月了,已经浏览了文档并进行了多次搜索,但它们似乎没有涉及这个主题。

有关我的问题的详细信息,请查看以下部分:

  1. 有人可以解释为什么我正在观察LXD和ZFS之间的挂载点差异以及它可能带来的影响(如果有的话)?
  2. LXD 实际是否将tank/lxd数据集内容 从其{{1的装载位置移动ZFS池VDEV进入/mnt/tank/lxd/...,还是其他事情要做? (a)如何确认/验证这两种情况? (b)更好的是,我怎样才能让LXD将所有内容保存/放入我使用/var/lib/lxd/...设置的数据集中?
  3. 我希望通常存储在zfs下的所有内容都存储在我/var/lib/lxd/期间指定的tank/lxd中:我该怎么做? (一个好的ZFS / LXD方式更可取;我可以 lxd init进入坦克并且mv /var/lib/lxd目录指向ln -s,但这似乎是一个糟糕的黑客,并希望避免它。必须有一个更好的方法。)
  4. 提前致谢。

    背景

    我在Ubuntu 18.04中使用LXD 3.0.0,将其设置为使用预先存在的ZFS池和数据集。这是运行/mnt/tank/...之前的样子:

    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

    LXD创建了一些数据集,但$ 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 已经不再像以前那样(即mountpoint已经消失),也不再是我所期望的(tank/lxd下的任何内容都没有列出)。简而言之,原始挂载点消失了,其他数据集没有像我预期的那样出现。

    我可能在这里错了,但看起来好像 LXD已将lxd/... 下的数据移出ZFS池vdevs 并进入安装了操作系统的LVM上的/mnt/tank/lxd/...目录。我不确定我错过了什么。

    我可以使用/var/lib/lxd/命令更改“正确”:

    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下的文件,我希望 如果 两个人都看着同一个地方。

    提前感谢您的帮助。

    EDIT0:评论中的建议测试&amp;结果

    有人建议我尝试写一些文件作为测试,根据系统信息查看实际使用的空间。测试步骤如下:

    1. 销毁并重新创建ZFS池和LXD配置,但是没有运行/mnt/tank/lxd/containers/命令让LXD做自己的事情并看看会发生什么。 (为简洁起见,下面省略了步骤。)
    2. 作为控件,检查主机上的池/数据集存储容量和使用情况。
    3. 输入容器并对空间使用情况进行另一次控制检查。
    4. 在容器内写出测试文件。
    5. 重复检查步骤1&amp; 2寻找变化。
    6. 结果不确定,可以在下面看到。

      2。控制检查主机

      zfs set mountpoint

      3。在容器内

      $ 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
      

      4。在容器中写出测试文件

      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.1。检查容器中的结果

      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.2。检查主机的结果

      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
      

      在创建/销毁测试文件之前和之后在主机上运行$ 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 命令也没有显示任何更改。我用一个更大的(100GB)测试文件重复了这个,但没有注意到差异。

1 个答案:

答案 0 :(得分:1)

Intent intent = new Intent(<YourFragment>.this.getContext(), AddStudentGradeActivity.class); mountpoint时,它可能意味着以下两种情况之一:

  1. 有人通过none命令明确卸载了该文件系统。
  2. 有人使用zfs unmount命令设置应挂载文件系统的位置,而不是使用mount命令。
  3. 我猜LXD正在做后者,而ZFS只是不知道它的安装位置。如果是这样,LXD可能还会向zfs mount写入条目,以便在重新启动时在/etc/fstab中重新创建这些安装。 (哎呀,也许LXD的作者甚至认为,如果挂载点不太方便输入,那么爱管闲事的ZFS爱好者将不太可能尝试存储或修改其VM数据目录中的内容。)

    所以简短的回答是,我认为没有什么可以解决的。但是,我认为您对/var/lib/lxd/...所做的更改也不会造成任何伤害。

    您提到LXD目录中的zfs set不会在touch ...目录中创建任何内容。文件系统一次只能安装在一个地方,所以我认为/mnt/tank/...下的相应目录只是当挂载点发生变化时ZFS留在原地的目录。如果您现在尝试将挂载点切换回/mnt,它应该强制您在允许挂载发生之前删除您在那里触摸的文件(不允许“覆盖”来自两个不同文件系统的重复目录) 。如果由于某种原因希望将它们链接起来,可以使用符号链接来实现。

    将来,您可以使用/mnt/...找出文件写入的文件系统,以帮助调试此类问题。