给「家里云」配备一台全闪 NAS

  • ~7.93K 字
  • 次阅读
  • 条评论
  1. 1. 背景
    1. 1.1. 困局
    2. 1.2. 抉择
  2. 2. 规划
    1. 2.1. 虚拟化平台
    2. 2.2. 硬盘划分
    3. 2.3. 补充组件
  3. 3. 安装硬件
    1. 3.1. 硬盘
    2. 3.2. HBA 卡
  4. 4. 安装虚拟化系统
  5. 5. 调试
    1. 5.1. 更换软件源
    2. 5.2. 调整硬盘
    3. 5.3. 设置 HBA 卡直通
    4. 5.4. 迁移磁带机系统
    5. 5.5. 安装 NAS 系统
  6. 6. 设置备份任务
  7. 7. 后记
  8. 8. 参考资料

背景

需求的产生与其说是兴趣使然的灵光乍现,倒不如说是时代发展背景下的必经之路。

困局

因为我很喜欢玩本地运行的 AI 绘画,加上有时候想要用 GPU 服务器而不是工作机来运行,所以就把模型权重都搬到了 NAS 上以便跨设备共享。

我现在的主力 NAS 是一台群晖的 DS920+ ,接了一个 DX517 扩展柜,总共 9 个 16TB 的氦气盘,另外装了两块 2TB 的固态作为读写加速缓存。其中主机上使用 RAID10 阵列用于存储较为重要的数据,扩展柜上用 RAID5 阵列(我知道 RAID5 很垃圾,但总共就 5 个硬盘也玩不出什么花)存储一些不是很重要的备份数据。主机上的硬盘一半是新的,一半是捡的便宜的清零盘;扩展柜上的则是一个新的加上剩下的全是清零盘。主力 NAS 的主要作用是存储杂七杂八的数据,并不需要视频播放的功能,也不需要设置外部访问,因为我有一个威联通的小 NAS 作为辅助,装了一个 18 TB 的硬盘(从工作机上拆下来的,原来是放模型权重使用的)下载和存储电影,用 nyanmisaka 大佬的 Jellyfin 实现刮削管理和硬解支持。

由于群晖的 DS920+ 只有两个千兆网口,所以它的速度相当缓慢,加上现在基于 SDXL 的模型个个都是 6GB+ ,导致我每次加载模型都需要等很长一段时间。即使它支持链路聚合,把它的两个千兆网口聚合在一起,开启巨型帧之后在运气不错的时候确实能拉到接近理论上限 2000Mbps 的速度,但对于加载模型来说依然是不太足够的;更为雪上加霜的是,不知道是什么原因,我使用 2.5Gbps 网口的工作机走 SMB 协议读写数据的峰值速度只能到 100MB/s 左右(也就大概 1000Mbps ),这和聚合之前的单口速度完全没有区别了。

在以上的原因驱使之下,我在思考能否给 NAS 升个级,让它获得更为现代的速度,优化大块数据的跨设备使用体验。

抉择

对群晖的 9xx+ 系列 NAS 来说, 23 年的版本倒是提供了一个小的扩展卡位置(在 25 上又砍掉了,真是昙花一现呐),但目前官方支持的只有万兆的电口(RJ45)网卡,不确定是否有第三方愿意做这种异形的光口(SFP+)网卡并提供支持(前提是不被群晖针对)。在万兆速率的场合中,我并不喜欢电口——虽然我能保证网线不会成为瓶颈,但它的发热比光口大,铜缆的线径比光纤粗,模块价格比多模双纤贵(我的万兆交换机只有光口)。所以值得考虑的,就只有 16xx+ 或是 18xx+ 系列,能插官方的 PCIe 扩展光口网卡的产品了。可惜的是 25 年开始的群晖产品启用了硬盘白名单机制,没法启用未交保护费的硬盘,例如之前提到的那些清零盘,或是价格正常的固态(贴个牌就卖人家十倍的价格真是有够黑心的),这意味着可能的选项就只剩下了 1621+ 或是 1821+ 两款型号。在 1U 的机柜中,一个 4 盘位的主机和 5 盘位的扩展柜正好可以放在同一排,而 6 盘位或是 8 盘位的相对来说就必定需要分开放置,那么与其使用只是增加了两个盘位的 1621+ ,我想能不能一步到位升级个 8 盘位的 1821+ 。

