2023年11月24日发(作者:)

⿊群晖各种问题修正(⿊裙洗⽩、⿊裙休眠、硬盘顺序)

洗⽩

要修改MAC/SN

,需要修改启动配置⽂件,有两种⽅法:

直接PE启动,然后加载ssd第⼀个分区就能找到⽂件

SSH在线修改

个⼈觉得SSH在线修改更⽅便,具体操作如下:

⾸先应明⽩洗⽩是否必要,洗⽩有两个作⽤,⼀是可以使⽤QuickConnect;⼆是可以使⽤Video Station解码。洗⽩需要找到正确的MACS/N码,⾄于其来源有各种途径,⼀是有算号器;⼆是利⽤退换货政策的漏洞。但是有

1. 开放SSH端⼝

在控制⾯板⾥⾯–>终端机和SNMP,启动SSH功能.

2. SSH⼯具挂载synoboot1分区

ssh⼯具如putty连接到群晖的ip地址,⽤创建群晖的管理⽤户登陆.

例如,⽤户名:admin 密码 123456

输⼊如下命令:

1 sudo -i //获取root超级权限

2 mkdir -p /tmp/boot ///tmp⽬录下创建⼀个临时⽬录,名字随意,如:boot

3 cd /dev //切换到dev⽬录

4 mount -t vfat synoboot1 /tmp/boot/ //synoboot1 分区挂载到boot

5 cd /tmp/boot/grub //切换到grub⽬录

6 vim //修改⽂件

按键盘上的 i (⼩写状态),进⼊⽂档编辑模式,此时就可以输⼊新的SN,MAC1的新值,删除旧值.

修改完成后.

按键盘上的Esc,返回到命令模式,输⼊:wq,然后回车保存并退出.如果修改乱了,想不保存并退出,则是输⼊:q,然后回车.

此时可以再 vi 进去看看是否修改成功.

最后重启主机即可:

1 reboot

硬盘显⽰

针对问题2,硬盘盘符乱,这款B款蜗⽜有两个SATA控制器,6SATA接⼝(包含⼀个mSATA接⼝).处理器控制2个能引导的接⼝(内存旁边的⼀个和mSATA),板载控制器

控制4个硬盘架的接⼝但不能引导.

1. 硬盘位的顺序

装好DSM后硬盘顺序应该是处理器控制的两个接⼝在前(假设为12),控制硬盘架上的四个接⼝在后(假设为3456).所以只要是放在硬盘架上的硬盘在DSM都会标识在3号到

6号盘之间.

若需要将硬盘架上的顺序改为1234号标识,可以修改引导盘⾥的配置⽂件来实现.

修改盘序号需要在extra_args_918变量⾥增加两个值SataPortMap=24DiskIdxMap=0400.

:

1 # /grub/

2 # 从第31⾏开始

3 ......

4 set extra_args_918='SataPortMap=24 DiskIdxMap=0400' #将两项加在这后⾯

5

6 set common_args_918='syno_hdd_powerup_seq=0 HddHotplug=0 syno_hw_version=DS918+ vender_format_version=2 console=ttyS0,115200n8 withefi elevator=elevator quiet syno_port_thaw=1'

7 # for testing on VM

8 set sata_args='SataPortMap=1'

9 ......

修改完成后保存重启,我的硬盘是从左⾄右放在左边两个盘位中的所以是3号和4号位.

如果盘位顺序还是有误,需要把主板连接的SATA物理更换⼀下,交换位置就正常了.

简单解释下这两个值:

具体的含义可以参考此处的第229⾏和249:

1 SataPortMap=24

配置系统有两个SATA控制器,第⼀个控制器有2个接⼝,第⼆个控制器有4个接⼝.

1 DiskIdxMap=0400

将第⼀个SATA控制器的接⼝序号设置为从5开始,第⼆个SATA控制器的接⼝号从1开始(0400都为16进制).

2. SSD引导后隐藏启动盘

直接把启动镜像写⼊到mSATA盘⾥⾯,存储空间管理员⾥⾯会有⼀个14G左右的盘始于未使⽤状态,就是mSATA盘⾥除开启动分区后的剩余空间,像下⾯⼀样:

可以将其初始化并利⽤起来,14G的空间利⽤起来也没什么价值,且本来⾃带的SSD就很弱,⽤来存资料也有⼀定崩盘的风险.为了防⽌看着碍眼,可以⽤上⾯的⽅法把这个盘隐藏掉.

