English日本語

文档 · 1.0

存储

这一章讲主机上的存储:存储页上看到什么、建存储池、加第二个池、ISO 放在哪里、虚拟机的磁盘、换盘、定期检查数据、看磁盘健康,最后列出 1.0 还不做的事。第一次建池见首次设置。

1. 存储是怎么组织的

  • keelOS 的存储是 ZFS。存储池(pool)由磁盘组成,虚拟机的磁盘、快照、ISO 都在池里。
  • 安装时只会占掉一块盘的最前面一小段(keelOS 的启动分区),其余的空间和别的盘都留给你,在网页上建存储池,见 §3。默认的池叫 zones。
  • 有多个池时,其中一个是默认存储池:新建的虚拟机、ISO 库、软件包和 keel 自己的数据(数据库、日志)都放在它上面,见 §5。
  • keel 为每台虚拟机建一个自己的数据集,磁盘、UEFI 变量、日志和快照都在里面。数据集的事 keel 自己管,网页上不用你建。

注意:ISO 和虚拟机放在存储池 zones 上,不放在启动盘的系统分区里。启动分区很小,只放 keelOS 自己。所以没有存储池就不能建虚拟机、也不能传 ISO。

2. 存储页

打开 配置 → 存储。页面从上到下是:

  1. 池卡片:每个存储池一张。标题是池名(默认池带 默认 标记)和状态(ONLINE 是正常,其他颜色是有问题)。下面是剩余空间、占用条、碎片 N%,以及池里的设备树:镜像、raidz 或单盘,每块盘的大小和状态。默认池的卡片下面还有数据检查(scrub),见 §8。
  2. 磁盘 表:主机上每块盘一行,列有 磁盘、型号、序列号、容量、分区(一条色带,标出 keelOS 启动分区、池占的部分、别的分区、未用空间)、扇区、类型(SSD 或 HDD)、健康、池(不在池里的盘写 不在池里)。
  3. guest 的磁盘:每台虚拟机的每块盘占了多少(已用 / 总量),有两个以上的池时多一列 池。
  4. ISO 镜像:见 §6。

有些卡片只在能用时出现:没有存储池时有 建立存储池;盘上有以前装的池时有 导入存储池;装在启动分区上的主机有 启动分区的副本;还有空盘时有 建池(建第二个池)。

注意:改动存储的按钮(建池、加盘、分离、删池……)要有主机写权限的账户;只读账户只能看。

keelOS 不认的存储控制器,它们的盘不在这里列出,页面上会写 keelOS 不支持的存储控制器。可以把整个控制器直通给一台虚拟机,见设备直通。

3. 建存储池

没有存储池时,页面上是 建立存储池 zones。

  1. 打开 配置 → 存储。
  2. 在 存储池名字 里填名字(默认 zones)。小写字母开头,后面是字母、数字、_、.、-。
  3. 勾要用的空间: - keelOS 启动分区后面的剩余空间(页面写"keelOS 启动分区后面还有 N"):只有一块盘时选它。 - 整块盘:每块盘一行,写着容量、型号,以及"空盘"或"盘上有:……"。整块盘会被清空。 - 盘上有别的池的标签时,那一行是灰的、不能选,先 清除标签 或导入那个池(见 §9)。
  4. 勾了两块以上时,出现 布局:
布局 要几块盘 说明
单盘 1 没有冗余,盘坏了数据就没了。
镜像 2 块以上 每块盘上都是同样的数据,坏到只剩一块也不丢。可用空间 = 最小的那块。
raidz(可坏一块) 3 块以上 可用空间约 = 最小的盘 × (块数 − 1)。
raidz2(可坏两块) 4 块以上 可用空间约 = 最小的盘 × (块数 − 2)。
  1. 点 建立 zones…。弹出确认框,列出每块盘的型号、容量、序列号、现在盘上有 什么、将变成 什么,以及布局和 可用约 N。盘上有数据的行是红的,要照着框里写的,输入这几块盘的名字才能继续:红色的盘上的一切(包括别的池)都会被销毁,无法恢复。
  2. 点确认框里的 建立 zones。几秒钟后提示 存储池 zones 建好了。

池用 4K 对齐,开着 lz4 压缩,建池时同时打开 autotrim(SSD 释放的空间自动通知盘)和 autoexpand(盘变大后池可以长大)。这些是 keel 定好的,网页上没有开关,也不用你管。

注意:打算整块直通给 NAS 虚拟机的盘不要选进存储池。

注意:带 T10-PI(保护信息)或每块带元数据格式的 NVMe 盘,keelOS 用它建池时会顺便格式化成不带这些的格式,因为 FreeBSD 不写有效的校验标签,换到 Linux 或直通给 Linux 虚拟机会读不出来。扇区格式(512、512e、4Kn、LBA 格式)在 配置 → 硬件 里按盘设置。建池用哪种都行,只认 512 字节扇区的系统用不了 4Kn 的盘。

