完善黑群晖理顺盘序、隐藏引导盘的设置

因为才入手黑裙才几个月,直到昨天遇到硬盘扇区出问题的情况,今天回到家晚上吃完晚饭便开始折腾,一个劲的Google群晖硬盘损坏、迁移、换盘的一些教程心得,偶然间发现我的黑裙磁盘盘序这些挺乱的,才有了这一篇文章。

因为是基于 DS3617XS 的引导文件,所以这篇文章只针对该型号的黑裙来操作;操作流程我就不多叙述了,具体参考本博文后面的相关参考链接,如果实在是懒得折腾的,且又是同样机型的引导文件可以套用我改好的grub.cfg文件

因为怕数据出现问题或者出现重装恢复数据的麻烦,另外:PE系统里修改也需要相关的加载镜像文件的工具,我没有尝试过也不知道有哪些坑。

折腾过后的黑群晖磁盘空间

所以我便使用了SSH客户端的vi工具来在线编辑grub.cfg文件,其实用法也很简单,熟悉了操作完全是无脑的,在折腾之前建议备份数据,备份好我们修改的grub.cfg文件。如果有问题了只要能开机,就不怕数据丢失,大不了就是改回来呗!

黑群晖修改后的grub.cfg文件

if serial --port=0x3F8 --speed=115200;then
        set has_serial=true
        terminal_input --append serial
        terminal_output --append serial
else
        clear
fi

terminal_input --append console
terminal_output --append console

if [ x"${grub_platform}" = xefi ]; then
        insmod efi_gop
        insmod efi_uga
else
        insmod vbe
fi

set extra_initrd="extra.lzma"
set info="info.txt"

set vid=0x058f
set pid=0x6387
set sn=A8ODN02468
set mac1=0011322CA603
set rootdev=/dev/md0
set netif_num=1


#set extra_args_3617='earlycon=uart8250,io,0x3f8,115200n8 earlyprintk loglevel=15'
set extra_args_3617='SasIdxMap=0 DiskIdxMap=0F00 SataPortMap=4 sata_remap=05>10:10>05'

set common_args_3617='syno_hdd_powerup_seq=0 HddHotplug=0 syno_hw_version=DS3617xs vender_format_version=2 console=ttyS0,115200n8 withefi elevator=elevator quiet syno_port_thaw=1'

set sata_args=' SasIdxMap=0 DiskIdxMap=0F00 SataPortMap=4 sata_remap=05>10:10>05'

set default='0'
set timeout='1'
set fallback='1'

if [ -s $prefix/grubenv ]; then
        load_env
        if [ -n "$saved_entry" ]; then
                set default="${saved_entry}"
        fi
fi

VERSION="with Jun's Mod v1.03b"

search --file -s /bzImage

function savedefault {
        if [ -s $prefix/grubenv  ]; then
                saved_entry="${chosen}"
                save_env saved_entry
        fi
}

function do_option {
        if [ $# -lt 2 ]; then
                eval "set value=\"\$$1\""
                echo "current $1: $value"; return;
        fi
        set key=$1
        shift
        set $key="$*"
        if [ -s $prefix/grubenv  ]; then
                save_env $key
        fi
}

function vid { do_option vid $@; }
function pid { do_option pid $@; }
function sn { do_option sn $@; }
function mac1 { do_option mac1 $@; }
function mac2 { do_option mac2 $@; }
function mac3 { do_option mac3 $@; }
function mac4 { do_option mac4 $@; }
function rootdev { do_option rootdev $@; }
function append { do_option extra_args_3617 $@; }

function vidpid {
        if [ $# -lt 2 ]; then
                echo "usage: vidpid 0xVVVV 0xPPPP"; return;
        fi
        set usb_args="vid=$1 pid=$2"
        if [ -s $prefix/grubenv  ]; then
                save_env usb_args
        fi
}

function showtips {
        if [ -n "$has_serial" ]; then
                terminal_output --remove serial
        fi
        echo "Screen will stop updating shortly, please open http://find.synology.com to continue."
        echo
        echo
        if [ -n "$has_serial" ]; then
                terminal_output --append serial
        fi
}

function loadinitrd {
        if [ -s $img/$info ]; then
                if [ -n "$has_serial" ]; then
                        terminal_output --remove serial
                fi
                cat $img/$info
                if [ -n "$has_serial" ]; then
                        terminal_output --append serial
                fi
        fi
#        if [ -s $img/$extra_initrd ]; then
#                initrd $img/rd.gz $img/$extra_initrd
#        else
#                initrd $img/rd.gz
#        fi
}

function common_add_option {
        eval "set value=\"\$$1\""
        if [ -z $value ]; then return 1; fi
        set common_args="$common_args $1=$value"
}

function common_add_option_ex {
        eval "set value=\"\$$1\""
        if [ -z $value ]; then return 1; fi
        set common_args="$common_args $2=$value"
}

function loadlinux {
        set model=$1
        set bootdev=$2
        shift 2
        if [ -n $vid -a -n $pid ]; then
                set usb_args="vid=$vid pid=$pid"
        fi
        eval "set common_args=\"\$common_args_$model\""
        eval "set extra_args=\"\$extra_args_$model\""
        eval "set bootdev_args=\"\$${bootdev}_args\""
        common_add_option_ex rootdev root
        common_add_option sn
        if common_add_option mac1; then set netif_num=1; fi
        if common_add_option mac2; then set netif_num=2; fi
        if common_add_option mac3; then set netif_num=3; fi
        if common_add_option mac4; then set netif_num=4; fi
        common_add_option netif_num
    if [ -z $zImage ]; then
        set zImage=bzImage
    fi
        linux $img/$zImage $common_args $bootdev_args $extra_args $@
}

menuentry "DS3617xs 6.2 Baremetal $VERSION" --class os {
        set img=
        savedefault
        loadlinux 3617 usb
        loadinitrd
        showtips
}

menuentry "DS3617xs 6.2 Baremetal $VERSION Reinstall" --class os {
        set img=
        loadlinux 3617 usb mfg
        loadinitrd
        showtips
}

#menuentry "DS3617xs 6.2 Baremetal AMD $VERSION" --class os {
#        set img=
#        set zImage=bzImage
#        savedefault
#        loadlinux 3617 usb
#        loadinitrd
#        showtips
#}

menuentry "DS3617xs 6.2 VMWare/ESXI $VERSION" --class os {
        set img=
        savedefault
        loadlinux 3617 sata
        loadinitrd
        showtips
}

这是我改好的内容,在折腾之前建议多比对下相关的一些参数,比如:set extra_args_3617= set sata_args= SataPortMap= DiskIdxMap= Sata_remap=等。

主要参考以下文章:

参考:黑群辉改sata控制器识别接口数、硬盘盘序的经验总结
参考:群晖安装成功后修改mac以及sn(SSH在线修改DS918+的SN/MAC)

再次,感谢大佬们的无私奉献!

评论已关闭