还是需要通过修改引导盘⾥的配置⽂件来实现.

需要在sata_args变量⾥增加DiskIdxMap=1000这个值,且在启动时选择第三项启动项(VMware/ESXI)启动.

:

1 # /grub/

2 # 从第31⾏开始

3 ......

4 set extra_args_918=''

5

6 set common_args_918='syno_hdd_powerup_seq=0 HddHotplug=0 syno_hw_version=DS918+ vender_format_version=2 console=ttyS0,115200n8 withefi elevator=elevator quiet syno_port_thaw=1'

7 # for testing on VM

8 set sata_args='SataPortMap=24 DiskIdxMap=1000'# 将两项加在这后⾯(1000都为16进制)

9 ......

3. 信息中⼼显⽰的处理器的型号

装好DSM系统以后,信息中⼼显⽰的是⽩群晖机器的处理器信息,⽐如DS3617系统就显⽰的是Xeon D处理器的信息,很明显是直接写死的.

下载ch_cpuinfo_在电脑上,

通过FileStation将下载好的⽂件上传到DSM

Putty或者其他SSH⼯具连接上DSM

SSH⼯具中操作

1 # 切换到root账户;

2 sudo -i

3

4 # 打开ch_⽂件所在⽬录;

5 cd /volume1/tmp

6

7 # 解压ch_⽂件;

8 tar xvf ch_

9

10 # 运⾏ch_cpuinfo⽂件;

11 ./ch_cpuinfo

12

13 # 运⾏后,按“1”选择“First Run”,再按“y”键;

14

15 # 关闭SSH⼯具,重新登陆后信息中⼼显⽰J1900信息;

休眠

1. 打开休眠调试⽇志

这个选项藏得⽐较深,在左上⾓菜单技术⽀持中⼼左边技术⽀持服务启动系统休眠调试模式

2. 等待触发休眠问题

保持 NAS 空闲到设定的时间即可.记得把 NAS 的⽹页和各种客户端都关掉,不然接下来的⽇志可能会很长没法分析.我⾃⼰是在睡觉之前打开⽇志,起来分析.睡觉的时候除了 NAS

和路由器就没有其他设备开机了,⽇志很准确.

3. 分析⽇志

会产⽣两份⽇志,分别是 /var/log/ /var/log/. 后者是原始数据,前者是去除了⼀些⽆价值连锁性操作的精简版,但它有的时候会精简过头,所以我

这⾥以后者为例来分析.

⾸先,将脏块写⼊磁盘的⽇志⼿动排除掉.通常内核不会⾃发进⾏⼤量的磁盘操作,⼤多数 write block 是⽤户态 dirty block 导致的结果,因此可以把包含 WRITE block sync 的⾏删

,节省⼤量的版⾯.

其次,将⾮硬盘的写⼊排除掉.将包含 on tmpfs on proc 的⾏删除即可,剩下的⾮硬盘⽂件系统⾁眼忽略.

剩下的条⽬可以进⼊分析了.⽐如我这⾥在午睡时每段记录都差不多是这个样⼦:

1 ***********Clear*********

2 [140146.388709] btsync(15253): dirtied inode 11404 () on md2

3 [140146.388721] btsync(15253): dirtied inode 11404 () on md2

4 [140146.388723] btsync(15253): dirtied inode 11404 () on md2

5 [140151.820668] syno_hibernatio(25655): dirtied inode 5885 () on md0

6 [140151.820682] syno_hibernatio(25655): dirtied inode 5885 () on md0

7 [140151.820684] syno_hibernatio(25655): dirtied inode 5885 () on md0

8 [140152.332689] syno_hibernatio(25655): dirtied inode 5348 () on md0

9 [140152.332696] syno_hibernatio(25655): dirtied inode 5348 () on md0

10 [140152.332698] syno_hibernatio(25655): dirtied inode 5348 () on md0

11 [140153.783855] btsync(15253): dirtied inode 11404 () on md2

12 [140153.783870] btsync(15253): dirtied inode 11404 () on md2

13 [140153.783872] btsync(15253): dirtied inode 11404 () on md2

14 [140170.602870] synologrotated(4963): dirtied inode 28083 (.SYNOSYSDB-wal) on md0

