#俗话说的好:All In One, One boom, All boom
By Luckykeeper 2020-07
这是以前写的一些东西,以前还有不少文章会在整理之后慢慢传上去


施工状态

2020年10月28日 @ 10:30:43 创建页面

2020年10月30日 @ 11:56:15 原样上传完成,发布


我们将从以下部分介绍搭建Unraid服务器的注意事项:

1.0为什么选择Unraid

1.1硬件准备

1.2制作启动盘

1.3认识DashBoard

1.4配置Main(Array、Parity、Cache)

1.5配置Shares

1.6配置Users

1.7配置Settings

1.8配置plugins

1.9配置Docker

1.10配置VMs(配置软路由)

1.11应用商店Apps

1.12关于Tools

1.13其它

正文开始!车速加快注意!

1.0为什么选择Unraid

要玩虚拟化,我们通常有这么几个系统/平台选择
1.ESXI
2.PVE(Proxmox VE)
3.Hyper-V
4.Unraid
咱来分别介绍一下
1.ESXI
ESXI是VMware家的东西,一提VMware,大家都知道,他们家老虚拟机了,以前我也用过他们家的VMware WorkStation,非常好用,而ESXI是他们家的虚拟化平台,支持KVM虚拟化,WEB管理。对品牌服务器(尤其DELL和HP)的服务器支持非常好,稳定性是最好的。缺点是很多非服务器平台无法使用这个系统,而且开销比较大,对服务器硬件性能要求比较高。
2.PVE
PVE是开源的,基于Debian,同样是KVM虚拟化平台,优点是支持的平台非常广泛,硬件开销小,甚至J1900都能拿来跑一跑,操作比较简单,WEB管理,稳定性比ESXI稍差。
3.Hyper-V
巨硬(微软)的方案,在田牌服务器系统就能跑,我也用过,现在的性能甚至微微优于VMware家的方案,在WinServer上跑,不是KVM虚拟化,但是效率也很高。本地GUI管理,管理、迁移方便。
4.Unraid
算是新兴的东西了,我是从大家拿白嫖王(LinusTechTips)那里知道的这么个玩意儿,LimeTech家的东西,系统收费50刀(但是可以白嫖),这个系统的初衷并不是搞虚拟化的,从名字就可以听出来,Unraid是做软RAID的,也就是做文件阵列存储,和NAS有点像,但是它现在也支持KVM虚拟化和Docker等等,功能非常强大,稳定性不如ESXI,支持平台非常广泛,硬件开销也比较小,J1900也一样可以跑,WEB管理。

我的需求是做一个All In One的机器,把以前的软路由,Winserver服务器整合在一台机器,解少硬件,降低总功耗。
我原先的机器是AMD A8-7600(2c/4t)+8G RAM 5口LEDE x64软路由+今年过年的时候闲鱼捡来的12盘位X58服务器(X5680*2 12c/24t+8G DDR3 RAM)Windows Server 2012 R2 DataCenter
我选择Unraid有这么几个原因
1.ESXI:我捡的这个X58服务器是杂牌的,经过自己刻盘测试,ESXI支持并不好。
2.Hyper-V:不选择它的原因是我捡的这个服务器对Windows支持不好,板载网卡开机一段时间之后自己会莫名其妙消失,之前我是加了一张无线网卡上网,不用有线。而且Windows会周期性掉SAS卡,导致大量硬盘离线,每次遇到这个问题,需要卸载重装SAS卡的驱动,所以Windows的所有系统是没法用的,另外,因为要做软路由,需要把网卡直通给软路由的系统,Hyper-V不是KVM,所以不行。
3.Unraid:它的GUI管理比ESXI和PVE好配置简单,管理方便,除了虚拟化,还支持Docker,而且我最看重的存储是它的强项(1.3会详细说),而且看了老莱(LinusTechTips)的“7人1机”视频之后,我对这个系统颇有好感,于是就上LimeTech家的车啦~

1.1硬件准备

要玩虚拟化,就需要CPU大量的线程和海量的内存,我过年捡的服务器是双路X5680,一个X5680有12个核心24个线程,跑虚拟机是足够了,但是原先的DDR3 8G RAM显然是不够的,所以我在闲鱼什么有捡了12根4G的DDR3 REG ECC内存,有了REG ECC内存,我们就可以实现内存纠错,系统就不会死机、蓝屏(Linux并没有蓝屏),但是由于这个捡来的服务器抽风,有两个插槽有点问题,所以那两个插槽的东西有时候会识别不出来,但是40G内存也足够用了。因为要做效验运算,ECC内存发热量非常大,不过服务器的4个可以上万转的工业风扇也不是闹着玩的,对付这点热量问题还不大。