群晖 DS920+ 和 DX517

但可惜的是,不知道是因为群晖的反向升级政策导致这个型号备受欢迎,还是为了对抗 618 的降价促销让本就没打算参与促销的商家也想趁机捞一笔,总之当我去检查购物车里放着的好几家值得比价的产品的时候,都发现了 500~1000 元不等的价格上涨(截稿前不信邪又去看了一眼,好家伙涨幅直接翻倍了),并且都不支持使用优惠券,这让本就不充裕的预算(还要算上新硬盘的价格)变得更为捉襟见肘。加上现在的主力 NAS 运行状态良好(买了也才三年,出于对扯皮的讨厌我又没有出二手的习惯),我开始思考是否真的有必要进行整体更换。

我有一个 LTO6 的磁带机,使用一台 Intel 的 NUC9 作为驱动主机,插了一张光纤通道的半高 HBA 卡来连接。磁带的主要目的是手动归档一些相对来说较为重要的大块数据:例如工作相关的数据,或是一些系统的完整备份,以及作为一些运营中服务的数据离线冷备份机制。

磁带机和驱动主机 (找不到更清晰的图了,将就着示意一下吧)

另外就是之前装 GPU 服务器时候,出于测试的目的多买了一块 3.84 TB 的 U.2 接口的硬盘,一直找不到合适的使用机会,所以扔在柜子里吃了大半年的灰;我总想找个机会能让它发挥作用,虽然最终还是没能成功用上(之后会提到为什么)。手里还有两块容量分别为 960G 和 3.84T 的 M.2 22110 固态,前者因为容量过小被替代淘汰,而后者是因为时不时掉盘被拆出来换掉了(怀疑是工作机主板的散热片上的导热垫太厚了把它压弯导致的,因为拆下来的时候 PCB 的中间凹下去了,大力出奇迹给它掰回来了一丢丢),但它们的 SMART 数据都是非常优秀的。

U.2 硬盘

M.2 硬盘

之前看老莱视频的时候看到过铭凡的 MS-01 ,它支持三块大船的组合(一块 U.2 和两条 M.2 22110 ),加上自带两个 10 Gbps 的 SFP+ 网口,使得它足以作为一个客制化的全闪 NAS 使用了。值得注意的是,它还带有一个无供电的单槽半高 PCIe 4.0x8 插槽,这对于显卡来说相当鸡肋,但对于连接磁带机使用的半高的 FC HBA 卡来说就是完完全全的圣体——高度正好,槽数正好,位宽正好,还无需额外供电:既不浪费,也不欠缺。至于它需要拖一块板砖电源,这对于空间充裕的机柜来说完全不是问题,甚至还因为它的电源输出线也有一定长度,反而能更方便地连接到 PDU 上去。

所以,在经过多次比较和几个不眠之夜的辗转反侧后,我最终还是痛下决心推迟了主力 NAS 的更新,选择了它作为辅助使用的全闪 NAS —— i9-12900H 的 CPU, 带上官方搭配的 96GB 内存和 2TB 固态硬盘,再用一张最高减 500 的 618 优惠券,加起来 52xx CNY 成功拿下。

规划

在等待快递的几天时间里,正好可以简单规划一下大致的执行方案,以便为之后的实施做好准备。

虚拟化平台

因为这个新的服务器需要同时承载磁带机和全闪 NAS 的功能,所以我想使用虚拟机的方案来同时运行它们。

主流的虚拟化的平台架构基本就是 VMware ESXi 和 Proxmox Virtual Environment (以下简称 PVE ) 两家:

  • ESXi 是商业系统,授权价格不菲(用开心版担心变成数据火葬场),并且对硬件的要求更高;
  • PVE 基于 Debian 和 KVM 开发,且作为开源软件提供,不需要企业服务时可以使用免授权费用的社区版,相较而言在各方面都更有优势。

之前在采购云端服务器的时候,我就有设置过双节点的 PVE 虚拟化集群,用来分离一些需要相对独立的运行环境的服务组合,所以在如何使用和管理上还算稍微有一些经验。综合以上因素考虑,这次在「家里云」部署的虚拟化实现方案也就选择它了。

硬盘划分