15 [140170.602888] synologrotated(4963): dirtied inode 29789 (.SYNOSYSDB-shm) on md0

16 [140170.603221] synologrotated(4963): dirtied inode 21538 (.SYNOCONNDB-wal) on md0

17 [140170.603235] synologrotated(4963): dirtied inode 22044 (.SYNOCONNDB-shm) on md0

18 [140173.443684] syno_hibernatio(25655): dirtied inode 5885 () on md0

19 [140173.443696] syno_hibernatio(25655): dirtied inode 5885 () on md0

20 [140173.443698] syno_hibernatio(25655): dirtied inode 5885 () on md0

21 [140173.955999] syno_hibernatio(25655): dirtied inode 5348 () on md0

22 [140173.956006] syno_hibernatio(25655): dirtied inode 5348 () on md0

23 [140173.956009] syno_hibernatio(25655): dirtied inode 5348 () on md0

24 [140272.465248] btsync(15253): dirtied inode 11404 () on md2

25 [140272.465265] btsync(15253): dirtied inode 11404 () on md2

26 [140272.465267] btsync(15253): dirtied inode 11404 () on md2

27 [140278.386378] syno_hibernatio(25655): dirtied inode 5885 () on md0

28 [140278.386390] syno_hibernatio(25655): dirtied inode 5885 () on md0

29 [140278.386393] syno_hibernatio(25655): dirtied inode 5885 () on md0

30 [140278.898561] syno_hibernatio(25655): dirtied inode 5348 () on md0

31 [140278.898569] syno_hibernatio(25655): dirtied inode 5348 () on md0

32 [140278.898571] syno_hibernatio(25655): dirtied inode 5348 () on md0

33 [140631.564198] btsync(15253): dirtied inode 11404 () on md2

34 [140631.564209] btsync(15253): dirtied inode 11404 () on md2

35 [140631.564211] btsync(15253): dirtied inode 11404 () on md2

36 [140637.298101] syno_hibernatio(25655): dirtied inode 5885 () on md0

37 [140637.298113] syno_hibernatio(25655): dirtied inode 5885 () on md0

38 [140637.298115] syno_hibernatio(25655): dirtied inode 5885 () on md0

39 [140637.811061] syno_hibernatio(25655): dirtied inode 5348 () on md0

40 [140637.811068] syno_hibernatio(25655): dirtied inode 5348 () on md0

41 [140637.811071] syno_hibernatio(25655): dirtied inode 5348 () on md0

42 [141346.340822] btsync(15253): dirtied inode 11404 () on md2

43 [141346.340833] btsync(15253): dirtied inode 11404 () on md2

44 [141346.340836] btsync(15253): dirtied inode 11404 () on md2

45 [141351.508216] syno_hibernatio(25655): dirtied inode 5885 () on md0

46 [141351.508226] syno_hibernatio(25655): dirtied inode 5885 () on md0

47 [141351.508228] syno_hibernatio(25655): dirtied inode 5885 () on md0

48 [141352.021228] syno_hibernatio(25655): dirtied inode 5348 () on md0

49 [141352.021235] syno_hibernatio(25655): dirtied inode 5348 () on md0

50 [141352.021238] syno_hibernatio(25655): dirtied inode 5348 () on md0

51 [141352.494749] btsync(15253): dirtied inode 11404 () on md2

52 [141352.494758] btsync(15253): dirtied inode 11404 () on md2

53 [141352.494760] btsync(15253): dirtied inode 11404 () on md2

54 [141371.039633] synologrotated(4963): dirtied inode 28083 (.SYNOSYSDB-wal) on md0

55 [141371.039654] synologrotated(4963): dirtied inode 29789 (.SYNOSYSDB-shm) on md0

56 [141371.039992] synologrotated(4963): dirtied inode 21538 (.SYNOCONNDB-wal) on md0

57 [141371.040007] synologrotated(4963): dirtied inode 22044 (.SYNOCONNDB-shm) on md0

58 [141377.244527] syno_hibernatio(25655): dirtied inode 5885 () on md0

59 [141377.244539] syno_hibernatio(25655): dirtied inode 5885 () on md0

60 [141377.244541] syno_hibernatio(25655): dirtied inode 5885 () on md0

61 [141377.757046] syno_hibernatio(25655): dirtied inode 5348 () on md0

