Discuss

Synobootonbothhwvps

minlearn 仲裁员
板块:通用举报

利用整块化自启镜像实现黑群在单盘位实机与云主机上的安装启动

本文关键字:单盘安装黑群,黑群硬盘镜像,云主机单盘安装黑群。

在《阿里云上单盘安装skynas中》我们谈到群晖的安装方式是基于至少双盘的,新买的白群在内部一小块ROM上存有bootloader(这是第一个盘),.pat dsm只是作为数据被安装/升级在某个volume1上的某个分区(这个volume1便是第二盘),以后进入DSM在系统中新增volume2,volume3时,与volume1相同的分区结构和分区上的数据都以相同的方式在这些volumex(x=2,3...)上复制建立一次。------- 正常的DSM安装需要双盘,这导致没有双盘的云主机或需要单盘安装黑群的实体机无法在单盘环境下安装(前者除非再购一盘否则没有可用的volume1盘,后者至少浪费一个另外的盘单独放bootloader或要外挂USB作bootloader盘)。但是,事情的转折点是,在实机上已经经过测试,安装完的黑群是有可能在安装完成后,将bootloader移到volume1的某个未划分分区上,做成单盘启动的。这里的未划分分区是群晖为了对齐硬盘在volumes中设置的一个空分区。这样就可移除最初那个bootloader盘,将整个黑群做成单盘的。

既然没有正常的纯单盘安装方法 - DSM安装脚本没有提供行之有效的方法,hacking后的结果又是可以运行的,这说明至少群晖支持单盘运行单盘启动的(这时,它已经被安装上了,整个群晖bootloader,群晖系统,和配置,及对volume1的设置,都已经被固化在这个系统上了)。那么把整个硬盘系统都img dump下来然后用在同类型机器上总是可以启动的,dmg后的硬盘镜像里会有一套区确的分区和群晖.pat安装后的数据,群晖配置,,其中bootloader是一个干净的预安装环境,(它总会是把第一个盘认识的盘作为volume1)pat所在区里的数据和配置也是无关任何机器的。猜想它总能工作起来。

这就是本文要讲的在阿里云上单盘位安装skynas及制作一个可用的硬盘镜像供以后安装。这是对《阿里云上单盘安装skynas中》的强化和补充。

1.准备硬盘镜像

建立在对群晖的etc/fstab配置和启动脚本没有任何研究的基础上,那么不妨一步一步来按照最简单的一般通用过程来还原这个过程,流程是先安装bootloader,再安装pat,再进系统,看bootloader所在盘是否会作为整个volume1被识别 ----- 按在《阿里云上单盘安装skynas中》中的方法,先准备工具,这是因为在阿里云上不能插USB,只有一个系统盘,如何在单盘环境上载入loader,可以使用iso或定制grub2,就如我们在《发布virtiope》一文一样,它在被加载后相当于一个内存盘和外置bootloader。我们现在需要得到的是一个synope,我们使用的是tinycolinux和其引导菜单:

进入工具,重新建立skynas的分区结构(这个是我们反工程skynas安装过的磁盘结构得出的结论),先安装bootloader到对应分区,然后启动上传.pat系统安装,我们以为它会将.pat放进正确的分区,结果出现了pat会提示损坏无法安装,其实,即使最终完成安装,最终,我们进入系统,也发现不了其所在loader盘可作为volume1,更别说在上面建立存储空间。----- 这里可能有二个过程会影响安装脚本对硬盘结构的判断,使得安装不能继续,1,skynas在第一次发现volume1安装.pat的过程中企图改造磁盘结构(volume1),失败,除了不能自己改造自己,它应该还有别的问题,毕竟不能期待安装脚本现在能在单盘上也像双盘上一样进行过去,2,即使完成,在建立volume1上的存储空间时又会改造一次分区和磁盘结构。

好吧,我们来看一下pat会提示损坏无法安装,磁盘到底出了什么问题,但其实这些也有人解决过了,

下面是nasyun上的老骥伏枥对于解决这个问题的一段话:

对此错误,我对代码做了分析,终于查出了原因。这是因为ISO盘是只读的工作模式。不同于USB盘,和硬盘启动。在导入群晖的pat包时,群晖的 update package 程序需要向它的 flash 中写入几个文件。其实这些操作对于黑裙来说是毫无意义的。但又不能不让它进行,否则就要修改它的 update package 程序。但如果群晖系统已经导入,ISO启动盘就可以正常工作。