算上原机带有的一块 2TB 固态,加上手上现有的固态,按照这样的方案划分:

  • 960GB 的 M.2 用于安装 PVE 的操作系统
  • 2TB 的原机硬盘用于存储虚拟机的操作系统硬盘
  • 3.84TB 的 U.2 用于存储虚拟机的数据(但最后用的是那块 M.2 ,后面会讲为什么)

这样分配的好处是解耦虚拟化系统和虚拟机的数据,即使因为某些原因导致其中一个组件损坏,也能最小化它对于其他组件的冲击。

补充组件

因为现在在用的这张 HBA 卡配备的是全高的 PCIe 挡板,这在一般的使用情形下不会有问题,但对于新的这个机箱来说,需要配备一块半高的挡板。对于这种使用非常广泛的卡,兼容的挡板很便宜,加上它价格的两倍多的快递费用就能拿到手。

服务器和核心交换机之间的连接需要一对 SFP+ 模块,因为我用的是 Ubiquiti 全家桶,所以也就买了一对官方的光模块来满足我的强迫症和洁癖(当然也可以用机房淘汰下来的光缆,价格更优惠)。光纤的话没那么多讲究,买了一条 3 米长的优普光的 LC 接头的 OM3 多模双纤,价格便宜,品质也很不错。

多模光纤模块

安装硬件

硬件的安装非常容易,无需(猜猜我为啥要强调它)拧下底面的8颗螺丝,按下机器尾部的释放按钮,就可以将机芯整个抽出来了。

机芯(顶面)

机芯(底面)

硬盘

硬盘安装在机器的背面。拧下固定散热器的三颗螺丝,就可以看到固态硬盘安装位了。需要注意的是,安装 22110 硬盘前需要先拧掉 2280 位置上的螺丝和铜柱,避免把硬盘顶坏。

从包装箱中取出 U.2 固态硬盘转接板,准备安装大硬盘。

U.2 固态硬盘转接板

拿掉接口处的保护盖,使用附件中提供的 4 颗螺丝将固态硬盘固定到转接板上,再将装有硬盘的转接板安装到机器预留的位置。

使用转接板安装 U.2 硬盘

但在这一步,我发现好像有点不对——为什么装完后高出来了这么多??

硬盘太厚了

因为之前有过购买 2.5 英寸 SSD 的经历( SATA 接口的消费级固态),我大概猜到了可能是硬盘的尺寸规格不一致:这个机器只能支持薄款的硬盘,而这种服务器上使用的硬盘对它来说太厚了。经过询问客服,确认了它只支持 7mm 厚度的 U.2 固态硬盘,所以我手中这块 15mm 厚的服务器硬盘无法安装上去。

那就还是用原厂自带的硬盘吧。这是一块英睿达的 P3 Plus ,查了查应该是 QLC 颗粒,不过反正我之后会配置备份,问题不大。

P3 Plus 正面

P3 Plus 背面

装上原厂的散热片,硬盘部分就算准备就绪了。

硬盘就绪

HBA 卡

拧下挡板的两颗固定螺丝,拆下挡板,我们就能得到一张光秃秃的 HBA 卡。

拆下挡板的 HBA 卡

装上新的挡板,我们就能得到一张完美的半高 HBA 卡。

装上半高挡板 HBA 卡

把它装进机箱里,看起来不错!

装进机箱的 HBA 卡

总装完成的背面

安装虚拟化系统

硬件完成后就是安装操作系统了。把机器拿到机柜里,接上需要的线就可以开始安装流程。

上排的光纤是 HBA 卡连接磁带机使用的,下排的光纤是网络接口,右侧分别连接了用于视频输出的 HDMI 、用于控制输入的 USB 和用于引导安装系统启动的 USB ,以及最右侧的电源。

接好线

运维快乐本,启动!

装系统

按照指引流程一切顺利,很快就能完成系统的安装。当它自动连接上网络的时候,就可以拔掉安装时候使用的线,只留下运行所需的光纤和电源就可以了。

调试

启动 PVE 系统后,软件部分的管理工作就正式开始了。

更换软件源

因为我在国内,所以换成国内的软件源可以获得更好的使用体验。这里换成清华的软件源:

更换软件源

因为没有使用到 PVE 的官方源,它会提示 没有启用 Proxmox VE 存储库 ,但其实我们使用了镜像源就可以不用管它,软件是可以正常更新的。