62 [141377.757054] syno_hibernatio(25655): dirtied inode 5348 () on md0

63 [141377.757056] syno_hibernatio(25655): dirtied inode 5348 () on md0

64 [141535.911703] dhclient(16778): dirtied inode 19635 (sh) on md0

65 [141535.911717] dhclient(16778): dirtied inode 19626 (bash) on md0

66 [141535.911909] dhclient-script(16778): dirtied inode 14958 (.5) on md0

67 [141535.911917] dhclient-script(16778): dirtied inode 13705 (.5.9) on md0

68 [141535.914460] awk(16782): dirtied inode 13819 (.6) on md0

69 [141535.914470] awk(16782): dirtied inode 11177 () on md0

70 [141542.431766] syno_hibernatio(25655): dirtied inode 5885 () on md0

71 [141542.431778] syno_hibernatio(25655): dirtied inode 5885 () on md0

72 [141542.431781] syno_hibernatio(25655): dirtied inode 5885 () on md0

73 [141542.944314] syno_hibernatio(25655): dirtied inode 5348 () on md0

74 [141542.944322] syno_hibernatio(25655): dirtied inode 5348 () on md0

75 [141542.944324] syno_hibernatio(25655): dirtied inode 5348 () on md0

76 [142073.169495] btsync(15253): dirtied inode 11404 () on md2

77 [142073.169512] btsync(15253): dirtied inode 11404 () on md2

78 [142073.169515] btsync(15253): dirtied inode 11404 () on md2

79 [142078.947137] syno_hibernatio(25655): dirtied inode 5885 () on md0

从⽇志来看,上⾯的操作是有效的,硬盘终于能进⼊休眠了,出现了很多“Internal disks woke up from hibernation”.但是这每半⼩时⼀条,相当于休眠没⼏秒⼜被唤醒了.

于是继续分析休眠⽇志:

1 ***********Clear*********

2 [236666.547745] syslog-ng(4331): dirtied inode 18 () on md0

3 [236687.650564] syslog-ng(13085): dirtied inode 18 () on md0

4 [236687.650585] syslog-ng(13085): dirtied inode 18 () on md0

5 [236687.650592] syslog-ng(13085): dirtied inode 18 () on md0

6 [236687.658884] syslog-ng(5016): dirtied inode 28581 (.SYNOSYSDB-shm) on md0

7 [236687.658893] syslog-ng(5016): dirtied inode 28581 (.SYNOSYSDB-shm) on md0

8 [236687.658946] syslog-ng(5016): dirtied inode 24584 (.SYNOSYSDB-wal) on md0

9 [236687.658952] syslog-ng(5016): dirtied inode 24584 (.SYNOSYSDB-wal) on md0

10 [236687.658954] syslog-ng(5016): dirtied inode 24584 (.SYNOSYSDB-wal) on md0

11 [236687.664164] logrotate(13090): dirtied inode 41594 (synolog) on md0

12 [236687.666146] logrotate(13090): dirtied inode 6900 () on md0

13 [236687.671082] logrotate(13090): dirtied inode 7905 () on md0

30 ***********Clear*********

31 [238522.209123] synologrotated(5000): dirtied inode 24584 (.SYNOSYSDB-wal) on md0

32 [238522.209173] synologrotated(5000): dirtied inode 28581 (.SYNOSYSDB-shm) on md0

33 [238522.210082] synologrotated(5000): dirtied inode 23485 (.SYNOCONNDB-wal) on md0

34 [238522.210122] synologrotated(5000): dirtied inode 24677 (.SYNOCONNDB-shm) on md0

35 [238522.224252] logrotate(19321): dirtied inode 41594 (synolog) on md0

36 [238522.229880] logrotate(19321): dirtied inode 7905 () on md0

37 [238522.244528] logrotate(19321): dirtied inode 6900 () on md0

38 [238531.967854] syslog-ng(19324): dirtied inode 18 () on md0

39 [238531.967874] syslog-ng(19324): dirtied inode 18 () on md0

40 [238531.967882] syslog-ng(19324): dirtied inode 18 () on md0

41 [238531.990488] logrotate(19329): dirtied inode 6900 () on md0

42 [238533.979174] synologaccd(4840): dirtied inode 22952 (.SYNOACCOUNTDB) on md0

