搞台 NAS (3):Openmediavault 部署 ZFS 文件系统

在上一篇文章,我们装好了 Openmediavault,完成了基本的配置,安装了 Openmediavault 插件,这次我们就可以开始尝试部署 ZFS 文件系统了。在 OMV 上使用软 RAID 加 ext4 或者 btrfs 是完全够用的,我这纯粹是听了群友的鬼话非要折腾 ZFS。ext4、btrfs 等其他文件系统的使用方法,可以参照参考资料中的介绍。

OMV 部分总共分为三篇文章,这是第 2 篇:

  1. Openmediavault 的安装与配置
  2. Openmediavault 部署 ZFS 文件系统
  3. Openmediavault 通过 Docker 部署 qBittorrent

替换 Proxmox 内核

Proxmox 内核(即 pve 内核)对 ZFS 文件系统的支持要更好。要使用 ZFS 文件系统,首先需要将 Debian 内核替换为 Proxmox 内核。

PS:踩的坑之一,不换 Proxmox 内核,ZFS 跑不起来……

安装 openmediavault-kernel 插件

登录 OMV 的 Web 管理界面,点击左侧“系统”、“插件”,在右侧搜索“proxmox”即可找到 openmediavault-kernel 插件。选中 openmediavault-kernel,点击“安装”按钮,确认安装。

安装完成后,按下 Ctrl + Shift + R 或者 Ctrl + F5 强制刷新页面缓存,然后可以在左侧“系统”菜单下看到“内核”项。

安装 Proxmox 内核

点击左侧“系统”、“内核”,点击右侧“Proxmox”图标,选择“安装 Proxmox 内核”一项,开始安装进程。

安装完成后,刷新页面,可以看到 pve 内核已是默认。

点击右上角电源图标,重启系统。如果能够正常进入系统,就可以移除常规内核了。

清理其他内核

点击左侧“系统”、“内核”,点击右侧“Proxmox”图标,选择“移除非 Proxmox 内核”一项,开始清理其他内核。

刷新页面后,可看到只有 pve 内核了。这里可以考虑再重启系统一次。

安装 ZFS 文件系统支持

禁用 backports 源

PS:踩的坑之二,不禁用 backports 源,ZFS 装不上……

点击左侧“系统”、“omv-extras”、“设置”,取消勾选“Backports”选项,点击保存,二次确认应用。

安装 openmediavault-zfs 插件

点击左侧“系统”、“插件“,在右侧搜索“zfs”即可找到 openmediavault-zfs 插件。选中 openmediavault-zfs,点击“安装”按钮,确认安装。

安装完成后,按下 Ctrl + Shift + R 或者 Ctrl + F5 强制刷新页面缓存,然后可以在左侧“存储器”菜单下看到“zfs”项。

创建 ZFS 存储池、数据集

ZFS 文件系统中,有存储池、数据集、卷等概念。存储池是一组磁盘构成的逻辑卷,多个磁盘组成软 RAID 阵列;数据集则相当于存储池的一个子文件夹,可更改的选项会比存储池更多,通常用它来存储数据。

擦除硬盘

创建存储池前需要先将磁盘擦除。登录 OMV 的 Web 管理界面,点击左侧“存储器”、“磁盘”,选中需要擦除的硬盘,点击“擦除”图标,二次确认擦除,选择“快速”模式即可。

重复上述步骤,将所有要放入 ZFS 存储池的磁盘都擦除。

创建存储池

点击左侧“存储器”、“zfs”、“池”,点击加号图标,选择“添加池”一项,进入创建存储池页面。

在创建存储池页面:

  • 名称:存储池的名称,根据个人喜好,我这里叫 main
  • 池类型:RAID 类型,通常根据磁盘数量选择,磁盘应当是同品牌、同型号、同大小的。我这里只有 2 块盘,所以选择“镜像”;
  • 设备:勾选上一步中擦除过的设备;
  • 挂载点:可以留空,系统会自动设置,也可以根据习惯自行设置;
  • 设备别名:“以 ID”,不要改;
  • 强制创建:磁盘大小不同时才需要,这里不勾选;
  • 设置ashift:注释都说了不要改;
  • 压缩:可以勾上,压缩类型选默认的“zf4”就好,不会占用太多资源。