因为不太确定 Ceph 的镜像应该如何使用,加上我应该也用不到这项技术,所以就把和它相关的源直接注释掉了。

调整硬盘

  1. 调整 SWAP 和 pve-root 大小

    或许是我在安装的过程中没看仔细,在安装完成后 PVE 自己的 root 分区只有 100GB ,剩下的全部分给了一个 LVM 。对于一般的使用情形来说,这样是足够的;但在我的使用场景中,我还是希望能将数据存放到它们该去的地方,让主硬盘只管理 PVE 宿主系统本身的内容。

    为了腾出空间,先删除 local-lvm 这个 LVM-Thin ,这样就能让硬盘空出来了。之后再调整 SWAP 和 root 的大小就行。我的操作有点问题导致出现了一个报错(但不影响使用),您可以参考文末参考链接中提到的操作流程。

  2. 调整硬盘和存储权限

    在 节点界面,选择 磁盘 - 目录 页面中,可以将额外的磁盘挂载为目录,从而用于存储更多的数据。

    在 数据中心 界面,选择 存储 页面中,可以为各个存储部分设置是否启用及对应的功能。在这里也可以添加 SMB/CIFS 作为存储位置,我将它连接到了主 NAS 用于存储备份数据。

设置 HBA 卡直通

因为 HBA 卡是给磁带机专用的,其他系统不会去使用它,所以我就将它设置为了直通模式来避免可能出现的访问冲突。

具体的操作流程可以阅读文末中给出的参考资料,在此处我只列举一下我执行的操作:

  1. 编辑系统启动参数:

    1. 编辑 /etc/default/grub 文件,在 GRUB_CMDLINE_LINUX_DEFAULT=... 行添加 intel_iommu=on iommu=pt 参数

      这一行就变成了:

      1
      GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
    2. 更新 grub

      1
      update-grub
  2. 编辑内核模块

    1. 编辑 /etc/modules 文件,添加以下内容:

      1
      2
      3
      vfio
      vfio_iommu_type1
      vfio_pci
    2. 更新引导系统:

      1
      update-initramfs -u -k all
  3. 重启系统,检查 IOMMU 是否成功启动。

到这一步一般就没问题了,但我为了更保险一些,避免可能出现的冲突,我还在 PVE 系统中将硬件禁用掉了。

只是我通过重载驱动的方式禁用得不是很成功,所以我使用的是直接禁用了驱动的方案。这里使用的驱动是 qla2xxx 。如果您也有直通的需要,请使用对应的操作流程,可以参照文末给出的参考链接。

我使用的 HBA 卡处在单独的 IOMMU 分组中,所以不需要调整分组相关的信息,就直接可以设置直通了。

添加 PCI 设备

我勾选了 所有功能PCI-Express ,运行起来一切正常。

迁移磁带机系统

磁带机的操作系统本身是直接安装在硬盘上的,所以先使用一个工具将它全部备份导出。我使用的是 DiskGenius (以下简称 DG ) ,可以得到一个 pmfx 文件,其中包含了磁盘的分区表,以及各个分区中的所有数据。

导出磁盘数据

为了迁移到 PVE ,我们需要对这个硬盘进行压缩和格式转换。目标格式是 qcow2 格式,我选择使用 img 作为中间格式。

因为其中所有的数据加起来不到 30GB ,所以我想用 32GB 作为硬盘的初始大小。使用 DG 新建一个 32GB ( 32768MB )的 .img 文件,以便将上一步中导出的数据恢复进去。

新建 img 文件

创建磁盘、分区映像文件

创建 img 文件需要执行一次完整写入,这需要一定的时间。创建完成后,这个文件就会被作为一个虚拟磁盘自动打开。

空白的 img 磁盘

打开导出的 pmfx 文件,选择 从镜像文件还原磁盘/分区 ,选择上一步中创建的 img 文件作为目标,开始还原。 DG 会自动调整分区的尺寸,以放下所有的内容。

从镜像文件还原磁盘/分区

选择目标

还原到目标磁盘

还原完成后,可以看到 img 文件已经有了完整的分区格式,包括 GPT 分区表中的信息。

还原完成

将这个 img 文件放到 PVE 机器上,使用 qemu-img 将它转换成 qcow2 格式:

