安装过黑群晖系统的网友们都有这样的经验,先要做一个USB或CD的启动盘。然后就可以用群晖的SynologyAssistant工具从另一台电脑把群晖系统安装起来了。
安装后,每次重启电脑,都需要这个启动盘。这是因为群晖系统主启动程序没有在硬盘中,而只有系统挂载的根目录系统在硬盘中。所以硬盘是不能用来启动的。
对与一个已经安装完成的运行系统来说,需要一个额外的启动盘,实在是有点美中不足。毕竟这是因为黑了群晖系统,转而安装到PC的x86平台上才会产生这个问题。有没有办法让黑群晖的运行系统硬盘自启动呢?首先需要研究一下需求。群晖系统的重安装会,重新创建新的文件卷,都会重写硬盘的分区,并抹去所有的数据。如果我们把bootloader装到硬盘中,当然也会被抹去。因为群晖的原设计就是用硬盘存储数据的。运行群晖自己的平台,根本就不需要什么启动盘。黑群晖才有这个需求。并与群晖的原设计有所冲突。既然黑群晖有这个需求,我们就要想办法解决。如果我们能设计一个非常方便的方法,一键重装bootloader到黑群晖的硬盘,这个问题不就迎刃而解了吗。
能不能把bootloader到黑群晖的硬盘呢?这需要看看黑群晖的硬盘的分区结构。让我们用GParted工具分析一下,可以发现有一个可以利用的100多兆的空间。截图如下:
黑群晖的bootloader很小,只有15兆左右。把它安装在这个空间,问题就解决了。关键是如何才能方便地完成一键重装bootloader到黑群晖的硬盘。
老骥伏枥重新打包了一个用于黑群晖硬盘自启动的boot.img,并专门为它写了一个shell script用于把bootloader安装到黑群晖的硬盘。并做了一个Synology_Harddisk_Boot.zip的压缩包,网友们可以从百度云下载使用。
地址是:
http://pan.baidu.com/s/1slctvVB
文件提取码为:
俗话说“授人以鱼不如授人以渔”;不知到是否有人对x86系统平台上BIOS的bootloader启动引导过程有兴趣,作为“抛砖引玉”我在这里以我打包的boot.img予以简单的介绍:在这个img包中,可以看到有6个文件:
ldlinux.sys
ldlinux.c32
menu.c32
libutil.c32
syslinux.cfg
zImage
但是还有一段代码是看不到的,它是MBR和引导代码,它的扇区位置是固定的。MBR是硬盘的第0个盘片的第0个面的第0磁道的0扇区。这就是为什么我要打包一个img文件而不是把文件发给大家的原因。我三十年前就出版过关于PC机启动引导的书,详细介绍过这方面的技术细节。三十年过去了BIOS引导没有什么变化和更新。黑群晖5.x版的引导技术相当陈旧。6.x版好像开始用grub了,有心的网友可以根据我介绍的思路,制作6.x版的boot.img。
黑群晖的x86系统平台加电后,主板CMOS芯片上的BIOS(Basic Input/Outpu System)程序检测与主板相连的硬件:CPU、内存、光驱、硬盘、软驱键盘等,然后加载系统卷中的引导扇区的MBR引导代码,把它加载到x86实模式的7C00地址并执行这段代码。如果在系统目录下有ldlinux.sys文件且有效,装载并把控制权交给它,如果是64位操作系统,ldlinux.sys将CPU切换到64位模式。之后读取并分析syslinux.cfg文件,根据设定加载并初始化linux内核。zImage是群晖定制的linux内核,在syslinux.cfg你可以看到:
MENU LABEL XPEnology DSM 5.1-5022
KERNEL /zImage
APPEND
root=/dev/md0 ihd_num=0 netif_num=4 syno_hw_version=DS3615xs sn=B3J4N01003 vid=0x0EA0 pid=0x2168 loglevel=0 vga=0x305
这些斜体字才是破解群晖的重要参数。引导并不是关键部分。我个人不喜欢黑别家的系统,只愿意做自主知识产权得原创作品,所以也不能解释这些斜体字的参数意义。以下介绍我写的创建自启硬盘脚本,这是自主知识产权得原创作品。
用这个压缩包可以方便地制作一个黑群晖硬盘自启动。具体步骤如下:
1. 下载Synology_Harddisk_Boot.zip压缩包
2. 解压后有两文件:boot.img 和 setboot.sh
3. 在黑群晖的硬盘卷上创建一个share folder。例如:可以起名为hard_disk_boot
4. 把这两个文件上载到这个share folder。截图如下:
5. 从控制台或用ssh登陆到黑群晖。我是用PuTTY通过ssh连到黑群晖的。注意:登陆时一定要用root而不是用admin。密码是你初次安装黑群晖时设定的密码。admin和root的密码其实是一样的。截图如下:
6. 登陆后,切换到share folder。并设置文件的权限。
- cd /volume?/your_share_folder_name
- chown root:root boot.img
- chown root:root setboot.sh
- chmod 666 boot.img
- chmod 755 setboot.sh
复制代码
截图如下:
7. 执行 fdisk –l 查看一下你的硬盘分区情况和名称。截图如下:
从截图中可以看到,我的黑群晖系统现在挂载了两硬盘,每个8GB。一个是/dev/sdc,另一个是/dev/sdd。其中/dev/sdc1和/dev/sdc2是两个linux raid分区,这是黑群晖的根目录系统。/dev/sdc3是扩展分区,/dev/sdc5是linux raid的扩展逻辑分区,用做数据卷。在x86系统平台上,每个硬盘只容许有4个基本分区。sdc1,sdc2,sdc3用了三,幸好还为我们留了最后一个sdc4,让我们可以用来做黑群晖硬盘自启动。我想这可能是群晖系统设计时留下准备将来有什么用途的吧。不管怎样,我们现在可以用来做硬盘自启。另一个硬盘/dev/sdd的结构也是一样的。不管系统有多少硬盘,自启的bootloader只要安装到其中一个硬盘即可。一般我会选择安装到第一个硬盘。
8. 执行我写的shell script创建自启硬盘。这个脚本需要两个参数,第一个是硬盘的设备名,第二个是bootloader的映像文件名。例如,从当前目录执行时:
- ./setboot.sh /dev/sdc ./boot.img
复制代码
截图如下:
执行后,黑群晖的自启硬盘就生成了。你可以shutdown黑群晖,拔掉USB或CD的启动盘。试试让硬盘自启吧。祝你好运。
如果你想查看一下安装的情况,可以执行 fdisk –l 来查看。截图如下:
可以看到在/dev/sdc4,我们安装来自启的bootloader。
注意事项:
1, 安装硬盘自启会修改硬盘分区,一般情况下是不会破坏硬盘数据的。但还是会一定的有风险,论坛和发布文章的人不承担任何责任,后果自负。请无必事先备份好硬盘数据,以防万一。
2, 这是黑群晖5.1-5022版硬盘自启动,切勿用于6.x版。如果你想为6.x版做硬盘自启,请参见本文前面提到的抛砖引玉介绍。
老骥伏枥,祝大家新年快乐。