点击“保存”按钮创建存储池,二次确认应用设置。可以看到存储池已经在列表中了,挂载点是 /main,可以用命令行访问这个目录看看。

创建数据集

OMV 里面,ZFS 的数据集被称作“文件系统”。点击左侧“存储器”、“zfs”、“池”,勾选刚刚创建的存储池,点击加号图标,选择“添加文件系统快照卷”选项。

PS:这里的“添加文件系统快照卷”指的是“添加文件系统、快照、卷”,并不存在某个东西叫“文件系统快照卷”……

在弹出的对话框里:

  • 类型:选择“文件系统”,即数据集;
  • 前缀:存储池的名称,不需要修改;
  • 名称:根据需要起名,我这里叫 test
  • 挂载点:同样可以留空。

点击“保存”按钮创建数据集,二次确认应用设置。可以看到数据卷已经在列表中了,挂载点是 /main/test,可以用命令行访问这个目录看看。

设置共享

设置好共享后,就可以在局域网内访问 NAS 上的存储空间了。我的主力机器是 Windows 的,这里主要介绍 SMB 协议的共享。

调整存储池 ACL 设置

ZFS 插件默认禁用了 ACL 权限控制,这会对之后共享文件夹的设置产生一定的影响,需要手动开启。

点击左侧“存储器”、“zfs”、“池”,选中之前创建的存储池,点击“特性”图标,进入特性页面。修改以下几个参数:

  • aclmode:改为 groupmask
  • aclinherit:确认为 restricted
  • acltype:改为 posix

上面这些修改都需要先选中修改项,再到上方点击“编辑”按钮,然后再手动输入值,保存。

新建用户

为了访问共享文件,我们需要创建一个新用户。点击左侧“用户”、“用户”,点击“新建|导入”图标,选择“创建”项。填入以下信息:

  • 用户名:自己选择一个用户名,这里使用 asdf
  • 密码:自己选择一个密码;
  • 用户组:留空即可,系统会自动加入 users 用户组。

点击保存,二次确认应用,即可看到新建的用户出现在列表之中。

设置共享文件夹和权限

点击左侧“存储器”、“共享文件夹”,点击“创建”图标。

在打开的页面中,设置如下参数:

  • 名称:共享文件夹的名称,可以和数据集保持一致;
  • 文件系统:选择之前创建的数据集;
  • 相对路径:选择共享文件夹本身,显示出来应当是 /
  • 权限:默认即可,或根据自己需要修改;

点击保存,二次确认应用,即可看到创建的共享文件夹出现于列表之中。

选中刚刚创建的共享文件夹,点击“访问控制列表”按钮,在进入的页面中:

  • 找到刚刚创建的 asdf 用户,将之权限改为“读/写”;
  • 将下方的所有者从 root 改为 admin
    • OMV 其他文件系统默认的所有者即是 admin,推荐手动调整一下;
  • 将用户组的权限改为“读/写/执行”;
  • 勾选下方的“取代”和“递归”选项。

点击保存即可。

设置 SMB 共享

点击左侧“服务”、“SMB”、“设置”,勾选“已启动”项。点击下方保存,二次确认应用,即可打开 SMB 服务。

点击左侧“服务”、“SMB”、“共享”,点击“创建”按钮,设置如下项:

  • 共享文件夹:选择刚才创建的共享文件夹;
  • 公开:选择“否”或者“允许访客”均可;
  • 勾选“继承ACL”、“继承权限”。

点击保存,二次确认应用,SMB 设置就 OK 了。

连接和测试

在本地机器上,打开 Windows 资源管理器,通过以下两种方法之一访问:

  • 打开“网络”文件夹,找到“OPENMEDIAVAULT”(安装时设置的主机名)项目,双击进入;
  • 在地址栏中输入 \\<your_nas_ip>(两个反斜杠 + IP地址),按回车进入。

随后会弹出窗口请求用户名和密码,输入此前创建的用户即可登录。

尝试复制文件到 NAS,或者从 NAS 复制文件,速度能够基本跑满千兆以太网。


结语

到这一步,NAS 算是达到一个可用的状态了,同样是非常麻烦。部署 ZFS 文件系统踩了巨大多的坑。

参考资料

本作品采用知识共享署名 4.0 国际许可协议进行许可。
本文链接:https://blog.ceba.tech/2022/07/NAS-3-OMV-ZFS/