12个内存条插满就是爽~~~~~~嘻嘻
就是ECC内存有点烫手,摸一下……呀呀!!(太烫了)
保护手指,从我做起,远离ECC内存,人人有责!

1.2制作启动盘

硬盘准备好了,我们就要制作启动盘了,大部分虚拟化系统是用U盘做启动盘的,Unraid也不例外,而且Unraid还通过U盘验证你是否购买了它家的系统。出于系统的稳定性和LimeTech验证的需要,我们需要准备一个合格的U盘,需要满足以下条件:
1.大小在1G以上32G(含)以下
2.有GUID(所以SD卡、硬盘套读卡器/硬盘盒就不行了,小厂的U盘也不一定可以)
3.FAT32格式
推荐从正规渠道购买的大厂的U盘,因为U盘是整个虚拟化平台的基石,所以U盘的钱就不要省了,而且U盘现在并不贵,出于兼容性考虑,建议选用USB2.0的U盘,U盘的容量尽量不要太小,但是也不用太大,像我这里,系统只用了231MB,因为Unraid的系统实际是存储在硬盘上的,U盘里面存储的只是配置文件。
U盘准备好了,我们要做启动盘了:
正版:
花了50刀,我们就可以享受正版了,相比开心版(盗版)的好处是系统可以升级,开心版的系统是不能升级的,而且开心版不能使用最新的版本(要等待破解)。
U盘格式化为FAT32格式,打开官方写盘工具

选择①系统版本(Stable是目前的稳定版本,Next是下一版本,想尝鲜的可以选择),②要写入的U盘,③点击Write,等进度条完成,我们就大功告成啦!
使用开心版:
不想花50刀买系统,我们可以使用开心版,下载好开心版我们会得到这样一个文件夹:

把U盘格式话为FAT32,改名为UNRAID,把文件夹里面的所有东西复制过去,然后打开U盘,管理员权限运行UnraidTool.exe

先选择U盘盘符,然后看一下Flash GUID是否显示(如果是一串0说明这个U盘就不能用了)然后设置U盘启动,这里会跳出一个命令行,询问是否启用UEFI启动,针对像我这样的老机器,建议关闭,针对新机器,可以开启,出于兼容性考虑,建议大部分机器关闭UEFI启动,使用传统方式启动,还会询问是否进行写入U盘的操作,输入Y确认就好。
然后点击注册,检查U盘的config目录下有没有生成BTRS.key这个文件,生成了,我们的操作也完成了,汉化插件是在后面进行的。(这里提一句:目前官方不支持中文,汉化是第三方做的,我个人体验之后认为如果比较熟悉计算机这一块英文的话,就不要安装汉化插件了,汉化的质量还不是很好,可能看了英文能看懂,可能反而看不懂了)
安全弹出U盘,把它插在我们的目标机器上,设置U盘启动,我们就可以感受Unraid啦~
建议,主板上内置USB接口的,可以直接插在主板里面,像我这样:

1.3认识DashBoard

接下来,我们会按照顺序对Unraid进行认识和配置
默认管理网址是http://tower/
或者服务器的ip(可以在路由器里面查到)
先看第一个:DashBoard
说明:我这里改了主题,和你默认的看起来不太一样,你也可以在Settings-Display更改主题
界面展示:

在这里,我们可以对服务器有一个整体的认识,我们来慢慢介绍:

这里显示了服务器的名称:LuckyServer,描述:All In One Server,型号:Dual X58 Server,注册情况:Unraid OS Pro,运行时间:4h38m,和服务器的外观。
服务器的名称、描述、型号外观可以在右上角的设置里面更改,旁边分别是运行/停止阵列,重启和关机。

这里是系统识别出来的主板型号等信息。

这里是CPU的使用情况。

这里是内存的安装和使用情况,上面显示安装了40G DDR3 ECC内存,可用39.3GiB,最大支持384GiB,现在使用了39%等等信息

这里显示网口情况,你可以选择看看网卡的连通/速率情况,总发送/接收数据包,每个网口的实时通信情况,这里显示的是物理接口的情况,我使用的是虚拟桥接,物理接口没有插线,所以这里显示interface down,如果插上网线,就能看到接口的情况了。

如果安装了VPN插件,就可以在这里看到VPN的情况,激活的隧道连接和没有激活的。

这里显示的是Docker的情况,配置了Docker之后,我们就可以在这里看到所有容器的情况了。还可以在这里直接对容器进行操作,查看日志等等。