3.1 给启动分区再放一份

只有一块启动盘时,这块盘坏了主机就起不来。启动分区的副本 卡片可以在第二块盘上再写一份 keelOS 的启动分区(那块盘的其余空间留着不用,盘会被清空):

  1. 在 磁盘 里选一块盘。
  2. 盘上有东西时,输入盘名确认。
  3. 点 写入副本。

在镜像池里加盘时也可以顺便勾上这一项,见 §7。

4. 往镜像里加盘

单盘的池可以加一块盘变成镜像,镜像可以再加一块多一份副本:

  1. 在池卡片的设备树里,找到最上层的单盘或镜像那一行,点 加入…。
  2. 在 给 … 加一块盘 里选盘。可选的是启动分区后面的空间,或者一块整盘(会被清空,要输入盘名确认)。比被镜像的那块盘小的盘是灰的,写着至少要多大,因为镜像的成员不能比它小。
  3. 整盘还可以勾 同时在这块盘上写一份 keelOS 启动分区的副本。
  4. 点 加入。池把全部数据复制到新盘上(resilver),进度显示在池卡片里。复制期间虚拟机照常运行,只是磁盘会慢一些。

要把镜像里的一块盘拿出来:点那块盘的 分离,确认。数据还在其余的盘上;只剩一块盘时没有第二份副本。池里最后一块放数据的盘不能分离。

5. 有多个存储池

用户的数据可以分在几个池里,例如一个快的 NVMe 池放系统盘,一个大的 HDD 池放数据。(设计见 docs/75。)

再建一个池:还有没用的盘时,存储页上多出一张 建池 卡片,做法和 §3 一样,名字默认是下一个空闲的(zones2、zones3……)。

默认存储池:每个池卡片上,不是默认的池有 设为默认…。确认后:

  • 新建的虚拟机放到它上面;
  • keel 自己的数据(/var/db/keel、/var/log)现在就搬过去;
  • ISO 库和装好的软件包不搬,留在旧池上。以后要删旧池的话,ISO 得重新上传。

默认池也可以在 系统 → 维护 的 默认存储池 里换。

新建虚拟机选池:有多个池时,新建虚拟机的向导里 存储池 一栏可以选,旁边写着每个池剩多少(… · 剩 N)。

删池:不是默认池、而且上面没有虚拟机的池,卡片上 删除… 可点。输入池名确认,池被销毁,它的盘空出来,里面剩下的一切都没了。上面还有虚拟机时按钮是灰的,先把它们搬走。

6. ISO 镜像

存储页最下面的 ISO 镜像 卡片是安装盘库。它在默认存储池上,所有虚拟机共用;新建虚拟机时选 ISO 就是从这里选。

  • 上传 ISO:从浏览器上传。文件名要以 .iso 或 .img 结尾;.qcow2、.vmdk、.dmg 上传后 keel 自动转成 .img,上传和转换都显示进度,点 ✕ 可以取消。同名的文件已经有时提示 已经有了。
  • 从网址下载:贴一个 http 或 https 地址,点 从网址下载,由主机自己下载,下载期间可以离开这个页面,回来看进度。
  • 列表里每个 ISO 的右侧会认出它是什么系统(来自卷标和文件名),认不出的写 认不出来,鼠标放上去看卷标。
  • 删除:点名字旁边的 ✕。ISO 正在某台虚拟机的光驱里时会问 仍然删除吗,删了以后那台虚拟机要换掉光驱才能启动。

在新建虚拟机的向导里也可以直接 上传 ISO,传完点 回到新建 guest 继续。上传和删除需要有"上传、删除镜像"权限的账户。

注意:已经装好的系统镜像(路由器固件之类)当第一块盘用,不走 ISO 库,见虚拟机管理。

7. 虚拟机的磁盘

  • 新建虚拟机时向导里的磁盘默认是 20 GiB(模板会改),可以改大小、再用 + 磁盘 加。这是向导里的大小,不是 ISO 的位置。
  • 磁盘的类型默认是 zvol:ZFS 的块设备,快照、克隆、扩容都有;file 是数据集里的一个文件,在 自定义 和编辑页里能选,一般用不着。
  • 磁盘接口(virtio-blk、NVMe、AHCI……)由模板定,要换在编辑页的 存储 里。
  • 加大:磁盘只能加大,在编辑页的 存储 里改,见虚拟机管理。
  • 每块盘占了多少:存储页的 guest 的磁盘 表。
  • 快照在每台虚拟机的详情页里拍,见虚拟机管理;存储页没有按数据集拍快照的功能。快照放在池里,不是备份,备份见快照、备份与迁移。

7.1 搬到别的存储池

