Single

Aiffro K100全闪Nas上手体验–安装黑群晖

前言

上一篇文章提到了在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/
然后就是正常的安装流程了,后面可以参考以前的文章。

暂无评论

发表评论