这里显示的是虚拟机的情况,类似Docker,我们也可以在这里看到所有虚拟机的情况。可以在这里直接对虚拟机进行操作,或者远程桌面。

这里显示了目前配置的文件夹,包括名称,描述,安全性,和访问用户数量。

这里显示的是用户。包括名字、描述和他们的读写情况。

这里显示硬盘的情况

这里显示的是Parity(数据效验盘)的情况,上次检查时间,下次检查时间。

这里显示的是Array(磁盘阵列)的情况,包括设备,状态,温度,设备健康状态,使用量。

这里显示的是Cache(缓存)的情况,包括设备,状态,温度,设备健康状态,使用量。
DashBoard就介绍到这里,DashBoard的界面上面的数据是实时更新的,你可以拖动上面各个模块来更改它们的排列顺序。

1.4配置Main(Array、Parity、Cache)

接下来要介绍的是Main
正如页面所说,这是Unraid系统的核心,大部分功能都依赖于这里
我们先来大概看看页面长什么样子:


下面我们来详细介绍:
Main页面主要是管理磁盘阵列,也就是机器上所有的硬盘,Unraid系统,Docker,虚拟机数据都在硬盘上,所以只有阵列启动了,才能运行Docker和虚拟机。
Unraid是通过软件方法实现类似Raid的功能的,原理如下:
Unraid的软件阵列由Parity(效验盘)、Disk(数据盘)组成Array(磁盘阵列),由Cache(缓存)提供加速。在Unraid里面,Disk是必须有的,而Parity和Cache是可选的。
Disk存储了绝大多数的数据,通常由机械硬盘组成,提供了足够的磁盘空间,但是读写性能不足。
Cache通常由固态硬盘组成,虽然空间比较小,但是性能非常好,类似一般电脑的内存缓存机制,Unraid会把经常需要使用的数据放在这里。
Parity通过奇偶校验驱动器来管理和保护硬盘里面的数据,这里介绍下Parity的原理:
一个大小等于或大于最大数据磁盘的Parity盘,计算奇偶校验磁盘上每个位的值,如果一列的总和是偶数,则奇偶校验位应为0。如果一列的总和是奇数,则奇偶校验位应为1。如图:

当一块硬盘故障时,就可以根据其它盘的数据和Parity盘的数据判断故障盘里面的数据,如图:

第一列的运算结果是0,所以可以推算出丢失的数据是0(0+0+?=0 ->> ?=0 )
第二列的运算结果是1,所以可以推算出丢失的数据是0(0+1+?=1 ->> ?=0 )
法则:0+0=0
0+1=1
1+1=0
我们可以推算出丢失的数据是0001010
这样我们就找回了丢失的数据了。

知道了Parity、Disk、Cache是什么和它的作用,我们就可以开始正式配置啦~
我们先来说Parity:

Parity可以保护数据,可以不配置,但是为了数据安全,我们最好配置至少一个,Unraid最多支持2块Parity盘,在安装一个Parity盘的情况下,可以在Array里面一个硬盘故障的情况下恢复里面的数据,但是在重建数据中又有硬盘损坏,数据就会丢失。在安装两个Parity盘的情况下,可以在Array里面一个硬盘故障的情况下恢复里面的数据,而且在重建数据中又有一块硬盘损坏,数据也不会丢失,如果Array里面两个硬盘故障的情况下,在重建数据中又有一块硬盘损坏,数据就会丢失。也就是说,一块Parity盘可以保证Array内一块硬盘故障的情况下数据不丢失,两块Parity盘可以保证Array内两块硬盘故障的情况下数据不丢失。
配置的Parity盘需要大小等于或大于Array内最大数据磁盘。

我们再来说Disk
Disk比较简单,把数据盘都扔这里就对了,配置完成之后,一般来说,大部分的硬盘都会在这里。这里提一句,如果是像我一样从Windows迁移到Unraid的情况,需要注意原先硬盘里面的数据会被格式化,Unraid不原生支持NTFS,硬盘会被格式化为xfs格式。

我们接着谈Cache
我们之前提过,Cache是由固态硬盘组成的,我们会把系统,Docker,虚拟机都放在这里,所以我们要根据自己的情况准备足够大小的SSD,而且最好选用4K性能比较好的硬盘,使用效果会好很多。需要注意:1.Cache默认会被格式化为btrfs格式;2.Cache盘不受Parity盘保护,所以如果只安装了一块Cache盘,如果这块Cache盘坏了,Cache里面的数据就没有了。如果安装两块或者两块以上的Cache盘,我们就可以保证Cache里面的数据安全。

下面我们来谈Array Operation

配置完点击Start,就能看到类似这样的界面