43 [238533.979348] synologaccd(4840): dirtied inode 7905 (.SYNOACCOUNTDB-wal) on md0

44 [238533.979378] synologaccd(4840): dirtied inode 21526 (.SYNOACCOUNTDB-shm) on md0

45 [238534.076345] synologaccd(4840): dirtied inode 22952 (.SYNOACCOUNTDB) on md0

46 [238534.076385] synologaccd(4840): dirtied inode 22952 (.SYNOACCOUNTDB) on md0

47 [240368.320927] syslog-ng(4331): dirtied inode 18 () on md0

48 uptime : [240374.147000]

49 ======Idle 1811 seconds======

50 Wed Oct 24 04:23:02 CST 2018

synocrond:听起来像是任务计划程序,⾥⾯有个 DSM ⾃动更新检查,触发频率不⾼,应该不太影响

builtin-synodat:不知道是什么

logrotate:⼤概也是个⽇志程序

synologaccd:继续是⽇志程序

syslog-ng:我也不知道为什么群晖有那么多⽇志管理程序

单次⽇志看不出来什么,但是连着好⼏块都符合刚⼀休眠就被唤醒(空闲时间是设定的 30 分钟加⼗⼏秒),且最后⼀条都是对 (/var/log/) 的写⼊。这就有点意思了,打开看看

⾥⾯是什么:

1 2018-10-24T07:00:13+08:00 Hamster-DS scemd: led/led_brightness.c:244 Fail to read /usr/sbin/i2cget

2 2018-10-24T07:00:13+08:00 Hamster-DS scemd: led.c:35 SYNOGetLedBrightness fail()

3 2018-10-24T07:00:34+08:00 Hamster-DS scemd: event_disk_hibernation_handler.c:42 The internal disks wake up, hibernate from [Oct 24 07:00:11]

4 2018-10-24T07:31:09+08:00 Hamster-DS scemd: led/led_brightness.c:244 Fail to read /usr/sbin/i2cget

5 2018-10-24T07:31:09+08:00 Hamster-DS scemd: led.c:35 SYNOGetLedBrightness fail()

6 2018-10-24T07:31:30+08:00 Hamster-DS scemd: event_disk_hibernation_handler.c:42 The internal disks wake up, hibernate from [Oct 24 07:31:07]

7 2018-10-24T08:01:53+08:00 Hamster-DS scemd: led/led_brightness.c:244 Fail to read /usr/sbin/i2cget

8 2018-10-24T08:01:53+08:00 Hamster-DS scemd: led.c:35 SYNOGetLedBrightness fail()

9 2018-10-24T08:02:14+08:00 Hamster-DS scemd: event_disk_hibernation_handler.c:42 The internal disks wake up, hibernate from [Oct 24 08:01:53]

10 2018-10-24T08:32:37+08:00 Hamster-DS scemd: led/led_brightness.c:244 Fail to read /usr/sbin/i2cget

11 2018-10-24T08:32:37+08:00 Hamster-DS scemd: led.c:35 SYNOGetLedBrightness fail()

12 2018-10-24T08:32:59+08:00 Hamster-DS scemd: event_disk_hibernation_handler.c:42 The internal disks wake up, hibernate from [Oct 24 08:32:37]

清晰地表明了这就是休眠后⽴即唤醒的原因:由于⿊群没有 I2C 设备,于是 DSM 在休眠后尝试更改 LED 亮度(或者颜⾊、闪烁规律?)时读取 i2c 设备节点就会出错,scemd 把这条

错误信息记到⾃⼰的⽇志⾥,触发了硬盘写⼊,硬盘就在休眠⼗⼏秒后被唤醒了.

4. 修复

根本上修复的话,得硬件上 I2C 适配器,甚⾄还能顺便给⿊群加上⽩群的那么多灯.但这是不现实的,那么我们就只能采取主流⽅法:解决提出问题的⽇志.预想⽅案是把这个⽇志⽂件

指向内存, scemd 往内存⾥写,就不会唤醒硬盘了.

找到⽂件:

1 vim /ts/syslog-ng/patterndb.d/

修改

1 destination d_scemd { file("/var/log/"); };

2

3 destination d_scemd { file("/tmp/"); };

重启系统即可完美休眠.

本⽂来源于互联⽹,经过作者验证后发布,收藏作为后期查阅使⽤。