有两个以上的存储池时,虚拟机可以在池之间搬家,运行中的也行:先在运行中复制,再追几轮增量,最后切换时虚拟机停顿不到一秒,校验后删掉旧的。(设计见 docs/83。)

  • 一台虚拟机:详情页的 搬到别的存储池…,选 搬到 的池(旁边写着剩余空间,放不下的灰着,并写原因),点 搬家。对话框显示阶段(复制中、追赶中、切换中、校验中、收尾)、进度,运行中的搬完会写 停了 N ms。
  • 一批虚拟机:池卡片上的 搬 guest…,勾要搬的,一台一台搬。挂起的搬完还是挂起,出错或配置坏的列出来不动。
  • 存储页最下面的 存储池之间的搬家 列出正在搬和刚搬完的。

注意:目标池剩余空间要放得下这台虚拟机现在用的量,放不下的池在下拉框里是灰的。

8. 数据检查(scrub)

默认池的卡片下有 数据检查(scrub):把池里全部数据读一遍,校验和对不上的,镜像或 raidz 里有好副本就自动修好。虚拟机照常运行,检查期间磁盘会慢一些。

  • 立即检查 开始,检查中 停止。检查中显示百分比、还剩 …、速度曲线,以及 每块盘的读取速度:同一个镜像里的盘读得应该差不多快,一块盘一直比别的慢很多,可能要坏了,看它的健康。
  • 计划…:定期检查 选 每月(第一个星期几)、每周(星期几)或 关,再选 时间;还可以 另外检查一次 选一个将来的时间。时间按主机的时区。
  • 检查完,卡片上留着 上次检查 的时间、用时、速度和发现的错误数。

默认是每月一次。

9. 导入旧的池和清除标签

盘上有存储池、但这台主机没有导入它(例如重装之前的池):

  • 导入存储池:存储页上出现卡片 导入存储池 zones,点 导入,原来的虚拟机都回来。这台主机的设置、密码和令牌不变。
  • 不想要那个池了:在 磁盘 表里那块盘一行点 清除标签…,输入池名确认。清掉以后池里的数据再也恢复不了。这些盘变成普通的盘,可以拿去建池。

keelOS 不会自己清掉没导入的池的盘,免得误删。

10. 磁盘健康、温度

  • 存储页 磁盘 表的 健康 一列是磁盘自己的 SMART 结论(SATA、SAS 和 NVMe 都有):正常 或 故障。把鼠标放上去,显示当前温度和通电小时数。读不出来的盘显示 –。
  • 池卡片的设备树里,每块盘有 ZFS 的状态(ONLINE……)。坏盘、被拔掉的盘在这里变色。
  • 概览 页会提醒存储池不是 ONLINE。
  • 主机整体的温度(CPU、主板传感器)和风扇在 配置 → 硬件,另有 体检 页做磁盘和主机的检查与温度曲线,见故障排查与日志。

注意:健康显示 故障 的盘,或者设备树里变色的盘,尽快换,见下一节。

11. 换坏盘

镜像里的盘坏了,或被拔掉,设备树里它的行是变了色的状态,旧盘写 不在。1.0 网页上能做的是"先加后拿":

  1. 装上新盘(不比被镜像的盘小)。
  2. 点镜像那一行的 加入…(§4),选新盘,等 resilver 完成,池卡片里的进度走完。
  3. 点坏盘那一行的 分离。池里只留下好盘。

只剩一块盘的单盘池,不能靠换盘救数据,请从备份恢复。

raidz、raidz2 的池:1.0 的网页上还不能换盘(只能给镜像和单盘加盘、从镜像拿盘)。用命令行,在主机控制台或 ssh 上:

zpool status zones                  # 看哪块盘坏了,记下它的名字
zpool replace zones 旧盘名 新盘名     # 例如 zpool replace zones gpt/zones1 nda3

resilver 的进度在存储页池卡片里看,或用 zpool status zones。换完等它结束,池回到 ONLINE。

注意:命令行换盘不会给新盘写 keelOS 启动分区的副本;原来有副本的盘换了,要回存储页的 启动分区的副本 再写一次。

12. 1.0 还不支持什么

  • 网页上不能给 raidz 换盘,也不能把单盘、镜像改成 raidz,或往 raidz 里加盘;命令行 zpool replace 见 §11。
  • 存储页没有按数据集拍快照、浏览数据集的功能:快照在每台虚拟机的详情页里。数据集由 keel 管理,不手工建。
  • 没有池级别的配额和预留,没有池改名,没有跨池共享的 ISO 库(ISO 库只在默认池上,换默认池时不搬)。
  • ISO 库和软件包不跟着默认池搬,换默认池后要重新上传 ISO(§5)。
  • 网页上没有 SMART 详细信息,只有 正常 / 故障、温度和通电小时数;详细的用 smartctl。
  • 存储页不做文件共享:要共享文件,在虚拟机里做 NAS(keelNAS)。