04月27, 2022

记录 NAS 安装 FreeNAS 系统后又换回 Ubuntu 的狗血经历

一晃眼的功夫网站又两年没更新了。刚好今天折腾了点东西,就来水一篇吧。

事情是这样的,2020 年初疫情刚开始那段时间在家没事干,就组装了一台 NAS,用的 Ubuntu 的系统。除了常见的 SMB 文件共享、Plex 影音管理外,还在上面部署了一堆别的东西,比如博客、GitLab 等。买了两块二手的企业硬盘组了个 RAID 1,文件系统用的 ZFS,用来存数据。系统已经稳定运行了两年,这是前提。

后来了解到有一款专门用于 NAS 的开源操作系统 FreeNAS,也就是现在的 TrueNAS Core。虚拟机里面测试了下,功能还是很强大的,而且刚好 FreeNAS 用的也是 ZFS 文件系统,也就意味着我硬盘中三千个 GB 的数据可以无损转移过去。于是就心心念想把现在 Ubuntu 换成 FreeNAS。

动手安装就比较简单了。因为 FreeNAS 的系统盘用一个 16GB 的 U 盘都完全足够,且其系统盘不能用于存储任何数据,为了不浪费我的 256G 的 SSD,就把 FreeNAS 装 U 盘里了。

踩坑之路就此开始。

因为手里就一个 U 盘,无法既用来启动安装镜像又用来装系统,于是想到虚拟机装系统,然后放到 NAS 上面运行的方案。下载 VMWare Workstation Pro(免费的 Player 版本不支持使用物理磁盘),创建虚拟机,硬盘选择使用物理磁盘且整个磁盘分给虚拟机。

创建完成后启动虚拟机,此处遇到第一个坑,启动系统提示“客户机操作系统已禁用 CPU,请关闭或重置虚拟机”……多处查资料,修改虚拟机版本、改虚拟硬件等均无效,后来想到可能是使用物理磁盘的原因导致的,最终再添加一个虚拟磁盘解决问题,顺利安装系统到 U 盘。

把 U 盘插到 NAS 上,调整启动顺序,开机。一次点亮,完美。进入到 FreeNAS 后台,导入池,完美识别旧硬盘,数据全回来了。接下来就是配置 SMB 共享,一切都很顺利,除了 ACL 有点看不太懂以外。

接下来第二个坑。使用自带的插件安装 Plex Media Server,配置完电影目录之后发现电影刷新不出来,目录是空的。这里是个小坑,当池中的数据集有多级目录时(嵌套数据集),Jail 的挂载点不能挂载父目录,只挂载父目录会导致子目录没有读写权限。

第三个坑,因为 FreeNAS 官方的插件很少,第三方的也不多,所以有必要装个虚拟机运行网站等服务。FreeNAS 虚拟机功能安装 Ubuntu Server,配置 Docker。安装完成后准备把硬盘上的代码目录映射到虚拟机里面去,然后竟然发现——虚拟机没有挂载点这个功能!!Jail 都支持的挂载点,虚拟机居然不支持!!!数据不能映射出去那还要这个虚拟机有啥意义啊!又是网上一顿搜索,发现大家的解决方案居然是——在 FreeNAS 里面创建 NFS 共享,然后在虚拟机里面挂载这个 NFS 共享[6],啊这……好吧,我照做就是。

一切就绪之后开始准备踩第四个坑。目录全部映射进去之后,docker-compose up -d,居然启动不了,报没有权限。各种排查问题、改文件权限、改 docker compose 文件只保留一两个简单的容器等等,全都无效……此时已经萌生退意了,想想装在 Jail 里的 Plex 无法使用之前容器中的数据、Plex 装在虚拟机的容器里面又无法使用硬件加速、GitLab 这个资源消耗大户放在虚拟机里面更是导致性能受损、一共只有 16GB 的内存光 ZFS 自己就要吃掉 8GB,等等……简直了……

还好我的 FreeNAS 是装在 U 盘里的,电脑重启,U 盘一拔,又回到了之前的 Ubuntu,爽歪歪。等等,我数据怎么没了?

