700元从闲鱼购入了3代i5 3317U 8G内存 128G固态的工控机,物理系统装上ESXI,再在ESXI上虚拟化出一个OpenWRT软路由,一个DMS黑群辉NAS,一个WIN10用来挂迅雷当下载机往NAS中下载文件。
DMS群辉兼容性
初始准备使用DS918镜像,毕竟只有这一款支持核显硬解码,可以把i5的核显用起来。但是DS918的兼容性非常差,尝试了之后发现怎么都无法在OpenWRT中找到他,无法DHCP给他。网上找了一圈,说是DS918只支持4代以及之后的CPU,而我这个正好是3代,于是只好退而求其次,使用DS3716的镜像,成功把黑群辉跑起来。
不得不说群辉的软件做的不错,不愧被称作买软件送硬件。
直通
要玩直通,首先得看CPU支不支持vt-d,只有支持了vt-d才能做到IO直通,也就是PassThrough。可以在这个表格中查询:https://xiwaer.com/wp-content/uploads/2019/12/intel-cpu-vt-d.xls
sata直通
主板上有两个sata口,于是打算抠掉一个com口,将两个sata引出来,外接两个支持7*24的监控紫盘。本来打算将硬盘直通给NAS,但是由于ESXI系统是安装在msata口的固态上,而这个msata口和那两个sata归属于同一个sata控制器,所以没办法将主板上那两个sata单独直通给NAS。
有一个办法是可以将ESXI安装在U盘上,这样就可以将整个sata控制器直通给NAS,但是我不喜欢常年外挂一个U盘的感觉,而且U盘的可靠性也不行,作为常开的家庭主机,稳定性还是很重要的,还是比较相信内置的msata固态。
但是不直通的话,降速又非常严重,所以权衡一下,准备使用RDM直通,与PassThrough的直通相比,缺点是无法休眠,但是优点是设置方便,兼容性强,而且方便迁移。毕竟群辉上装几个套件后也不用考虑硬盘休眠了。所以此时购买支持7*24工况的硬盘就显得尤为重要。
如果将来哪一天想不开又想搞sata的PassThrough直通,可能会考虑两种方案:
往mini-PCIe上插一个转NGFF的转接卡,再插上NVME的SSD,用于装ESXI系统,再将整个sata控制器直通给NAS
往mini-PCIe上插一个ESXI兼容的sata阵列卡或者普通转接卡,再往上插sata硬盘,可以将卡上的硬盘直通给NAS
后续1:感觉休眠还是挺重要的,于是我真的买了块ASM1061的mini PCI-e转两口sata的转接卡,插在原来的无线网卡的位置,sata线从拆掉的一个com口引出来。
发现要直通转接的sata硬盘,需要注意以下几点:
1. 启动群辉时,选择最后一项。一般是通过修改引导img中的grub实现,其实可以设置下一次启动强制打开bios,然后从bios退出后,就可以有几秒钟的时间操作方向键,以后每次启动就自动都是最后一项了。 http://www.nasyun.com/thread-71520-1-1.html http://www.nasyun.com/thread-67301-1-1.html
2. DSM引导后要在web里安装pat文件,至少需要2个sata控制器(http://blog.sinovale.com/tag/esxi),可以两个都是虚拟控制器,也可以一个虚拟一个直通。如果只有一个,web界面会提示找不到硬盘,应该是一个sata控制器下的硬盘作为引导,另一个sata控制器下的硬盘用来安装pat系统文件。尝试过只创建一个sata控制器,两个硬盘都挂在同一个sata控制器下也不行。
3. 添加2个虚拟sata控制器后,一个控制器添加的硬盘放引导,一个控制器添加数据盘装pat群辉系统,启动安装完成后,再在转接卡上插入硬盘,将转接卡直通过群辉,准备让转接的sata硬盘作为彻底的NAS盘,发现群辉并不认新硬盘。有可能是因为硬盘需要删除分区(https://tieba.baidu.com/p/6051704189?red_tag=0145464987),待后续测试。也有可能是引导盘和系统盘的sata控制器占用了2个虚拟sata控制器后,导致群辉无法添加转接卡的直通sata控制器(https://www.cnblogs.com/nuti/p/12949031.html)。于是尝试将第二个sata控制器(安装系统的硬盘所在的sata控制器)改为SCSI控制器,将pat系统文件安装在SCSI控制器下的硬盘里,来实现节省一个sata控制器的目的(http://www.gebi1.com/thread-293563-1-1.html)。pat安装完之后,再将转接卡直通给群辉,发现群辉真的认出了转接的硬盘,但是S.M.A.R.T.读取失败,网上也有人出现一样的无法读取S.M.A.R.T.的问题。
4. 如果只添加一个虚拟sata控制器并在这个控制器上添加一个引导盘,然后直通的转接卡作为另一个sata控制器,可以正常引导,并且安装pat前不会提示找不到硬盘,还会提示会将硬盘上的数据清空,看来是能正常识别到,这样操作也是可行的。但是这种方法会将pat群辉系统安装到转接出来的数据盘上,不是很完美
5. 目前使用3的方式,成功直通了硬盘,但是槽位是错乱的,需要修改SataPortMap(https://www.opsit.cn/5931.html、https://www.opsit.cn/5859.html)。同时16G的系统数据盘也出现了,要隐藏的话同样需要修改SataPortMap。
6. 如果硬盘无法休眠,可以尝试ssh登录群辉后,编辑/etc/init/syslog-ng.conf,添加如下内容(https://zhuanlan.zhihu.com/p/147199325?from_voters_page=true、https://bbs.nas66.com/forum.php?mod=viewthread&tid=5451&extra=page%3D3&page=1),然后勾选硬盘休眠,然后重启
#scemd bind
touch /tmp/scemd.log.new || true
chmod 660 /tmp/scemd.log.new || true
chown system:log /tmp/scemd.log.new || true
mount -o bind /tmp/scemd.log.new /var/log/scemd.log || true
#
之后发现硬盘休眠成功,出现了“Internal disks woke up from hibernation.”的日志。
下面是放了一天没有去登录,实际的休眠唤醒情况
7. 不过显示有个eSATA外接设备,即使弹出了,下次重启还会再次出现。而且也会出现在File Station中,打开发现是引导盘的两个分区。不过影响不大。
后续2:感觉不能读取S.M.A.R.T.并且槽位错乱还是有点难受,于是又开始折腾。这次准备尝试只创建一个sata控制器,并将引导盘和数据盘都挂在这个控制器下,另一个控制器使用直通(https://www.opsit.cn/5931.html)。
1. 使用OSFMount挂载引导镜像,修改 DiskIdxMap=0C00 SataPortMap=21。先打开OSFMount软件,点击Mount New–>弹出菜单Image file 浏览到黑群晖的引导文件(synoboot)然后选中Partition0-15.0MB(dos3.31+FAT16)这个选项
去掉勾选的“Read-only driver” Drive letter可以选择挂在为什么盘符,一般会根据你电脑上的硬盘自动选择盘符,您也可以手动指定一个盘符,前提是这个盘符不能被占用。
打开grub目录,找grub.cfg这个配置文件。我们就是要修改这个配置文件。
黑群晖引导配置文件修改完毕后,点击OSFMount 软件界面的 Dissmount all & Exit 保存退出,弹出提示点击“是”;至此黑群晖的引导文件已经修改完毕,后续如果你要洗白或者修改黑群晖硬盘的顺序也是修改这个配置文件。
SataPortMap:意思是SATA控制器的数量。21是两位数代表两个SATA控制器,2的意思是第一个SATA控制器2挂载了2块硬盘,1的意思是第二个SATA控制器挂在了1块硬盘;
DiskIdxMap:意思是SATA驱动器的端口起始。0C00是4位数采用的是16进制,每2位数表示硬盘在SATA驱动器的几号端口开始往下排。0C00这个数值中0C对应的是SataPortMap=21中的2,00对应的是SataPortMap=21中的1;0C的10进制为12,代表硬盘的端口接在在第13个端口,00的10进制为0,代表硬盘的端口接在在第1个端口。依次类推,第一个控制器有2个硬盘,分别排序是13、14这两个端口。第二个控制器有1个硬盘,排序是1这个端口。由于前面看到存储空间管理员中最多可以识别10个硬盘,那么排在13、14这两个硬盘就在DSM系统中看不到了,从而达到隐藏的目的。
2. 尝试只创建一个SATA控制器,并将引导盘和数据盘都挂载在这个控制器下,另一个控制器使用直通。引导盘使用修改后的镜像。此时的SATA结构与DiskIdxMap和SataPortMap一致。这一次我还尝试创建虚拟机时不再使用Red Hat 7,转而使用4.x或更高版本的Linux,这样就可以使用USB3.0控制器。同时我还勾选了内存热拔插,这样可以开机状态下修改内存大小。(https://www.opsit.cn/5859.html)
3. 开机后,提示我已经将一块群辉硬盘插入了一台新的群辉,是否恢复。点了恢复,便开始10分钟倒计时。不用等倒计时结束,直接另外开一个窗口尝试登陆,发现新创建的虚拟机已经恢复到之前的状态,包括所有设置,以及添加的硬盘休眠代码都还在。可见虽然之前将系统装在SATA控制器2的16G数据盘里,但是将NAS盘插进去后,其实初始化NAS盘的时候,也会将系统写入NAS盘中,包括所有的设置项的存储。这一次的系统就是从NAS盘恢复出来的。我接着进入ESXI看那个16G的精简制备盘的实际文件大小,发现是0B。可见其实这一次的恢复,根本没有没有将NAS盘上的系统恢复到16G系统盘,而是直接从引导盘引导从NAS盘加载的系统,以后NAS盘既是NAS盘也是系统盘。
4. 发现槽位正确,引导盘和系统数据盘确实也被隐藏了起来。试了一下读取S.M.A.R.T.发现竟然正常了!原来读取S.M.A.R.T.失败跟DiskIdxMap和SataPortMap有关系!
而且硬盘休眠依然正常,下图是放了一晚上,到第二天中午登录查看期间的唤醒日志(9点的时候看硬盘也是休眠状态,所以6:41后的休眠-12:23期间硬盘都没有被唤醒过)。
5. 不过显示有两个eSATA外接设备,即使弹出了,下次重启还会再次出现(后续1中是1个)。而且也会出现在File Station中,打开发现是引导盘的两个分区。不过影响不大。
核显直通尝试
核显如果可以直通给WIN10,那么后续还可以用WIN10硬解码播放影片串流出来,虽然核显即使直通了也无法输出HDMI,这是个大遗憾,不然可以当做HTPC了,据说PVE虚拟机直通核显后可以输出HDMI。于是 尝试了核显,发现核显直通后,WIN10能识别出一个显卡,但是显示驱动有问题,用不起来。
如果将来哪一天想不开又想搞HDMI输出给电视当HTPC,可能会考虑买一张ESXI支持的AMD独显,插在PCIE上,再把它直通给WIN10。
USB直通
这个工控机上有三个USB控制器,其中第一个看起来是板载的,不支持直通(通过ssh修改配置文件可以强制直通:https://www.upud.cn/389.html),另外两个可以直通。
尝试了将#1直通,分配给群辉,方便在不重启群辉的情况下拔插U盘。由于工控机上背部有4个USB3.0,前方有四个USB2.0,故不好判断映射关系,于是拿了个U盘一个个试,插进去再在ESXI虚拟机编辑那边看能不能给虚拟机分配USB设备,如果ESXI识别出USB设备,说明当前U盘插的这个口不是直通口。结果令人遗憾的是,背部的所有USB3.0的口,都属于板载控制器,前面的四个USB2.0的口被另外两个可以直通的非板载控制器瓜分。所以只好直通了2个USB2.0的口给群辉。
又尝试了将另一个USB控制器直通给WIN10,看能不能插入U盘或者鼠标键盘后直接给WIN10用,发现直通后WIN10也能识别出USB控制器,但是插入U盘还是键盘鼠标均无反应。网上说键盘鼠标即使直通也会被ESXI屏蔽,但是不知道为什么U盘也不行。鉴于直通后还需要将内存一次性占用,而WIN10分配了4G内存,一次性占用也比较浪费,遂放弃WIN10下直通USB。
网卡直通
暂时满足需求,还没折腾,先记录一下后续折腾的路线:
vmnic0物理网卡作为LAN口,连接vSwitch0虚拟交换机,连接VM Network网络,三个虚拟机都连接着这个网络,组成局域网。同时由于在ESXI设置了这个网口(第一个网口)作为配置口,所以还挂着Management Network。
vmnic1物理网卡作为WAN口,连接vSwitch1虚拟交换机,连接VM Network1网络。
要直通的话,应该是直通vmnic1,也就是WAN口,之后往OpenWRT虚拟机添加这个网卡PCI设备,OpenWRT下再设置这个口作为WAN口。千万不能直通vmnic0,因为我的是双网口,只有这个口配置了ESXI管理权限,要是这个口直通了,ESXI就脱控了。
先找一下要直通的vmnic1口的PCI地址,再到直通页面找到对应的网卡直通就可将这个网卡配置为直通
备份
准备备份每个虚拟机。一开始尝试直接在ESXI的web管理页面导出ovf+vmdk,发现导出来的都只有xml、txt、vmdk文件,永远没办法导出ovf,网上找了一圈竟然没有找到一样的情况。
故想尝试直接从ESXI管理页面的数据存储浏览器中将整个虚拟机的文件夹的每个文件下载下来。但是发现这样通过二级路由的wifi传输速度好慢,于是想了一个歪招:通过USB3.0插入移动硬盘,分配给WIN10,在WIN10中打开ESXI管理页面,直接在虚拟的WIN10中下载WIN10在ESXI文件系统下的文件夹下的所有文件。一开始确实几百兆每秒,但是突然RDP卡住了,然后过了一会儿发现硬盘也不写数据了,再过了一会儿WIN10自动重启了。应该是因为复制文件的时候,整个WIN10的vmdk文件被锁住,但是系统又需要往里面写数据,于是系统就卡死了,相当于物理机的硬盘直接挂掉。
诡异的是复制到一般的移动硬盘里的文件夹,在WIN10下打不开删不掉,在mac下也无法删除,还好占用不大,先这么着吧。
转念一想,安装也不麻烦,固态坏掉的概率也不高,干脆不备份了,以后大不了重装。果然放弃折腾一身轻松。
内网穿透
我家没有公网ip,所以没办法DDNS,只能使用内网穿透。一开始使用花生壳每个月1G,2个端口,1M的免费套餐,在WIN10里常年挂一个花生壳内网穿透的客户端,一个指向自身的3389用于RDP,另一个指向黑群辉的IP的5000端口用于文件服务。
但是花生壳只有1M带宽,只能添加两个端口,加上每个月只有1G免费流量,用着不舒坦,于是决定在云上搭一个NPS服务端,在OpenWRT里面直接实现内网穿透。实测体验相当好,不再有端口数限制,带宽也大了好多。而且NPS支持在web上配置所有要穿透的内网地址,无需编写配置文件,体验相当好。唯一需要注意的是,在添加ESXI控制台IP的内网穿透的时候,需要穿透的本地端口是443,不能是80,因为ESXI的web页面会自动重定向到443的HTTPS。
最终实现了可以在任意外网环境下,访问内网的OpenWRT控制台、RDP到WIN10、访问NAS、访问ESXI控制台。
关于Docker
要实现功能最大化,Docker必不可少。而且虚拟机中装的OpenWRT和群辉DMS都有Docker,但是要真正用起来,还是得装个Linux虚拟机来命令行跑Docker。但是由于我已经有云服务器可以跑Docker了,这个主机以娱乐为主,故暂时还没有安装Linux。
媒体库
群辉的硬盘上放了那么多电影,不做一个媒体库怎么行。网上的方案大多数是收费的Emby和免费开源的Jellyfin。不过我不想那么折腾,直接用群辉的Video Station套件,因为这个套件也能通过DLAN将电影投屏到电视上。
投屏
但是要将电影DLAN到电视,需要电视和群辉在一个网段下,所以需要OpenWRT的LAN口接出来的无线路由器使用AP模式而不是路由模式。
一般的做法是,在路由器的设置页面中,设置路由器内网IP与OpenWRT的LAN属同个网段下,比如OpenWRT为192.168.66.1,则设置路由器局域网IP为192.168.66.129,再关闭路由器的DHCP,再将工控机的LAN接到路由器的LAN而不是WAN。这样电视通过路由器的WiFi连进来后,就由OpenWRT分配IP,跟OpenWRT属于同一个网段,在OpenWRT中可以看到通过路由器WiFi连进来的所有设备,也就是跟群辉属于同一个网段。(https://service.tp-link.com.cn/detail_article_336.html、https://jingyan.baidu.com/article/5552ef47e1aa89518ffbc994.html)
不过由于我用的路由器是京东无线宝,还要负责白嫖,发现按照上述设置之后,虽然可用,但是路由器本身无法上网,无法白嫖。后来发现路由宝的设置页面里面竟然有路由器模式菜单,于是还原了内网IP和DHCP设置后,在这个菜单中设置为AP模式,完美解决。(https://www.right.com.cn/forum/thread-4054918-1-1.html、https://www.right.com.cn/forum/thread-4054468-1-1.html)
设置好之后,Video Station中的投屏按钮就可点击,完美投屏。以后要在电视上看电影,只需要登录群辉的Video Station就可以挑选电影,直接投屏到电视。
解码DTS、eac3
如果想在浏览器直接播放电影,Video Station从2.4.6版本开始由于版权问题不再支持这两个音频格式的视频了,而网上的电影资源很多都是这两种音频格式的音轨,特别是DTS,会导致无法播放电影
网上的教程一般都是降级到2.4.5,再从社区的源安装ffmpeg来解决(https://blog.csdn.net/qq_19013047/article/details/99960101)。但是最新版的Video Station已经是2.4.9-1626版本了,如果使用旧版本不再升级,将失去新版本的特性。所以可以换一种方案:
首先同样是添加社区的源 https://packages.synocommunity.com/ 并安装ffmpeg套件。然后ssh登录并进入root用户下执行安装脚本。(https://zhuanlan.zhihu.com/p/77694568)
sudo -i
sh -c "$(wget -O- https://raw.githubusercontent.com/Wooden-Robot/documents-for-fun/master/Synology/ffmpeg_dts_eac3_patch.sh)" -p install
如果要卸载的话,执行卸载脚本
sh -c "$(wget -O- https://raw.githubusercontent.com/Wooden-Robot/documents-for-fun/master/Synology/ffmpeg_dts_eac3_patch.sh)" -p uninstall
至此可以完美的在浏览器中播放所有电影了
不过我发现拖动进度条后要转圈很久,暂时不知道怎么解决
从任务管理器中能看到,在解码DTS音频的H264时,ffmpeg耗尽了一个CPU在解码(群辉虚拟机分配了4个CPU)
但是在解码aac音频的rmvb时,ffmpeg可以充分利用多核心
看电影的姿势
1. 直接在PC上内网登录群辉,打开Video Station,网页播放。缺点是RMVB需要群辉实时转吗,默认240p,此时四核CPU已经快占满了,如果修改成更高分辨率和码率,CPU估计撑不住。而且这种方法只能用PC看,不能用电视。
2. 手机用DS File APP内网登录群辉,用MXPlayer播放。缺点是只能手机播放。
3. 手机用ES浏览器挂载群辉的SMB,再投屏到电视的DLAN。或者Mac挂载群辉的SMB后,用Sofa Player投屏到电视的DLAN。缺点是需要经过手机或者Mac中转。
4. 电视盒子中安装ES浏览器挂载群辉的SMB,用MXPlayer播放。缺点是没办法看到Video Station的海报封面,不方便挑想看的电影。经验证这个方法播放非常卡顿,拖动进度条也需要缓冲非常久,暂时不知道为什么,因为Mac通过SMB挂在后用INNA播放及拖动非常流畅。
5. 用PC连接群辉的Video Station挑选想看的电影,点击DLAN投屏到电视播放。缺点是还需要通过PC挑选,而且DLAN播放无法挑选音轨和字幕,如果是有国语配音音轨的外语片就会很麻烦。由于手头有一台Chromecast,想试一下不用DLAN而用Chromecast的效果。发现PC登录的Video Station不能投屏到Chromecast,APP登录的情况下可以显示出Chromecast的菜单(http://scl13.com/synology-ds415play-video-station/),但是经试验投屏失败,Chromecast屏幕黑一段时间又回到桌面,不知道是不是Chromecast的问题。
6. 电视盒子中安装DS File APP内网登录群辉,直接用电视遥控器挑选想看的电影,点击使用MXPlayer播放。缺点是DS File APP对电视优化不好,没有高亮当前光标所在文件,所以如果电视盒子没有外接鼠标的话,使用遥控器不方便操作。
7. 电视盒子中安装DS Video APP内网登录群辉,直接用电视遥控器挑选想看的电影,通过DLAN投屏到电视播放。缺点是DLAN无法切换音轨,如果是有国语配音音轨的外语片就会很麻烦。
8. 电视盒子中安装DS Video APP内网登录群辉,直接用电视遥控器挑选想看的电影,在影片列表页的卡片右下角点出菜单,点击Play,或者影片详情页点击红色播放按钮,就可以直接调用MXPlayer硬解播放,播放前APP内会让挑选字幕和音轨。后续:突然发现盒子里装的DS Video自动更新成了TV版的DS Video,可以在APP内直接播放不用调用MXPlayer,体验非常好,APP内播放器支持DTS音轨,同时也支持设置字幕和音轨。而且支持设置是否转码,以及是否使用第三方播放器播放。所以如果是较新的片源,可以直接使用内置播放器配合转码播放,如果是旧的RMVB片源,为了不被转码成240P,可以选择开启第三方播放器开关,使用MXPlayer播放。实测如果关闭了转码的情况下播放RMVB,即使关闭了第三方播放器播放的开关,也会强行使用外部播放器播放,因为RMVB必须经过转码。
总结:直接用8。
外设
硬盘架
一开始很简陋的将硬盘放在地上,后来淘宝上二十几块钱买了个弹簧防共振硬盘架,效果不错,还支持叠加,后面要组raid的话,再买一个叠加层就可以了。
硬盘电源
闲鱼上20元收的,还没到货,用来替换掉以前读本科时淘宝买的大4PIN转sata供电电源适配器。主要看中这个直接提供3个sata供电口,不用转换,后面组raid时也能直接用。