表示Array正常运行,这种情况下我们就可以跑Docker和虚拟机。

用来停止Array,维护的时候使用

表示现在Parity正常运行,第一次设置或者更换硬盘后需要等待奇偶数据计算(Parity盘)(Parity-Sync)或者数据重建(Disk盘)(Data-Rebuild)

这里是磁盘检查的按钮,检查磁盘是否存在error,右边的勾打上之后,我们就可以在Parity修正检测到的错误。Schedule可以设置Check的周期,实现自动运行。

History查看以前Check的情况,右边还显示了上次Check的情况和下次自动执行Check的时间。

这里可以挂载和卸载所有磁盘,一般不需要使用。

这里可以清除所有Main页面的统计数据,一般不需要使用。

Mover是Unraid的缓存器,点击“Move now”可以缓存器根据设置的策略,把Array的数据迁移到Cache上加速,或者把Cache上的非活跃数据迁移到Array上来解少Cache的空间占用。与Check类似,也可以在右边的Schedule里面设置自动运行。

这个和DashBoard里面的关机/重启按钮功能一样。

接下来,我们说说Main里面的Flash。
Flash就是我们在1.2里面制作的U盘,如图,它被称为Boot Device(启动设备),我们点击Flash进去看看

里面的页面我们需要关注的信息如下:

这里可以通过Flash Backup备份U盘的数据,在U盘损坏的时候恢复U盘数据,之前我们提过,Unraid的启动U盘里面只有配置数据,系统是运行在硬盘里面的,所以在Unraid因为U盘损坏无法启动时,只需要恢复U盘里面的配置文件即可,我们来说说步骤:
在Unraid配置完成之后,点击Flash Backup,等待系统备份完成之后,浏览器会弹出备份文件的下载窗口,把它保存下来即可

需要恢复的时候,使用Unraid官方写盘工具

只不过我们这次用的时候,在①里面选择“Local Zip”,其它步骤和写盘一样,在把U盘插会目标机器即可。
如果使用的是开心版,需要注意,如果U盘没有更换,不需要重新使用UnraidTool注册,如果更换了U盘,需要在写盘完成之后,在U盘的/config目录删除BTRS.key文件,然后使用UnraidTool重新注册,因为不同U盘的GUID不一样。

这里显示的是启动选项,绿色的是默认的,可以在右边选择默认的启动项。

这里显示的是当前启动模式:Legacy
和是否允许UEFI启动,可以参照1.2的介绍,一般不要更改。

1.5配置Shares

按照顺序,我们接下来说Shares
Shares的界面长这样:

默认包括4个文件夹:(MainStroge是我添加的)
appdata:存储Docker数据
domain:存储虚拟机数据
isos:存储虚拟机系统安装ISO
system:存储Unraid系统
如果文件夹数据受到保护(在Main设置了正确Parity或者多Cache)会显示绿色的圆点,否则显示黄色的小三角。
在这里,我们可以看到共享的目录名称,描述,SMB/NFS/AFP协议的共享策略,缓存策略,大小和可用空间。
可以通过下面的计算各个共享目录的数据大小,也可以通过Size下的Compute,计算某个目录的空间占用,类似Windows的文件夹-属性。
可以通过添加目录
我们来看看具体的设置,点击Name下的某个文件夹:

先来看Share Settings
这里是设置目录的基础信息的
我们可以设置目录名称,描述,数据存放策略,数据存放包括/不包括的硬盘,缓存策略,磁盘配额等
数据存放策略(Allocation method):包括下面几种

①High-water
High-water选最大数据盘的大小除以2计算“高水位线”,然后选择编号最低的磁盘,其可用空间仍高于当前最高水位线。然后用这个符合条件的磁盘存储数据。如果没有磁盘在当前高水位线以上有可用空间,请将高水位线除以2,然后再次选择磁盘。
可能不太好理解,我们来看个例子:
假设我们现在安装的硬盘如图所示,安装了5块硬盘

选择High-water策略,那么实现Unraid系统计算“高水位线”
里面最大的硬盘是Disk 1,大小是4T
所以高水位线=4T/2=2T
假如我们不断向Array拷入数据,那么Disk1会放2T数据,Disk2和3有3T空间,大于高水位线2T,也会放2T数据,然后到Disk4的时候,因为Disk4只有2T空间,等于高水位线,所以高水位线会重新计算,原先的高水位线2T/2=1T,现在按照编号从低到高符合情况的依次是Disk1、4、5三块盘,那么数据会先在Disk1上写入1T,然后在Disk4、5上个写1T,然后发现又没有符合高水位线的磁盘,再次重新计算高水位线1T/2=500G,以此类推。
High water的目标是向每个磁盘写入尽可能多的数据(以尽量减少磁盘需要启动的频率),同时,尽量在每个磁盘上保持相同数量的可用空间(以便在整个阵列中均匀分布数据)。

