前言
上一篇文章提到了在K100上面安装黑群失败了,原因是群晖不支持装在M.2的nvme固态上面,在网上找了一圈,,找到了一篇这个文章:
如何创建一个纯 NVMe 固态的群晖
https://jim.plus/blog/post/jim/synology-installation-with-nvme-disks-only
于是决定顺着这个文章尝试一下
本来是想记录一下,废话有点多,还有失败的过程,实际安装的过程可以转跳至这里
制作启动盘
制作启动盘,首先要格式化,我用的是卡+读卡器,格式化用的是SDformater
网上能找到的RR只有2023.11.28告别版,是我在矿神上面找到的,地址是:https://imnks.com/7805.html,发现要付费,于是决定在网上搜索一下,找到了这个地址,不确定是不是原版,先这样用着:https://fw.wifihell.com:1111/Synology/rr/
解压之后是下面这个img
接下来是用Rufus软件烧录到U盘中,引导类型选择这个img,然后开始烧录
当进度条重新回到准备就绪的时候说明烧录结束了
启动
将网线、U盘、键鼠、电源插上K100,按下电源键开始启动
启动的时候把usb UEFI这个启动排在前面。
然后保存并退出
接下来就是启动顺序选择,不选也可以,自动进的
再等一会就进到了RR界面,记住这里的ip
在电脑上面输入这个IP+端口,就能进到RR的配置页面,并选第一个choose a model
进到页面之后,选择SA6400
然后选择第二个,choose a version
选择7.2
默认回车就行
然后build the loader
等待结束之后选择boot the loader就行了
这时候可以看到web界面有变化,提示网页变成了这样
等待重启结束之后,输入http://10.10.10.138:5000/之后会进到DSM的引导界面,并且提示没有找到disk,如下所示
根据前言提到的文章中写的内容,应该是硬盘判断出了问题,按下F12,并点击refresh,能看到/get_state.cgi这个判断,得到的结果是has_dick=false
启动之后,这是一个ramdisk系统。
通过portscan扫描,能看到只开了80和23端口,可以通过telnet连上群晖
搜索能看到,这个文件在/usr/syno/web/webman/get_state.cgi
打开文件之后,找到了这一行
if [ "xyes" != "x${SupportBuildinStorage}" ]; then buildin_storage='false' if [ ! -z "$partition" ];then has_disk='true' else has_disk='false' fi disk_count=`echo $partition | wc -w` else buildin_storage='true' has_disk='true' disk_name=$(basename ${buildin_storage_node}) disk_size=$(cat /sys/block/${disk_name}/size) if [ "0" -eq "${disk_size}" ]; then has_disk='false' elif [ "${min_buildin_storage_size}" -gt "${disk_size}" ]; then disk_size_enough='false' fi fi
通过检查变量partition是否非空。如果partition有值(即系统中存在磁盘分区),则has_disk=’true’,否则has_disk=’false’
再看最上面,
partition="$(/usr/syno/bin/synodiskport -installable_disk_list)"
也就是partition是通过执行/usr/syno/bin/synodiskport -installable_disk_list这行命令的结果,来判断是否有盘
退出来,手动执行这个命令,可以发现的确为空
打开/usr/syno/bin/synodiskport脚本,发现是个二进制文件,这里可以直接改成别的脚本
输入命令
ls /sys/block
可以看到,还是能识别到nvme盘的,通过grep筛选一下sata和nvme
ls /sys/block | grep '\(nvme*\|sata*\)' | xargs
最后脚本可以和synodiskport放在同一个目录,下面是脚本内容
SynologyNAS> cat /usr/syno/bin/checkdisk #!/bin/sh if [ "$1" == "-installable_disk_list" ]; then disks=$(ls /sys/block | grep '\(nvme*\|sata*\)' | xargs) echo " "$disks else /usr/syno/bin/synodiskport "$@" fi
如下图所示,把/usr/syno/web/webman/get_state.cgi里面的partition=”$(/usr/syno/bin/synodiskport -installable_disk_list)”改成下面的
partition="$(/usr/syno/bin/checkdisk -installable_disk_list)"
最后更改一下权限
chmod 777 /usr/syno/bin/checkdisk
刷新一下,能发现通过了第一步的检查,点击安装
默认选项即可,,点击next
然后就进到了安装页面,过了一会会提示安装错误,是get_install_progress.cgi的错误
再后面就是涉及到二进制的修改了,不太会用bpftrace和IDA,所以后面就进行不下去了。
转机
上面有提到,这是一个ramdisk系统,顾名思义,这是一个把ram作为disk的系统,所以所有修改只是临时的,修改之后如果重启,所有数据都会丢失,所有的修改都是通过rr里面的通过addon的形式进行修改,找了一下这位作者的所有文章,能发现在About-Me里面有github,点击去看,能看到一个arpl-addons的仓库,里面有这个插件,代码在下面:
https://github.com/jim3ma/arpl-addons/blob/epyc7002-sa6400/patches/all/addons/patches/db.yaml
可以看到这里面有很多修改,我这里选择的是SA6400的69057系统版本,所以涉及到的修改应该是1,2,3,6
下载并进入仓库
git clone https://github.com/jim3ma/arpl-addons cd arpl-addons
有一个compile-addons.sh脚本,如下所示,执行就能编译
编译完了就可以在当前目录看到所有插件
我把这个目录放到了博客的首页https://qubot.org/patches.addon
添加插件
重启K100,选择第二个Configure loader
开机结束之后,可以ssh进到rr的后台,用户名是root,密码是rr
打开/opt/rr/ramdisk-patch.sh,在# Reassembly ramdisk后面添加
sed -i 's/WithInternal=0/WithInternal=1/' /tmp/ramdisk/linuxrc.syno.impl
在浏览器重新进到rr的引导界面,http://10.10.10.138:7681/,
选完model和version之后,选择advanced menu
选择保存修改,如图所示
选择Yes
这个时候,会一直显示saving,我这大概持续了4分钟
回到主页面,选择addons menu
选择upload a external addon
按回车
点击出现的上传按钮
选择addon文件,并点击确定
回车
这时候回到了addon页面,选择第一个,add addons
选择patches
这里要选择做哪几个修改,我们用的是SA6400的69057系统版本,涉及到的修改只是1,2,3,6,所以应该输入1 2 3 6,注意有空格
回到主菜单,重新build引导
build之后选择boot the loader启动就行了
接下来还是进到群晖的安装向导:http://10.10.10.138:5000/
然后就是正常的安装流程了,后面可以参考以前的文章。
暂无评论