找回密码
 立即注册

QQ登录

只需一步,快速开始

铁威马网络网络存储

[教程分享] 本论坛首发【老骥伏枥-鸡年大礼包】黑群晖6.02-8451版硬盘自启动,USB启动盘,系统救援

  [复制链接]
本帖最后由 f541883216 于 2017-2-2 01:34 编辑

自从发表了关于黑群晖5.x版硬盘自启动的探讨之后 (该帖子的地址:http://www.nasyun.com/thread-28601-1-2.html),很多坛友给予了大量的好评。也希望能把最新版的6.02-8451黑群晖做成硬盘自启动。因为群晖的硬盘的分区结构在做对齐时留下非常有限的127-133兆左右的可利用空间。而且从6.02版起,黑群晖开始用grub2的重量级启动引导了。由于大多数坛友习惯用Windows,而不习惯用Linux,对grub2更是不甚了解。为此,在鸡年新春之际,我为大家打包了一个最新版的6.02-8451黑群晖的硬盘自启映像,这次不仅仅是硬盘自启了,该映像还可制作USB启动盘,并且可以集成各种系统救援盘,可谓一盘在手,功能全有。

首先让我们来看看这次的大礼包映像都实现了那些功能。
1. 最新版的6.02-8451黑群晖硬盘自启动。而且是全汉字提示的。截图如下:

2. 使用大礼包映像,可以方便地制作USB启动盘。后面会详细介绍操作步骤。

3. 系统救援盘,从上面截图中可以看到,我添加了“GRUB2命令救援“,”系统救援(WinPE)工具盘“,”系统救援(Linux SystemRescue)工具盘“。系统救援工具盘一般都不小,是不可能塞进群晖的硬盘的分区结构在做对齐时留下的有限可利用空间的。为此我决定利用黑群晖硬盘的数据区,这样既可以保存救援盘,又可以用于系统救援,一举两得。集成各种系统救援盘的操作步骤将在后面会详细介绍。

4. 启动安全管理,有些菜单项中的内容,需要有管理员权限才能执行。例如:系统救援,重装,强制安装,等等。防止误操作。系统的默认管理员:admin。默认密码:admin。当然你可以通过修改grub的grub.cfg文件来设定你自己的管理员和密码。

还是那句老话:“授人以鱼不如授人以渔”。下面来看看大礼包映像中涉及的一些原理。该映像是为从bios机器启动grub2引导程序设计的。不需要UEFI机器,也能加载下grub2引导程序。文中将会出现如下一些名词:msdos或gpt分区,bios或 UEFI,GRUB Legacy 和GRUB2,MBR,fat16等等。如果你对这些名词感到很陌生,那么这个大礼包映像就不适合你使用了。至少你需要在他人的帮助下,才能正确使用它。

由于6.02-8451黑群晖用的是用GRUB2作为启动引导。GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。新的GRUB2(GRUB第二版)为GRUB的重写版本,它是GRUB的大革新。GRUB2对Linux系统做了更多的优化,支援更多的功能,如动态的载入模组(而在之前的GRUB中,新增或删除模组要重新编译GRUB)等。GRUB2的版本号为0.98或更高;旧的GRUB的版本号则为0.97或更低,也被称为“GRUB Legacy”或“GRUB1”等。GRUB2的配置、命令等较GRUB Legacy有一定的不同。

为了实现6.02-8451黑群晖硬盘自启动,正像我在5.x版中介绍过的一样,我们也需要把启动引导塞进群晖的硬盘的分区结构在做对齐时留下可利用空间。在6.02版之前的启动引导都是采用相对比较旧式的syslinux引导方式。它与GRUB2的不同点在于SYSLINUX项目是一套轻量级主引导记录(MBR)引导加载程序,用于启动具有Linux内核的IBM PC兼容计算机。SYSLINUX支持分区方案的引导,因此可以很容易地制作一个包含MBR的img将它直接写入硬盘子分区实现硬盘自启动。GRUB则属于重量级启动引导,特别是GRUB2更是以UEFI为主要目标而重写的版本。下面简单介绍一下它的启动过程和它在硬盘上分区的细节:

GRUB第一版本
GRUB的步骤1包含在MBR中。由于受MBR的大小限制,步骤一所做的几乎只是装载GRUB的下一步骤(存放在硬盘的其它位置)。步骤1既可以直接装载步骤2,也可以装载步骤1.5:GRUB的步骤1.5包含在MBR后面的30千字节中。步骤1.5载入步骤2。当步骤2启动后,它将呈现一个界面来让用户选择启动的操作系统。这步通常采用的是图形菜单的形式,如果图形方式不可用或者用户需要更高级的控制,可以使用GRUB的命令行提示,通过它,用户可以手工指定启动参数。GRUB还可以设置超时后自动从某一个内核启动。

GRUB第二版本
与GRUB第一版相似的是,boot.img像步骤1一样在MBR或在启动分区中,并且通过LBA48地址来寻址下一级(因此,GRUB传统的1024柱面限制避免),它(boot.img)将读取core.img(产生于diskboot.img)的第一个扇区以用来后面读取core.img的剩余部分。core.img默认写入MBR和第一个分区之间的扇区,当这些扇区是空闲和可用时。由于传统原因,硬盘驱动器的第一个分区不是从扇区1开始(计数从0开始),而是在扇区63,留下62扇区的空白空间不是任何分区或文件系统的一部分,因此不容易出现任何问题相关的。一旦执行,core.img将加载其配置文件和任何其他所需的模块,特别是文件系统驱动程序;在安装时,它从diskboot.img生成,并配置为通过其文件路径加载阶段2。属于阶段2的文件都保存在/boot/grub中,这是由文件系统层次标准(FHS)指定的/ boot目录的子目录。一旦加载GRUB阶段2,它呈现基于TUI的操作系统选择(内核选择)菜单,其中用户可以选择要引导哪个操作系统。

boot.img严格占有446字节的大小,并被写入MBR(0扇区)。如果可行(出于向后兼容的原因第一个分区起始于63扇区而非1扇区,但这不是强制的),core.img被写入介于MBR和第一分区之间的空扇区之中。/boot/grub目录可以放在单独的分区中,也可以放在根分区中。

从以上的简介中我们可以看到,不论是GRUB1还是GRUB2的启动引导都需要boot.img和core.img这两部分代码。而且GRUB2的boot.img必须放在硬盘主引导MBR(0扇区)。我们做黑群晖硬盘自启动时,最不希望影响硬盘主引导分区,而希望所有的改装都放在硬盘子分区中。为了实现在BIOS机器的硬盘子分区上启动GRUB2,我采用了通过链式启动,一个启动器可以启动另一个启动器的方法。将GRUB1安装到硬盘子的分区加载,再用GRUB1加载GRUB2来解决黑群晖硬盘自启动的问题。另一个麻烦的问题是GRUB的boot.img代码中需要硬盘的物理信息。这要通过bios获取并写入boot.img中。因此不能直接拷贝映像到硬盘分区实现安装GRUB,必须使用特定的安装程序才能正确安装GRUB。我在大礼包映像中,提供了一个脚本来解决这个问题。

因为这次黑群晖硬盘自启动版本是采用重量级启动引导,对于GRUB-2.0.3版本来说,官方提供的模块一共有200多个,因此我们就要充分利用重量级启动引导带来的好处。例如:利用黑群晖硬盘的数据区,这样既可以保存救援盘,又可以用于系统救援;启动安全管理,有些菜单项中的内容,需要有管理员权限才能执行;汉字显示;等等。在我的大礼包映像中,这些都有实例供坛友们学习,创新,制作自己的私人定制。但先决条件是你要有学习进取的精神,像我一样活到老学到老。对于那些饭来张口,衣来伸手的懒惰者而言只能一事无成。

所谓黑群晖,其实正真被黑的部分并不是bootloader。目前主流的bootloader都是开源项目。包括我们前面提到过的SYSLINUX和GRUB它们都是开源的。正真被黑的应该是部分内核zImage与位于initrd ramdisk中的各种外挂模块。事实上linux内核也是开源的。群晖可能会在zImage中加入一点检测硬件的代码。最主要的被黑部分是initrd中的各种外挂模块。黑群晖6.02版之前内核与initrd绑定在一个文件zImage中。黑群晖6.02版内核zImage文件与initrd分开为ramdisk.lzma和extra.lzma文件。黑定制版的linux系统大致就瞄准这两个文件。黑客们只注重黑功能的部分。能工作就达到目的。外在的修饰增值功能黑客们懒得费工夫。我的大礼包映像将弥补这些不足之处。对于嵌入式Linux系统逆向工程(我不是黑客也不用黑客这个名字)我是行家里手。但我不黑别家的产品,我只做自主知识产权的东西。这次的大礼包映像虽然有黑群晖代码,但那是在网上随处可见的代码。我只是拿它作为演示的范例。我做的启动引导部分绝对清白,自主原创。如果你喜欢,就请为我点个赞吧!

我的大礼包映像提取地址是:http://pan.baidu.com/s/1nvfkKit
文件提取码为:
游客,如果您要查看本帖隐藏内容请回复


下面详细介绍这个压缩包安装的方法和步骤:

1.安装最新版的6.02-8451黑群晖自启动硬盘
下载大礼包映像并解压将获得两个文件。boot602-8451.img映像和disk_setboot.sh脚本。在黑群晖的硬盘卷上创建一个share folder。例如:可以起名为boot。把这两个文件上载到这个share folder。截图如下:

打开黑群晖的ssh服务,截图如下:

用ssh登陆到黑群晖。我是用PuTTY通过ssh连到黑群晖的。登陆时要用admin管理员账户;密码是你初次安装黑群晖时设定的密码。然后执行sudo –i命令切换到root账户。截图如下:

切换到root后转入你创建的share folder。并执行如下命令设置文件的权限。


  1. cd /volume1/your_share_folder_name
  2. chown root:root boot602-8451.img
  3. chown root:root disk_setboot.sh
  4. chmod 666 boot.img
  5. chmod 777 disk_setboot.sh
复制代码
截图如下:

再执行 parted –l 查看一下你的硬盘分区情况和名称。截图如下:
  
一般情况下/dev/sdb应当是第一个硬盘。如果你的分区表是msdos类型,那么恭喜你,你可以用我的脚本直接生成黑群晖自启动硬盘。但如果你的分区表是gpt类型,你就要自己动手,根据我在上文阐述的原理,改写我的脚本才能生成黑群晖自启动硬盘。如果你不会改写脚本,那就得咨询他人获取帮助,或者就此止步。有些坛友可能会问,你为什么不给gpt类型硬盘也写个脚本呢?是不是想留一手?非也!这么详细的原理我都介绍给大家了,还在乎多写一两行脚本代码?原因是手头没有2t以上的大硬盘搭建测gpt试环境,改写脚本也就是一两行的代码,但我不能发放未经测试的代码。那样做不符合严谨认真的科学态度。事实上GRUB2是以UEFI为主要目标而重写的版本,它更适合用于gpt硬盘,也更容易安装。把GRUB2弄到msdos格式的bios引导硬盘的MBR分区的黑群晖自启动硬盘才是更麻烦费事的。
继续执行我写的脚本。这个脚本需要两个参数,第一个是硬盘的设备名,第二个是bootloader的映像文件名。例如,从当前目录执行时:
  1. ./disk_setboot.sh  /dev/sdb  ./boot602-8451.img
复制代码

执行后,黑群晖的自启硬盘就生成了。你可以shutdown黑群晖,拔掉USB或CD的启动盘。试试让硬盘自启吧。祝你好运。

由于帖子的字数限制,请继续看二楼精彩尽在其中!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1云币 +5 金条 +5 碎银 +5 收起 理由
悉心研究 + 5 + 5 + 5 很给力!

查看全部评分

使用道具 举报 回复

【老骥伏枥-鸡年大礼包】续篇

本帖最后由 f541883216 于 2017-2-6 03:15 编辑

2.制作USB黑群晖启动盘
大礼包中的映像也可以用来制作USB黑群晖启动盘。我是使用Linux SystemRescue工具盘来制作USB启动盘的。SystemRescueCD的下载地址是:https://www.system-rescue-cd.org/SystemRescueCd_Homepage
Linux的玩儿家都喜欢这个工具盘,不少黑客也用它。其实我的大礼包映像也是用它制作的哦。这个工具盘也是开源项目。下面是详细步骤:
启动SystemRescue工具盘。使用GParted将USB盘分成两个分区。以我的4G  USB盘为例,第一个尽可能的大。第一个分区后留下32兆的第二分区做启动用。截图如下:

这样做的好处是,当你在Windows系统下插入这个USB盘,你只能看到第一个分区,它只是一个数据盘。后面那个小小的分区,根本看不到。所以启动盘受到保护。不会轻易被破坏。我也曾用这样的分区方法,制作过一个MyBookLive的一键救砖USB盘,只是因为第二个分区要装500多兆的SystemRescue工具盘,前面的分区要放2G 的救砖rootfs映像。本来是要给NASYUN论坛写个文章的,但映像太大,上载困难也就放弃了。这次大礼包的映像比较小,因此也顺便介绍一下一键救砖USB盘的制作理念。好了言归正传。接下来需要把boot602-8451.img映像拷贝到USB盘的第一个分区。那个disk_setboot.sh脚本不需要拷贝,它是专为黑群晖硬盘自启动的,USB启动盘不用它。接下来插入USB盘,以Linux的设备名是/dev/sdc为例。
执行如下命令制作USB启动盘:
  1. mount  /dev/sdc1  /media
  2. mount  /media/boot602-8451.img  /mnt
  3. cd  /mnt
  4. ./usb_inst.sh  /dev/sdc2
复制代码
截图如下:

然后再用执行如下命令:
  1. cat /sys/kernel/debug/usb/devices | grep -e "^$" -e "Vendor" -e "Manufacturer" -e "Product=Mass Storage"
复制代码
获取USB的vid=0xXXXX 和pid=0xXXXX并编辑 /boot/boot/grub/grub.cfg文件中的vid和pid,把它们设定成你USB盘相同的值就完成了。截图如下:

完成后,第一个分区中的boot602-8451.img就可以删掉了。你可以把Linux SystemRescue工具盘的iso文件拷贝到第一个分区中,还可以拷贝WinPE的iso文件到第一个分区中。以后做为启动盘的系统救援用。请继续看下面的精彩制作。

3.系统救援盘制作
黑群晖自启动硬盘和USB启动盘制作完成后,用它启动并不能看到系统救援部分的菜单。这是问什么呢?因为bootloader的映像很小,它并不包含系统救援盘。一般来说救援盘的系统都很大,少则100兆,多则1-2G,是不可能塞进群晖的硬盘的分区结构在做对齐时留下的有限可利用空间的。但因为GRUB2是重量级启动引导,因此我们就要充分利用重量级启动引导带来的好处。我在grub.cfg文件中,加入了检测代码,它可以在指定的硬盘分区检查是否存在救援盘的iso文件,如果找到了,就显示启动救援的菜单。这样就可以利用黑群晖硬盘的数据区,既可以用于保存救援盘的iso文件,又可以用于系统救援。对于USB启动盘,也是相同的道理。下面将以利用黑群晖硬盘的数据区为例,介绍如何实现系统救援盘。当然,首先你要下载你喜欢的系统救援工具盘的iso文件。什么样的操作系统都可以,只要GRUB2能支持的都可以。大礼包的映像中给出了两个例子。一个是WinPE.iso另一个就是上面提到的systemrescuecd.iso。如果你下载iso文件名字不同,可以改成这两个名字。也可以不改名,而是修改grub.cfg文件。两种方法都可以。
在黑群晖的硬盘第一个卷上创建一个share folder名为iso。系统救援盘的iso文件上载到这个文件卷。截图如下:

如果文件卷名,救援盘iso文件名都与截图一致的话,,你就不用修改grub.cfg文件了。就会显示启动救援的菜单了。但我还是建议你学习一下如何修改grub.cfg文件。事实上,通过修改你可以使用任意的文件卷名和救援盘iso文件名,更加随心所欲。请看下面的截图:

不论是黑群晖硬盘还是USB盘,只有修改grub.cfg文件,就可以随心所欲地加载任何操作系统而不仅仅是加载救援盘。这是GRUB2重量级启动引导带给我们的好处。

4.其他黑群晖版本硬盘自启
大礼包的映像已经为大家搭建好了黑群晖GRUB2重量级启动引导的基础架构。正如我上文所述黑群晖6.02-8451版只是作为这个基础架构演示的范例。如果你不是小白或菜鸟,其实很容易就能利用这个基础架构创建任意黑群晖版本的硬盘自启或USB启动盘。具体步骤如下:
删除/boot/grub/DS3615xs目录下的zImage; ramdisk.lzma和extra.lzma等相关文件。把其他黑群晖版本的zImage文件拷贝到/boot/grub/DS3615xs目录中。修改grub.cfg文件的启动菜单。就这么简单。这也是GRUB2重量级启动引导带给我们的好处。

注意事项:
1, 安装硬盘自启会修改硬盘分区,一般情况下是不会破坏硬盘数据的。但还是会一定的有风险,论坛和发布文章的人不承担任何责任,后果自负。请无必事先备份好硬盘数据,以防万一。
2,请确认你安装的黑群晖是使用主引导记录MBR和MS-DOS标准分区表的老主板,而不是使用UEFI分区格式的GPT分区表的新主板。
3,安装硬盘自启前请严格检查大小版本号是否与本映像一致并仔细阅读本文,切勿盲目安装。
4,如果版本号不同,请使用你当前版本的zImage文件替换本映像中的zImage文件,对映像版本进行修正。如果曾经用算号器洗白,请修正本映像中的sn系列号和mac地址,以保证洗白的硬盘自启。

老骥伏枥 祝大家鸡年新春快乐!恭喜发财!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

执行./usb_ints.sh报错:zsh: exec format error  发表于 2017-2-16 00:03
使用道具 举报 回复 支持 2 反对 0
本帖最后由 f541883216 于 2017-2-7 02:47 编辑
hjysc 发表于 2017-2-4 22:02
执行usb_inst.sh时出现cannot execute binary file: Exec format error错误,试过在systemrescuecd(32bi ...

我查了,在我的机器上没有问题啊。我的是systemrescuecd 4.9.0 32bit 版本的。usb_inst.sh只是一个脚本,你可以用任何文本编辑器打开,看看是哪里产生了错误。根据你自己的系统修正一下。
使用道具 举报 回复 支持 反对
本帖最后由 f541883216 于 2017-2-17 06:29 编辑


这个脚本很简单,发一个脚本源文件:




  1. #!/bin/sh
  2. #
  3. # The purpose of the script is to install the bootloader on
  4. # a usb key for Synology can be booted from usb key
  5. #
  6. #help screen

  7. if  [ $# != 1 ]; then
  8. echo "
  9. standard use of script is:
  10.     ./usb_inst.sh    the script will install bootloader on usb key, it will not
  11.                      touch the partition tables and therefore please perserves data.
  12. possible options are:
  13.     /dev/sd*         usb key device name for Synology bootloader.
  14. example
  15.     ./usb_inst.sh /dev/sdc2
  16. "
  17. exit 1
  18. fi

  19. #check if the device exist
  20. if [ ! -e $1 ]; then
  21.     echo "$1 does not exist."
  22.     exit 1
  23. fi

  24. if [ ! -x /mnt/grub ]; then
  25.     echo "There is not correct bootloader installer"
  26.     exit 1
  27. fi

  28. mount $1 /boot
  29. if [ $? -ne 0 ]; then
  30.     echo "The usb device could not mounted"
  31.     exit 1
  32. fi

  33. cp -rf /mnt/boot /boot
  34. tmp_disk=$(echo $1 | sed "s/\([0-9]\)//g")
  35. grub-install --root-directory=/boot $tmp_disk
  36. if [ $? -ne 0 ]; then
  37.     echo "install usb device bootloader fail"
  38.     umount /boot
  39.     exit 1
  40. fi

  41. umount /boot
  42. echo "Generate usb key bootloader successful"
  43. exit 0
复制代码



脚本文件在映像中,如果解压没有问题,是不可能损坏的。损坏了就会出现解压CRC校验错误。


使用道具 举报 回复 支持 反对
f541883216 发表于 2017-2-17 06:10
这个脚本很简单,发一个脚本源文件:

确实脚本文件有问题,用楼主发的代码保存为usb_inst.sh文件就正确运行了,已制作好U盘黑群辉启动盘。我的旧主板不支持uefi启动,现在有了这个启动盘可以升级到6.02了,感谢楼主。
使用道具 举报 回复 支持 反对
skycy 发表于 2017-2-24 01:24
可以使用IDE硬盘做启动盘么?

亲测是可以的 我dom盘是ide口 6.0自启成功
使用道具 举报 回复 支持 反对
大神的礼包 看看是怎么用的
使用道具 举报 回复 支持 1 反对 0
非常感谢,下载了
使用道具 举报 回复 支持 反对
非常感谢,來試試安裝看看
使用道具 举报 回复 支持 反对
谢谢楼主分享
使用道具 举报 回复 支持 反对
vvvip 来自手机
7#
謝謝老師,收藏先,慢慢再研究……
使用道具 举报 回复 支持 反对

非常感谢,新年快乐。
使用道具 举报 回复 支持 反对
不错支持下,谢谢了!
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 搜索 官方QQ群