1
qemu-img convert -f raw -O qcow2 <img 文件名> <qcow2 文件名>

然后就可以将它导入到虚拟机(需要先创建,我用的是 q35 + OVMF )里面去了。

转换并导入硬盘

因为我使用的是 Windows Server 作为磁带机的驱动系统,而 Windows 本身并没有集成对于 VirtIO 的驱动支持,直接使用 VirtIO 的硬盘启动会导致出现 INACCESSIBLE BOOT DEVICE 的蓝屏报错。我的解决流程是这样的:

  1. 以 SATA 的方式挂载系统硬盘,挂载 VirtIO 的驱动镜像 ISO 文件(可以在 这里下载)为光盘
  2. 开启虚拟机进入系统,打开挂载的光盘安装 VirtIO 驱动,关机
  3. 断开光盘的连接,创建一个新的使用 VirtIO 的临时硬盘,开机,关机:这一步是因为 Windows 上只是安装了 VirtIO 驱动,但不知道要开机启动,通过连接一个设备让它知道要在系统启动时就加载这个驱动(应该有调加载项的方法,只是我不太了解)
  4. 删掉临时硬盘,将系统硬盘设置成 VirtIO 模式,开机

在修复完成系统后,为了确保系统能正常运行,我把虚拟磁盘扩容到了 128GB 。此时的新增空间只会被直接追加到分区底部,而主分区和空间之间夹着一个恢复分区,使得 Windows 里的分区工具没法直接扩展主分区。解决方法也很简单,那就是再次使用 DG 把这个恢复分区移动到磁盘末尾,这样就可以直接使用分区工具在无需重启的情况下自动扩容了(重启到 DG 的 PE 环境扩容会失败,因为 DG 的 PE 环境里没有 VirtIO 的驱动,无法加载主硬盘)。

安装 NAS 系统

因为这个 NAS 是作为辅助使用的,主 NAS 依然是群晖,所以我只想用一个能开 SMB 的简单解决思路。

我一开始选择的是 OpenMediaVault ,但它在安装完成后无法启动网页控制台,也没有任何报错,我也不明白为什么。

所以最终我选择了 TrueNAS Scale ,挂载虚拟磁盘来使用没什么问题,速度也非常快,加载模型可以拉满我工作机的 2.5Gbps 网口,非常好用。

再在 NAS 上设置了一个每小时同步给主 NAS 的同步任务(用 FTP 协议就会莫名其妙掉速和卡住,换成使用 SFTP 协议可以跑满主力 NAS 的 2000Mbps 聚合速度),再在主 NAS 上设置好快照保护和备份,这样就能实现无感的数据安全加强了。

设置备份任务

PVE 可以连接 SMB/CIFS 作为数据目录,所以我创建了一个与主 NAS 的连接,配合每日执行的备份任务计划来保护虚拟机。

备份的数据

后记

一般来说,全闪 NAS 在虚拟化的过程中开启直通模式会获得更为强大的性能;但对于我来说,因为我的两台虚拟机都需要读写数据硬盘(三星的 PM983 ,是 M.2 22110 规格),无论直通给谁都有另一台设备失去对硬盘的访问权,加上我觉得目前使用 VirtIO 的虚拟化的性能损失是可以接受的(如果下次追求极致速度的话就直接装 NAS 系统了),所以就没有设置直通,而是使用了虚拟磁盘以便在虚拟机中共享。这里是在 Windows Server 上的速度测试截图,可以看到基本和商家给出的标称参数(读 3000MB/s ,写 1400 MB/s )相差不多:

Windows Server 中的硬盘速度测试

在一次例行执行磁带备份工作的时候,当拖入多个文件时,磁带机在写入最后一个文件时出现了长时间的卡死,经过强制重启才将磁带正常弹出,不确定是虚拟化导致的不稳定,还是它本身的驱动跑飞了。好在磁带和磁带机本身看起来没有出现损坏,经由检查工具检查也看起来一切正常,目前无法稳定复现(当然也不希望复现)此情形,可能以后备份的时候要注意一下不能一次拖入太多文件吧(但怎样算太多呢)。

最后,给所有的存储设备来一张全家福吧。

存储设备全家福

参考资料

分享这一刻
让朋友们也来瞅瞅!