挂载硬盘的 /mnt/nas 目录成了空文件夹,里面三千多个 GB 的文件全找不到了。但查看 zfs listzpool list 又全是正常的,所有的池和数据集都还在,没有任何问题,这就奇怪了。原来真正的大坑才刚刚开始……

再次重启回到 FreeNAS,看到三千多 GB 的文件都还在,至少悬着的一颗心暂时是放下了。问题是这些文件在 Ubuntu 里面怎么看不到了,问题出在哪里。就这一个问题折腾了几个小时。首先想到可能是版本问题,FreeNAS 把 ZFS 的版本修改了,于是 Ubuntu 里面不识别了。查看一下 ZFS 的版本号,FreeNAS 是 2.0.7,Ubuntu 18.04 是 0.8.3。差了两个大版本啊,这个版本原因是极有可能了。

网上搜索一番,Ubuntu 20.04 LTS 强化了对 ZFS 的支持,内置了新版的 ZFS。好吧,一直拖着不想升级操作系统,这次是不升不行了。直接执行 do-release-upgrade 命令即可升级到 20.04,真方便。这里有个小插曲,因为系统升级中不支持第三方的软件源,使用官方源升级过程中总是有个 exFAT 的包下载不了,屡次导致升级失败。手动在 source.list 中添加清华大学的软件源之后使用 do-release-upgrade --allow-third-party 后即可成功下载。

半个多小时后升级完成,再次查看 ZFS 的版本号,终于从 0.8.3 来到了……0.8.4

不出所料地,/mnt/nas 目录下的文件还是看不到,zpool listzfs list 依然是正常的。

看来官方源是指望不上了,众所周知官方软件源的版本都很低嘛。那就只能尝试自己编译安装 2.x 版本的 ZFS 了……

ZFS 的源码位于 [GitHub - openzfs/zfs: OpenZFS on Linux and FreeBSD],当前的最新版本是 2.1.4。编译安装的方式参考 https://openzfs.github.io/openzfs-docs/Developer%20Resources/Building%20ZFS.html 。下载源码,配置,编译,一气呵成,最后一步,sudo make install …… 失败了(没做记录,想不起来是什么错误了)。

编译行不通,找找别的方案吧。最后终于被我发现了国外已经有人针对这个问题自己做了个软件源,只需要添加进去就 OK[5]

sudo add-apt-repository ppa:jonathonf/zfs
sudo apt update
sudo apt upgrade

终于将 ZFS 升级到了 2.1.4。虽然走了不少弯路,但总算是成功了。重启电脑,再次查看文件,终于~~~诶?文件呢?

折腾了一上午,最后还是没把文件找回来,三千多 GB 啊……

这时我想到了万能的谷歌。英文搜索 ZFS 文件不显示,其中有一个回答提到 “会不会是挂载点设置错了呢”,我心想,谁特么会犯这种低级错误啊,挂载点都能设错,呵呵。顺手 sudo zfs mount 一下吧,好家伙,小丑竟是我自己……原挂载到 /mnt/nas 下的文件系统,被挂载到了 /nas 目录下……打开 /nas 目录,果然……所有文件都好好地躺在那里……

ZFS 文件系统在未设置挂载点时,默认是挂载到根目录下面的。我想一定是 FreeNAS 把挂载点的设置给还原了……

重新设置下吧。sudo zfs set mountpoint=/mnt/nas nas,搞定,完结撒花。走了一堆弯路,结局却有点狗血。

总结。尝试使用 FreeNAS,最终因 FreeBSD 的兼容问题、数据转移问题、性能问题等而放弃,返回继续使用 Ubuntu,又因 ZFS 的挂载点被还原导致折腾了一半天。

以上内容全是废话,凑字数的。最终原因是 ZFS 设错了挂载点。


参考资料:

[1] ZFS on Linux 官方网站,OpenZFS on Linux

[2] 编译安装 ZFS,Building ZFS

[3] GitHub - openzfs/zfs: OpenZFS on Linux and FreeBSD

[4] ZFS 2.0.0 for Ubuntu 18.04 and 20.04

[5] ZFS on Linux 第三方软件源,ZFS on Linux : Jonathon F

[6] 玩转Freenas系统06——freenas下使用docker(配置RancherOS/Portainer)

本文链接:https://icewing.cc/post/change-nas-to-freenas-and-turn-back.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。