skynas与黑群dsm可能会有所不同,但道理应该一样。研究安装脚本可以得到方案。

除此之外,他在nasyun上先后推出了针对黑群自启安装的整个系列,见nasyun上的老骐伏励的系列贴子,他从原理(利用grub启动机制和各版本黑群下的硬盘分区结构,配合脚本判断插入镜像文件到闲置的分区)和实作上提出了一个synope的东西(img for hd,usb+setboot.sh或iso,其脚本原理一样),还支持.pat的原生安装,我们不打算从自动化的角度来写二篇类似《发布virtiope》与《在阿里云利用virtiope安装ISO》的文章 for syno,因为老骥伏枥已经做得很好了。我们这里要达到的效果是:提出一套类似nasyun的124718842提出的二合一硬盘镜像为最终的产出品和安装启动方法。虽然效果不同但其思路和原理和老骥伏枥系列synope作品是一样的:利用synope工具急救环境,和脚本处理各个过程中出现的问题,即上面提到的,使安装不能继续的1,2,手动的方式比老骥伏枥发布的的自动化更安全。因为不是synope,它与老骥伏枥的安装的另一区别是,不支持老骥伏枥式的.pat安装和自动化过程。

那么在skynas下和在《阿里云上单盘安装skynas中》提到的工具支持下,如何解决pat会提示损坏无法安装的问题呢 。

我们的重点是如何在得到一个可让.pat安装过去的初始硬盘镜像。根据老骥伏枥的方案,挂载买一个新的盘或者利用GRUB2+ISO来虚拟内存盘来使那个临时IDE出现。解决了就卸载那盘。

如果这套方案已经能使黑skynas在云主机上顺利安装了,可以进入系统了,目前为止,它还是skynas眼中的bootloader盘,那么还剩下一个问题,如何将发现volume1也做进里面,同样是挂载再次新买的一个盘,进去把存储空间管理器配置好,定为raid group->basic group brtfs这样会把当前bootloader拷贝到新买的那个盘并配置好volume1指向数据。但是关于第二个问题出,重启你会发现进入不了dsm,进入synope发现,刚才的操作把然后你就会发现这次对存储空间的操作把efi引导区给破坏了,在急救pe工具中把它重新恢复回来,对新数据盘也做同样的操作,即可。重启进入。

这样在新买的那个盘中,会存有所有的能工作和存有配置的skynas系列,包括重要的volume1的设置,整个问题就解决了。我们要最终得到的正是它,反而不是系统盘。

2,dump整个镜像。

因为bootloader所在的那个盘是系统盘阿里云不让你卸载,你可以再次进synope。在这里把整个新购的那个硬盘镜像都dump下来(这个镜像是预计未来整盘恢复的,不能按分区恢复,分区还原时会改造GUID,会破坏整个已安装好的群晖关于引用盘符的逻辑)。因为是做模板的,volume1和存储空间越小越好。如果是在本机上,尽量用一个最小的盘,8G U盘都可以,在阿里云上只能作40G的快照或镜像。后者你可参照nasyun的124718842集成的《918+6.21 二合一引导启动系统盘》UEFI,DS3617xs-6.17 UEFI MBR版等等。

3,在新ECS上测试还原整个镜像

再次讲下老骐伏励系列作品与集成dsm和volume1设置的此整块化自启镜像作品的区别,------ 用此镜像还原的黑群不能重装。也不能对volume1进行添加删除volume1上存储空间的操作,原因如上所述。,那么一旦源镜像与目标盘大小不一样怎么办,目标很大,还原过去的存储空间的设置用不完所有的剩余空间,实机上124718842集成的二合一系列就会有这个问题。

124718842的硬盘镜像是针对16GU盘的,存储空间定为9G大小,假设我使用的是uefi版二合一引导启动系统盘,恢复方法是diskgenuis把目标盘所有分区都删了,然后整个镜像恢复,恢复完后进synope,发现它其实是mbr分区表,只是它有一个激活状态的efi分区,里面有bootloader,那个存储空间就是9G的linux raid,当用此镜像还原到大盘时,为了把存储空间利用完,所以我们得重新利用急救空间来hacking扩展这个存储空间。回到dsm,把固定大小的存储空间和raid group1都删了,然后再重新划分raid group1和存储空间,进入synope发现,在急救pe工具中把那个efi重新恢复回来,即可。


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

minlearn.org,tg: minlearn_1keydd,本人长期接有偿付费dd。不会D的,和要定制镜像的都可以t我