②Fill-up
填充选择编号最低的磁盘,该磁盘的可用空间仍高于当前的最小可用空间设置。
也就是说,只要可用空间仍高于磁盘配额,就按照编号从低到高的顺序存放数据。

③Most-free
把数据放在当前可用空间最大的硬盘上。

拆分级别(Split level:):
用来将目录扩展到多个磁盘上。
Automatically split any directory as required:当需要在共享中创建一个新文件或子目录时,Unraid OS首先根据配置的分配方法选择要在哪个磁盘上创建它。如果包含新文件或子目录的父目录在此磁盘上不存在,则Unraid OS将首先创建所有必需的父目录,然后创建新文件或子目录。
Automatically split only the top level directory as required:在共享的第一级子目录中创建新文件或子目录时,只根据需要自动拆分顶层目录,如果写入的磁盘上不存在第一级子目录,则将首先创建子目录。如果在共享的第二级或更低级别的子目录中创建新文件或子目录,则新文件或子目录将与新文件或子目录的父目录在同一磁盘上创建。
Automatically split only the top “N” level directories as required:类似于上一个:当创建新文件或子目录时,如果父目录位于“N”级且所选磁盘上不存在,Unraid OS将首先创建所有必需的父目录。如果新文件或子目录的父目录超出“N”级,则新文件或子目录将在父目录所在的同一磁盘上创建。
Manual: 当需要在共享中创建新文件或子目录时,不要自动拆分目录,Unraid OS将只考虑父目录已经存在的磁盘。

包括/不包括的硬盘:可以控制这个文件夹的数据放在哪些硬盘,不放在哪些硬盘。
假如有个别硬盘快坏了,我们就可以让重要数据不在这个(些)硬盘存放。

