本帖最后由 tiandishi 于 2020-5-23 14:09 编辑
目前个人尝试将群晖部署在云服务器上,云服务器稳定、安静,跑群晖挺合适的。
进过一周的折腾,终于将群晖搬上了云服务器,虽然目前不完美,但是可以run了。立帖纪念。更新:目前已经完美运行
本贴为技术贴,提供上云思路和问题解决方案,小白教程还需要等等。本帖会逐步细化完善。
上云思路:
国内云厂商ecs基本都是基于kvm的虚拟化。大厂如阿里、腾讯、华为、百度都支持自定义镜像。其对自定义系统集成有如下要求:
云厂商要求 | 上云面对的问题 | 解决方案 | 1、系统盘就是引导盘,不支持独立引导,额外购买硬盘要银子。
| 黑群晖往往需要独立的盘位做引导 | 老骥伏枥大神的二合一方案,系统引导集成到一个磁盘 | 2、必须有virtio_net 和virtio_blk驱动
| 网络驱动已经完善,但是virtio_blk驱动不认盘。 | 不认盘是因为virtio_blk驱动默认将设备命名为vda,vdb,dsm不认这种盘。解决为:通过编译内核重新命名,但也带来了新的问题:启动内核时需要修改逻辑,使得dsm系统阵列正常加载
| 3、cloud init (非必须) | 无问题可忽略 | |
本教程主要面向技术折腾人员,要求看官有基本的linux操作能力,主要解决第二个问题,认盘问题。
镜像制作步骤:
1、制作二合一镜像,作为折腾母镜像
2、修改extra.lzma,集成virtio相关驱动内核,识别虚拟硬盘
3、修改extra.lzma,阵列修复,使系统正常启动
本教程基于 jun大引导 1.02b 3615xs 6.1.7系统制作 ,6.1系列教程较完善,包括驱动、二合一等,便于处理不少问题,选3615xs是因为云服务器就2核。。
准备工作:
名称 | 作用 | 选择原因 | jun大引导 1.02b 3615xs | 万恶的折腾根源 | 6.1系列教程较完善,包括驱动、二合一等,3615xs是因为云服务器就2核 | 群晖tool chain 以及对应的内核 | 修改内核,编译驱动 | 无 | 云服务器 | 部署 | 有免费试用如华为云,没有的可选按量付费,测一天撑死不超过5块,一般几毛就测半天 | 个人测试kvm环境,本人推荐proxmox | 测试 | 好用 |
步骤:
一:制作二合一
此处可搜到网上相关教程,本人提供下路子,避免少走弯路:
1.虚拟机一块jun大引导,一块20g左右的虚拟盘,安装好群晖系统 6.1.7,并初始化:添加磁盘和共享数据目录。
2.写入老骥伏枥引导,将jun大引导镜像里面的 extra.lzma、 rd.gz 、 zImage 覆盖到 /boot/grub/DS3617xs 下同名文件。这时候第一步就算完成了。
3.登入系统,获取阵列信息,命令为 mdadm --detail --scan > /etc/mdadm.conf ,拷贝一份 mdadm.conf到系统外,后面有用到。
说明:后面折腾过程主要就是不断打包替换 jun大的extra.lzma 的过程,中间容易出错,不过启动不了的时候将引导换为jun大的启动盘再就好了,再继续替换,不影响dsm系统。
二:添加virtio驱动
1、下载 http://www.nasyun.com/forum.php?mod=viewthread&tid=31988&page=1 的启动文件,提取extra.lzma下的virtio_开头的驱动,该内核被人测试过,所以懒的编译的直接拿来用就行
2、下载本人提供的 virtio_blk 驱动,替换上面的virtio_blk驱动。该驱动可将vda虚拟盘识别成sda盘。
驱动修改原理: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/block/virtio_blk.c?h=v3.16.83 修改
virtblk_name_format("vd", index, vblk->disk->disk_name, DISK_NAME_LEN);
这一行的vd为sd,即可被群晖识别。注意上述链接不是黑群晖的内核,只是linux的 virtio_blk驱动都用这个
再将添加的驱动更新到rc.modules,打包到extra.lzma即可。
驱动编译教程(包含extra.lzma解包和压缩教程):https://xpenology.com/forum/topic/7341-tutorial-compile-xpenology-drivers-in-windows-10/
说明:这里打包的extra.lzma替换到jun大的引导镜像,就可以正确识盘并安装系统。但是无法正常启动,那就是群晖系统导致的原因了。
三:修复阵列无法识别的问题:
vd改为sd,重新编译后得到 virtio_blk.ko,打包进引导镜像,目前可以正确识别硬盘为sda 并安装 3615xs, 6.17,15284 版本的系统.
但是启动时发现无法识别群晖的/dev/md0 /dev/md1 软raid系统,导致认定系统未安装,重新进入安装界面.
观察内核日志报错:- [size=3]:: Starting /usr/syno/bin/synocfgen...
- /usr/syno/bin/synocfgen returns 0
- Partition Version=0
- Partition layout is not DiskStation style.[/size]
复制代码 问题分析:参考: https://github.com/sancome/DSM-5.0-4458_dsgpl-4418/blob/master/xpenology/patches-rd-gz-alpha9/rd-orig/linuxrc.synodsm单盘系统盘是一个软raid1的软阵列,黑裙引导的时候需要识别这个阵列并加载阵列的系统。不知什么原因当硬盘类型为virtio_blk(上述厂商都是这种虚拟硬盘,因为虚拟性能好)的时候,内核启动检测阵列使用的 mdadm --auto-detect 这个命令不会映射virtio_blk到阵列专用的设备符/dev/md0,进一步导致内核执行/usr/syno/bin/synocheckpartition 的时候返回结果为Partition Version=0 ;需要替换为 mdadm --assemble --scan ,这样可以正常识别阵列分区, /usr/syno/bin/synocheckpartition 返回正常结果 Partition Version=8. .解决方案:
1、解包extra.lzma,在etc下添加 第一步得到的. mdadm.conf 配置文件。
2、修改linuxrc.syno的补丁文件jun.patch ,在内核挂载阵列设备 /dev/md0 前执行 mdadm --assemble --scan,该命令优先读取上面的配置文件,识别出硬盘阵列,然后后面的挂载系统能顺利执行。
3、打包extra.lzma ,扔进引导。
自此,二合一+kvm完整驱动就集成完成了,将镜像导出成qcow2格式上传到云厂商部署即可,注意打开防火墙5000-5001端口访问。
现存的问题:目前进入进系统后会提示无数据卷,需要新创建数据卷,怀疑是二合一镜像打包有些问题,不过相信会比较快的解决。
附件提供1、集成所有驱动、更改md检测的的extra.lzma文件,注意替换或删除 etc下面的mdadm.conf 文件,不然应该是识别不到你的盘的。
2、单独的virtio_blk驱动,仅仅适用于3.10.102内核编译的系统。
kvmdrive.zip
(1.84 MB, 下载次数: 48)
3、提供quicknick镜像修改版,经过腾讯云2核intel e5 的 ecs测试可安装系统,修改grub.cfg的mac地址为虚拟网卡地址,镜像导入采用强制模式。
https://tt1-1251225920.cos.ap-chengdu.myqcloud.com/XPEnology_DS3615xs_6.1.x-quicknick.img
补充内容 (2020-6-3 18:49):
和原版引导相比,改动如下:
1、extra.lzma /usr/lib/modules/ 添加virtio系列驱动
2、extra.lzma /etc/rc.modules /virtio添加驱动
3、extra.lzma /etc/mdadm.conf 配置文件
4、extra.lzma /etc/jun.pat 启动逻辑
补充内容 (2020-6-3 18:49):
4、extra.lzma /etc/jun.pacht 启动逻辑
|
|