最近在研究群晖的内部工作原理,研究对象是 ds214play 。这个产品有个 nor flash 。根据启动 log 我们可以看到 nor flash 的分区表:
[ 9.756626] m25p80 spi1.0: found n25q064, expected m25p80
[ 9.762133] m25p80 spi1.0: n25q064 (8192 Kbytes)
[ 9.766993] Creating 6 MTD partitions on "spi1.0":
[ 9.771814] 0x000000000000-0x0000000d0000 : "RedBoot"
[ 9.781681] 0x0000000d0000-0x0000003d0000 : "zImage"
[ 9.797184] 0x0000003d0000-0x0000007d0000 : "rd.gz"
[ 9.823147] 0x0000007d0000-0x0000007e0000 : "vendor"
[ 9.828372] vender Mac0 address : 00:11:32:42:cb:4f
[ 9.834018] vender Mac1 doesn't set ucSum:0x00 Buf:0x00 Sum:0.
[ 9.841107] vender Mac2 doesn't set ucSum:0x00 Buf:0x00 Sum:0.
[ 9.847013] vender Mac3 doesn't set ucSum:0x00 Buf:0x00 Sum:0.
[ 9.852842] serial number='1520LTN597904'
[ 9.860050] 0x0000007e0000-0x0000007f0000 : "RedBoot Config"
[ 9.876496] 0x0000007f0000-0x000000800000 : "FIS directory"
里面有存放 kernel ( zImage)和 ramdisk(rd.gz)。我解压了群晖的官方的 pat 文件,发现结构如图。
checksum.syno
diskaction.tgz
DiskCompatibilityDB.tar
DSM_DS214play_25556.pat
FileStation-i686-1.2.8-0293.spk
hda1.tgz
indexdb.txz
LogCenter-i686-1.1.5-0129.spk
OAuthService-i686-1.0.4-0031.spk
rd.bin
RedBoot.msys
smartctl
strings
synofwupgrade
synohdpack_img.txz
Synology.sig
SynologyUniversalSearch-i686-1.5.1-0316.spk
updater
USBCopy-i686-2.1.1-0081.spk
VERSION
zImage
我的问题是:
1.pat 文件里面的 zImage 和 rd.bin 应该就是对应的 nor flash 分区中的 zImage 和 rd.gz 吧?
2.hda1.tgz 就是安装到硬盘中的第一个分区中 rootfs ,是吧?
3.ds214play 升级的时候,kernel ( nor flash 分区表中的 zImage ) ,ramdisk ( nor flash 分区表中的 rd.gz )也会升级吗?如果中途断电,会怎样?会不会升级 kernel 的时候,断电导致变砖?我似乎也没有看到群晖有什么双分区保险机制。还是群晖在 load kernel 之前的 bootloader 里面做了类似能够进制恢复模式的设计?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/1088480
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.