缓存策略(Use cache (for new files/directories):
这个目录下的文件是否使用Cache(对新的文件/目录有效,虽然是这么说的,但是实际测试的时候发现对以前的一些文件也有效,无效指的是正在使用的文件,比如虚拟硬盘文件,系统文件等,它们要在停机时操作,比如虚拟机关闭的时候移动虚拟硬盘文件)
在上一节提到的Mover会根据这里的设置把文件在Array和Cache上移动
有以下选项:
No: 禁止将新文件和子目录写入缓存磁盘/池。Mover将不执行任何操作,因此缓存中此共享的所有现有文件都将保留在那里。
简单来说,就是这个目录不使用Cache。
Yes: 所有新文件和子目录都应写入缓存磁盘/池,前提是缓存磁盘/池上有足够的可用空间。如果缓存磁盘/池上的空间不足,则会在阵列上创建新的文件和目录。调用Mover时,文件和子目录将从缓存磁盘/池传输到阵列。
简单来说,就是这个目录全部使用Cache加速,如果Cache用完了,就只好把数据往Array上面扔了。另外,Mover会把Cache上面不活跃的数据往Array上面搬。
Only: 所有新文件和子目录必须写入缓存磁盘/池。如果缓存磁盘/池上的可用空间不足,则创建操作将失败,并显示“空间不足”状态。Mover将不执行任何操作,因此阵列上此共享的所有现有文件都保留在那里。
简单来说,和Yes类似,就是这个目录全部使用Cache加速,但是如果Cache用完了,就只好罢工了。Mover不会对目录进行任何操作。
Prefer: 所有新文件和子目录都应该写入缓存磁盘/池,前提是缓存磁盘/池上有足够的可用空间。如果缓存磁盘/池上的空间不足,则会在阵列上创建新的文件和目录。调用Mover时,文件和子目录将从阵列传输到缓存磁盘/池。
简单来说,和Yes类似,但是Mover会把文件从Array挪到Cache上,和Yes的方向相反。

磁盘配额(Minimum free space):
给磁盘留多少剩余空间,类似Windows的磁盘配额。

Security Settings:
管理不同用户的访问权限

有两个选项:
Export:控制这个目录是否隐藏
Security:管理权限,有以下选项
Public:所有人都可以读/写目录。
Secure:所有人都可以读目录,指定用户可以写目录
Private:所有人都不能访问目录,读和写的权限必须单独指定给某个用户。

1.6配置Users

在一部分主要是为了上一节Security Settings准备的

root是系统自带用户,拥有最高权限,我们管理服务器通过这个用户,但是访问Shares的目录最好不要使用这个用户,因为它的权限太高了,不安全。我们可以通过Add User添加用户,然后在上面的Security Settings管理它们的权限

1.7配置Settings

这里不需要做太多的设置,做软路由会说一下这边,我们先展示一下页面,然后说一下这里需要注意的一些东西:

Date and Time里面可以设置NTP服务器,因为在Linux系统里面系统时间对很多命令执行有影响,建议设置一个,常用的NTP服务器地址网上很好找,当然,也可以像我一样自己搭建一个。


Disk Settings里面记得把auto start打开,这样启动之后Array就会自动运行
在Docker和VM Manger里面可以控制Docker和VM的启动和关闭,如果需要调整网络设置的话,需要先把它们关闭。
Display可以调整主题,和DashBoard的显示方式
Network Settings留在软路由那里讲

1.8配置plugins

如果需要安装汉化插件,在这里操作

安装应用商店APPs也是
汉化插件地址(只适用于6.8.2):
https://raw.githubusercontent.com/KleinerSource/unRAID-chs-project/master/release/urchs.682.plg
应用商店APPs地址:https://raw.githubusercontent.com/Squidly271/community.applications/master/plugins/community.applications.plg
可能需要翻墙,不能安装可以先尝试,修改hosts
添加以下记录(重启之后需要重新添加,如果1.11节中无法连接应用商店也需要这么操作)
199.232.4.133 raw.githubusercontent.com
我推荐添加的插件会在1.11节说

1.9配置Docker

Docker可以通过应用商店Apps安装Unraid官方提供的或者安装第三方的
在下面这里添加源(我添加了163和清华的源)

因为Unraid官方的Docker,也就是在Apps里面的源已经预配置了,安装非常简单,我们在1.11节说,这里说怎么安装第三方的Docker
①怎么找到合适的Docker
在DockerHub网站上注册一个账号,DockerHub是Docker官方提供的网站,基本上所有的Docker都在这里。登录后,搜索自己需要的Docker
②进入具体Docker的页面,找到docker的名称,类似这样

如果比较熟悉命令行,你可以使用docker pull的命令,你也可以利用GUI来完成配置,我们这里演示GUI的方法(以微力同步verysync为例):

在dockerhub上搜索verysync

进入一个大神的docker项目里面
把要用的端口,目录记下来,然后我们需要会到Unraid的Docker页面

添加一个容器

像这样,配置
需要根据程序的具体情况,把刚刚记下来的东西粘贴到Repository:里面,命好名,设置网络类型,是否需要在特权模式运行(一般不需要,但是这个docker不给的话运行效率会下降)
然后设置把容器的8886端口映射到宿主机的8886端口上面,然后给它硬盘的存取权限,点击Apply,大功告成!
推荐一些第三方的Docker
Verysync(微力同步):跨平台的数据同步软件,支持Windows/Android/iOS/NAS等多种平台,而且有现成的Docker可以用,配置简单,效率高,安全性好。

Netdata,可以直观的查看设备的多种情况,了解服务器运行状态

1.10配置VMs(配置软路由)

这里是这篇文章我最想写的地方,这一节我分两个部分:虚拟机设置和软路由配置,重点会谈软路由的配置。

1.10.1一般虚拟机配置

点击Add VM

选择需要添加的虚拟机系统,我们以win8.1为例,win8大法好,大家和我一起说:
一入win8深似海,从此鼠标看不见,扁平UI真清爽,指尖滑动出奇迹!
和我一起成为win8爱好者吧~

和VMware家的虚拟机设置类似,重点说这么几个
Machine:巨硬平台使用i440fx,linux使用Q35,尽量使用新的。
BIOS:OVMF是UEFI,SeaBIOS是Legacy
OS Install ISO:系统安装ISO
VirtIO Drivers ISO:Windows是一定需要的,Linux系统自带,不需要,这个是虚拟机驱动,可以在
https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html下载
包括虚拟网卡、虚拟硬盘等等的驱动,没有这些,Windows是没法跑的
设置好硬盘大小,网卡一般使用虚拟网卡vrbr0就好(我这里不使用,1.10.2会说原因)
显卡可以直通过去,在Graphics Card选择VNC之外的就行,但是如果需要远程管理,还是需要保留VNC的
创建好之后,去运行就可以啦~

1.10.2软路由配置

1.10.2-1我的需求

为什么需要软路由呢?因为我需要远程接入家里的局域网,访问家里的服务器,而且路由器上跑的还有一些服务,硬路由性能不够,而且不一定支持这些功能,所以我家里一直是软路由+AP的方案。

1.10.2-2网络拓扑及实际接线

(做的不好请见谅)

大概是这样的:

Unraid服务器和里面的虚拟机通过内部桥接的方法连接到软路由
所以实际接线大概这样:

网线这里,只需要接两根即可:WAN和到无线AP的LAN两根

1.10.2-3软路由系统选择

软路由一般有这么几个系统选择:
ROS
iKuai
Openwrt/LEDE
我选择的是KoolShare的LEDE(Openwrt)x64系统,选择这个是因为里面的酷软中心非常好用,集成了很多常用插件,而且我对openwrt比较熟悉

1.10.2-4软路由虚拟机安装

在安装的时候,注意需要转盘才可以用,软件可以用StarWind V2V Image Converter,把下载到的.img转成.img,然后上传到Unraid的isos文件夹,直通网卡可以使用VFIO-PCI CFG插件或者在Main->Flash启动菜单屏蔽网卡,支持SR-IOV的网卡可以拆分网口,直通2个口给软路由就足够了,我这里选择直通这个网卡,虚拟机配置如图(直通网卡,现在使用VFIO-PCI CFG插件非常简单,建议用这个方法,因为全图形化操作,所以不写教程了,安装了插件进页面看一眼就自然会了):


简单描述一下:给四核八线程,8G内存,挂载转盘之后的系统img和16G的虚拟硬盘用来跑Docker,直通4口千兆螃蟹网卡,把物理机的两个网口br0,br1(在Unraid的Settings-Network Settings里面开启)分配给它(后面做桥接)。
这里来说一下Unraid的Network Settings
我用的是6.8.2开心版,这个问题不知道是不是我这里的个例:
先说一下我的设置:
如图

简单来说:IPv4+IPv6,地址全自动分配
在我最开始设置的时候,IPv4获取不到DNS,DNS一栏是空的,没有信息,ping一下,发现地址解析不出来,但是如果直接ping IP地址就是通的(可以看到,IPv4的DNS现在也是空的,但是现在其实已经获取到了,但是没有显示)
我尝试了一下手动指定,发现设置成IPv4静态地址时,如果IP地址手动指定,那么DNS只能动态获取(选项栏是灰色无法选择),如果手动指定DNS,Apply之后发现居然没有保存下来,刷新一下,有时候两个的选项栏就都可以选择了,也都可以手动指定了,但是在我兴奋地点下了Apply按钮却发现,页面就一直显示应用设置中不动了,焦急的等待了10多分钟还是没有反映之后,我按了下刷新,结果惊奇地发现和之前的情况一样,虽然都手动指定了,但是DNS和IP只保存了一个,还是不能都保存下来。
后来我又试了改了几次设置,终于在某一次乱改之后,发现设置成自动又可以获取到DNS了(在我改设置之前,自动获取是不能获取到DNS的),虽然DNS一栏是空的,但是ping了一下:

神不神奇,居然解析出IP地址了。
所以,我把ETH0设置成找到获取IP地址,ETH1设置成手动设置IP,这样就可以通过固定的局域网IP地址访问服务器上的文件,而ETH0桥接给虚拟机通过网络服务。
Q:为什么对设置DNS这么执着,又不用Unraid上网,不设置也可以呀
A:不设置DNS,一是会导致需要解析网址的Docker没法跑,所以一定要解决这个问题,二是NTP如果设置的是网址的话,也没法解析,导致服务器时间不同步。如果不用跑Docker,我个人认为,遇到这个问题,不设置DNS也无伤大雅。

1.10.2-5软路由网络配置
这里先讲一个小插曲:我在最开始设置的时候,把vrbr0也桥接给软路由了,结果所有设备都不接受软路由的DHCP了,而是全部在192.168.123.x这个网段。虽然也能访问软路由和服务器的管理网址,但是总有一点不太舒服的因素在里面,所以还是要解决这个问题的。
分析下这个问题的原因:
首先需要了解vrbr0网卡是个啥?
这个网卡并不是由某个物理网卡桥接的虚拟网卡,而是有Unraid系统在内部生成的一个虚拟网卡,根据我个人从实践中得到的理解,原理大概是这样的:
这个虚拟网卡vrbr0默认是直接分配给虚拟机的,是用来给虚拟机上网用的,而不是给软路由用的,这个网卡其实类似一个网关(但是有默认设置而且无法管理),它默认设置网关地址192.168.123.1,DNS地址192.168.123.1,然后在桥接到有Internet连接的(多个)物理网卡上,其实vrbr0应该是一个透明网桥(或者说它做了一个无感NAT)。
了解了vrbr0的原理,我们来说说导致问题的原因:
Unraid默认把它给虚拟机用,这个问题不大,可是用在软路由上就有问题了,假设服务器通过软路由上网(实际中搭建软路由一般都这么用),如果把vrbr0给WAN,而vrbr0又没有通向外网的连接,那么就没有网(LAN的数据-vrbr0-找不到合适的路由转发-null丢弃),如果把vrbr0分配给LAN,这样是可以上网了,但是由于vrbr0自带DHCP和DNS服务,那么局域网中就存在了两个DHCP和两个DNS服务器,软路由的DNS和DHCP就不能分配下去,于是导致了这个问题。
在像1.102-4后面说的这样,设置和服务器物理网卡桥接之后,我们把生成的两个虚拟网卡br0和br1分配给软路由,设置好软路由虚拟机,启动。
对于我使用的Openwrt,我们通过命令行的方式进行第一次设置,通过vi命令编辑网络设置文件,网络设置文件是/etc/config/network,我们把属于LAN口的网卡分配上去,像这样

桥接过去的br0和br1会被识别为ETH(以太网)设备,和物理网卡一个类型,根据家里是单线接入还是多线接入的实际情况配置LAN口和WAN口的数量,我家是单线接入,所以我只给了WAN一个网口:

怎么判断你要分配的网口是ETH几呢?找一根网线一头连在上电的设备里(比如交换机),一头插在想知道的网口上,看Openwrt终端上的输出,会有类似这样的:
(我为了截图方便,没有实际去插网线,你看到的和下面不太一样,但是大概是ethx(x是一个数字,指网口编号)entered forwarding state)

比如这样,在其它网口没有动的情况下,我们就知道,刚刚插进去的是ETH0,我们就可以这样把网口和编号联系起来,在把物理网口设置完成之后,我们就知道那个是桥接过去的网卡了,进入软路由WEB设置页面,网络-LAN-编辑

列出了所有网卡,找到没有打上勾的eth网卡,加入到LAN里面,这样我们就完成了虚拟网卡br0和br1的桥接。
WAN口根据情况设置PPPOE或者DHCP等,我们的软路由网络就设置完成啦~
软路由主要的东西就讲完了,至于软路由里面其它的东西,每个软路由系统都有它的特色,晚上也有详细的教程和对比说明,这里就不再叙述。

1.11应用商店Apps
这里来介绍我们在1.8和1.9没有说明的一些我在用的Unraid官方插件和Docker。
Plugins:

Docker Folder:
是一个可以把Docker放在文件夹里面的插件,Docker比较多的的时候,可以把Docker分门别类地放在不同目录里面整理一下。
Dynamix WireGuard:
这个,你懂吧?
File Activity:
可以记录目录里面文件的使用记录。
Recycle Bin:
SMB没有文件回收站机制,为了防止文件误删,我们可以整这么一个回收站,就像Windows本地文件的回收站,可以定时自动清空回收站里面删除的文件。
Unassigned Devices:
可以把NTFS直通给虚拟机使用,Windows到Linux数据迁移必备,也可以把NTFS直接挂共享。
User Scripts:
可以设置一些脚本开机自动运行,比如说实现把1.8节提到改hosts自动化。
VFIO-PCI CFG:
直通PCI设备神器,软路由必备。
Docker:



qb和transmission是老牌pt下载工具了,很多人应该都知道。
zt是拿来做组网的。
Android-8.0其实是一个容器里的虚拟机,可以在网页上玩玩安卓。
go-ipfs可以用来尝鲜下ipfs,可以去试试。

1.12关于Tools
Tools里面我们主要能用到的是这个

在直通设备的时候,我们可以在这里查到设备硬件地址,不过由于VFIO-PCI CFG这个神奇插件的出现,我们现在不用到这里去查设备硬件地址然后去手动屏蔽了,用插件就好。

找不到某个东西在位置时,可以打开Page Map,然后用浏览器的Ctrl+F查找

1.13其它
这次迁移到此就彻底完成了,这是我第一次把自己的服务器从Windows迁移到Linux,最开始的时候,我是很不愿意这么做的,因为Windows设置起来要比Linux容易很多,但是这回换的X58服务器跑Windows会有各种各样的迷惑问题,所以我不得不迁移到Linux上,迁移一共用了四个星期整的时间,其实最麻烦的,还是数据,大概里面有三个星期都是在折腾数据。虽然之前没用过Unraid,结果实际用的时候发现这个系统真的非常简单,写下这篇文章,一方面是记录下我折腾的历程供以后参考,另一方面是希望想要尝试虚拟化或者有和我类似需求的朋友们尝试一下,通过这篇文章,给你们铺铺路。
By luckykeer 2020年7月18日23点04分