由于群晖的从DS920开始的机器不再使用esataportcfg和internalportcfg的synoinfo进行esata和内置sata的配置,所以修改这两个参数已经不能把内置sata改为esata了
新的机型采用dtb的方式进行配置,下面将讲述如何进行dtb配置

  1. 首先,先把需要设置成esata的盘位插上硬盘,进入RR(或者ARPL,下称引导)的编译引导环境(Configure),正常的配置好编译引导
  2. 进入系统安装(如果已经装好系统,用第二个启动项进入安装程序)用telnet连接,用户名root没有密码,执行下面的命令查看sata口信息

    cat /sys/block/sata数字/device/syno_block_info

    其中“数字”取决于群晖磁盘管理中显示的硬盘序号,可以ls /sys/block | grep sata查看所有的
    pciepath对应下方配置中完整的pcie_root
    ata_port对于下方配置中的ata_port
    记下来,下面会用到

  3. 执行以下命令解析并查看dtb

    sudo dtc -I dtb -O dts -o model.dts /run/model.dtb
    # 先多按几下回车方便查找 把下面这个命令输出的内容复制下来
    cat model.dts

    使用Visual Studio Code或者其他记事本,使用UTF-8编码保存刚刚复制的内容(用系统自带的记事本也行)并进行修改
    根据刚刚让你记下来的信息找到你的esata接口,并把它的internal_slot改成esata_port,并调整一下后面的数字,没有就自行增加一个

           esata_port@从1开始数接口数量 {
                 ahci {
                         pcie_root = "0000:刚刚让你记下的控制器id,00.0";
                         ata_port = <0x刚刚Ports里数的转16进制>;
                         internal_mode;
                 };
         };
    

    esata_port是外置esata,internal_slot是内置口,请举一反三

    下面则是天钡r1用pve直通n100的物理sata控制器,0口是esata(cpu风扇那边是0),1口是内置的例子

    /dts-v1/;
    
    / {
         compatible = "Synology";
         model = "synology_epyc7002_sa6400";
         version = <0x01>;
    
         internal_slot@7 {
                 protocol_type = "sata";
    
                 ahci {
                         pcie_root = "0000:00:1f.2";
                         ata_port = <0x00>;
                 };
         };
    
         internal_slot@2 {
                 protocol_type = "sata";
    
                 ahci {
                         pcie_root = "0000:00:1f.2";
                         ata_port = <0x01>;
                 };
         };
    
         internal_slot@3 {
                 protocol_type = "sata";
    
                 ahci {
                         pcie_root = "0000:00:1f.2";
                         ata_port = <0x02>;
                 };
         };
    
         internal_slot@4 {
                 protocol_type = "sata";
    
                 ahci {
                         pcie_root = "0000:00:1f.2";
                         ata_port = <0x03>;
                 };
         };
    
         internal_slot@5 {
                 protocol_type = "sata";
    
                 ahci {
                         pcie_root = "0000:00:1f.2";
                         ata_port = <0x04>;
                 };
         };
    
         internal_slot@6 {
                 protocol_type = "sata";
    
                 ahci {
                         pcie_root = "0000:00:1f.2";
                         ata_port = <0x05>;
                 };
         };
    
         esata_port@1 {
                 protocol_type = "sata";
    
                 ahci {
                         pcie_root = "0000:00:1c.0,00.0";
                         ata_port = <0x00>;
                 };
         };
    
         internal_slot@1 {
                 protocol_type = "sata";
    
                 ahci {
                         pcie_root = "0000:00:1c.0,00.0";
                         ata_port = <0x01>;
                 };
         };
    
         usb_slot@1 {
    
                 usb2 {
                         usb_port = "1-1";
                 };
    
                 usb3 {
                         usb_port = "1-1";
                 };
         };
    
         usb_slot@2 {
    
                 usb2 {
                         usb_port = "1-2";
                 };
    
                 usb3 {
                         usb_port = "1-2";
                 };
         };
    
         usb_slot@3 {
    
                 usb2 {
                         usb_port = "1-3";
                 };
    
                 usb3 {
                         usb_port = "1-3";
                 };
         };
    
         usb_slot@4 {
    
                 usb2 {
                         usb_port = "1-4";
                 };
    
                 usb3 {
                         usb_port = "1-4";
                 };
         };
    
         usb_slot@5 {
    
                 usb2 {
                         usb_port = "1-5";
                 };
    
                 usb3 {
                         usb_port = "1-5";
                 };
         };
    
         usb_slot@6 {
    
                 usb2 {
                         usb_port = "1-6";
                 };
    
                 usb3 {
                         usb_port = "1-6";
                 };
         };
    
         usb_slot@7 {
    
                 usb2 {
                         usb_port = "2-1";
                 };
    
                 usb3 {
                         usb_port = "2-1";
                 };
         };
    
         usb_slot@8 {
    
                 usb2 {
                         usb_port = "2-2";
                 };
    
                 usb3 {
                         usb_port = "2-2";
                 };
         };
    
         usb_slot@9 {
    
                 usb2 {
                         usb_port = "2-3";
                 };
    
                 usb3 {
                         usb_port = "2-3";
                 };
         };
    
         usb_slot@10 {
    
                 usb2 {
                         usb_port = "2-4";
                 };
    
                 usb3 {
                         usb_port = "2-4";
                 };
         };
    
         usb_slot@11 {
    
                 usb2 {
                         usb_port = "2-5";
                 };
    
                 usb3 {
                         usb_port = "2-5";
                 };
         };
    
         usb_slot@12 {
    
                 usb2 {
                         usb_port = "2-6";
                 };
    
                 usb3 {
                         usb_port = "2-6";
                 };
         };
    };
  4. 强制关机重启,进入引导,用浏览器访问引导的web配置界面,选择“高级”中的“自定义dts文件”上传你刚刚编辑好的文件,并进行一次编译,再正常启动即可完成对esata的配置

    另外也可以直接对系统中的dtb进行覆盖,但是可能会导致你的修改被系统覆盖而无法生效,所以不推荐,除非你是白的

    sudo dtc -I dts -O dtb -o model.dtb model.dts
    cp -f model.dtb /etc/model.dtb
    cp -f model.dtb /etc.defaults/model.dtb