如果你的诉求非常简单、明确,不需要界面,上一篇内容中的UbuntuServer应该已经能够完成你的诉求了。
但是,如果你和我一样,想要使用一个还算简洁漂亮的界面来管理配置和查看状态,可以考虑和我一样,使用简单的WebUI来解决问题(偷懒)。
最简单的Unraid安装方案是制作一块USB安装(引导)盘。正好有一块闲置很久的16GU盘,就它啦。这块U盘将在使用的过程中一直插在设备上,所以推荐选择质量&口碑较好的盘,如果你有靠谱的TF卡和读卡器,也是OK的。
打开工具,推荐选择默认的“稳定版(stable)”的版本,如果你不想让工具自动从官方下载镜像,可以手动从官方下载页面提供的不同版本的系统镜像。如果你不清楚每一个版本之间的细节差异,对你的硬件来说有什么具体使用上的差异,我推荐始终选择包含了更新补丁的最新的稳定版。
完成启动盘的制作后,将U盘插入机器,重新启动机器,将会看到熟悉的Grub引导界面,我们直接敲回车进入系统即可。首次安装推荐连接显示器或视频采集卡,观察是否有异常,后续正常使用则不必连接视频输出设备。
在开始引导之后,界面将不停输出日志,稍等片刻,日志输出完毕的时候,“安装”的第一步就完成啦。
访问日志中的输出的IP地址“10.11.12.211”,就能够打开管理页面了,在打开的页面中完成超级管理员的用户密码设置,Unraid的基础安装就结束啦。
如果你的路由器中有IP绑定,或者DHCP设置,你可以将Unraid这台机器的IP进行固定。当然,如果你不希望使用固定IP,也可以使用arp-a在每次使用Unraid设备时,先扫描一遍局域网,获取下设备的IP地址。
如果你在安装过程中,遇到了问题,可以参考下文中的“踩坑”部分。
这样设置的好处有几个:
当然,这样设置也有一些缺陷,比如:
完成基础的安装和磁盘规划后,我们还需要做一些配置,才能够愉快的使用它来作为备份系统。
先打开“共享”页面,能够看到系统中所有存在的共享配置。
点击“创建共享”按钮,打开“创建共享”的新页面。
当我们配置完毕之后,我们需要在macOS中先连接一次这个“共享”,步骤参考图片,先访问“网络”,然后连接“Unraid”设备,最后输入账号密码,完成连接。
Unraid上默认的Docker版本只有docker容器,没有compose工具,为了减少docker应用的配置的复杂性。
我们可以从GitHub上下载新版本的compose,相比较使用Python编写的老版本,新版本基于Golang,干净又卫生。(如果遇到了下载问题,可以参考下文中“无法直接安装应用插件”小节来解决)
复制#shasum-cdocker-compose-linux-x86_64.sha256docker-compose-linux-x86_64:OK接着,将文件放到合适的目录,就能够在系统中使用docker-compose来进行容器的简单编排使用了:
复制mvdocker-compose-linux-x86_64/usr/bin/docker-composechmod+x/usr/bin/docker-composeUnraid踩坑经验谈Unraid相比较群晖缺乏相对一致的硬件支撑,相比Windows、Ubuntu等操作系统,缺乏大量的开发人员,所以在兼容和适配上,多多少少会有一些小的瑕疵。
不过问题不大,基本都是可解决的。
我制作安装盘的操作系统是macOS,使用手动指定系统版本会出现引导盘不被识别的问题。但是“乖乖地”让工具下载系统,然后进行安装,则不会出现问题。(推测是制作工具逻辑处理有问题)
如果你也是手动指定版本,出现了找不到U盘的问题,那么试试让工具“自动”制作镜像试试。
制作启动盘时的“语言”选项仅影响启动盘制作工具的界面展示,默认的系统中是不带多语言的,只有英语一种语言。
解决问题的方法很简单,安装中文语言包即可,不过在安装过程中,你可能会遇到“无法安装”的问题。可以参考下面的方法来解决问题。
在Unraid中,我们想要安装插件,需要先启用社区插件功能(communityapplicationplugin)。
在启用功能的过程中,我们可能会遇到“网络失败(networkfailure)”的问题。
但其实,有更“简单”的方法。由于我们不会经常性的安装插件,实际使用的就那么几个罢了。所以,我们可以通过手动执行安装命令,来完成插件的安装,而不用修改系统提供的程序。
我们在网页中点击安装,实际上会触发下面的命令:
解决中文语言包的安装,和插件是类似的。默认的语言包安装命令如下:
至于如何获取这些命令,很简单,在网页中安装的时候,右键页面元素,在弹出菜单中选择“检查”,打开“网络调试工具”,然后再点击“安装”按钮,复制网络请求“StartCommand”接口中的命令即可。
原本只有一块SSD的时候,Unraid启动后能够正确检测出磁盘。但是,当我插入两根M2SSD之后,Unraid磁盘界面中的SSD“都消失”了。
观察Unraid自带的“工具”、“系统日志”提供的运行日志,可以看到系统能够监测出插了两块Nvme(M2)SSD,排除掉硬件接口故障。
复制Jan1421:20:18Towerkernel:ahci0000:00:17.0:Found2remappedNVMedevices.因为之前Unraid能够识别硬盘,加上排除掉硬件故障,最有可能的问题所在应该不是Unraid的设置,就是BIOS设置。在Unraid控制面板中“转了一圈”,没有看到针对M2SSD的特别设置,那么大概率问题在BIOS设置。
重新启动设备,进入BIOS设置检查,发现BIOS自带了Raid程序,虽然并未启用这个功能,但是推测“两块”磁盘大概是因为这个功能没有禁用,导致激活了Raid的控制器的某些逻辑,让Unraid识别NVMeSSD失败了。
重新启动设备,进入Unraid系统,发现磁盘识别都正常啦。
当我们完成磁盘阵列设置,点击“启动”之后,不论我们想如何调整阵列,会发现Unraid的界面中都会提示我们“设置有误”。
某种程度上这算是Unraid对于系统设置的保护,解决这个问题需要先在“主界面停止磁盘阵列”,接着在工具页面选择“新配置”,重置磁盘阵列。
然后就能够和新安装的系统一样,调整配置了。
如果出现这个问题,不要慌张,将硬盘保持原始设置重新设置一遍即可,数据不会出现损失。
针对家用场景,在非ECC内存的环境下,使用Btrfs作为文件系统,可以减少很多不必要的数据完整性的恐慌问题。
我们对于数据的完整性的恐慌,无非来自“数据存储设备”质量是否靠谱。涉及宿主机质量、电力保障、硬盘质量、内存质量、操作和保存数据落地的程序逻辑几方面。就家用场景来说:
针对在Btrfs中,内存是否使用ECC内存,以及不使用ECC内存可能带来的麻烦,或许我们可以这样分析:不同类型的内存,对正确写入或读取数据可能造成什么样的问题,以及发生概率?是否可感知来进行判断。
在解答上面的问题之前,我们需要先来了解一些Btrfs的基础能力。
在了解了Btrfs的基础能力之后,我们来假设不使用ECC内存,在不同场景下可能出现的问题:
第一点,其实官网中就有提到过,Btrfs默认的行为是“thechecksumiscalculatedbeforewriteandverifiedafterreadingtheblocksfromdevices”,文件系统不会未做校验计算,就直接往磁盘做持久化操作,写废数据。在存储过程中,如果设置Btrfs允许重试,数据能够修正,那么用户不会有感知。如果重试发现数据无法修正,那么将会中断写入,应用程序和用户都将会有感知。
第二点,文件系统如果在擦写(更新)数据时,经历异常遇到了脏数据,因为有校验和机制的存在,是不会将坏的数据直接写入磁盘的,和第一条其实是一样的。
第三点,经过前两点,我们知道数据落地都是有完整性保障的。
但是读取的时候,确实存在一些风险,会让我们的得到的数据不见得是正确的。其一,由于校验和自动修复机制的存在,哪怕读取的数据是有一些问题的,Btrfs是能够一定程度上解决问题和进行修复的,但是如果所有数据副本都遇到了问题(概率低),是有可能无法保全数据的(不论是否使用ECC)。其二,如果读取数据是正确的,但是遇到了数据需要使用内存中转,恰好中转区域因为一些问题,导致数据变脏了,这里如果应用程序没有纠错、发现能力,数据的完整性确实也是无法保障的。如果出现问题的内存区域很多,当然还有可能出现无法启动系统的问题。(如果使用ECC会更省心一些)
所以,如果你的硬件组合允许你使用ECC内存,尤其是近几年的12代、13代CPU,不放使用ECC内存。如果你极端恐慌这个事情的出现,可以考虑关闭“读取时自动修复”的功能,让问题更早的暴露出来。
当然,如果你的电力靠谱,购买的硬件靠谱,没有在强磁场环境放置设备,没有7x24x365满负荷运行系统,触发上面问题的概率是非常低的。而且即使出现问题,如果我们使用的是经过验证的软件协议,软件也会进行数据验证和纠错,所以不必特别担心。毕竟,这个星球上有非常多的手机、电脑都使用着non-ECC内存,不是嘛?
愿我的读者和朋友们,在新的一年里,问题“兔few”顺利“兔many”,生活“兔happy”。