update3出来好几个月了,没时间试验,更没敢拿数据冒险,今天看了下帖子,发现已经有人无痛升级,那么我也试试吧。

  1. 以防万一,最好备份引导盘,我使用ESXI直接生成快照。然后进群晖,执行脚本任务:fixSynoboot.sh,这个是防止升级卡95%问题出现(升级update2的时候就出现了):下载fixSynoboot.sh文件(或者自己手动建一个,后缀改成.sh,代码放最后。),放置在黑裙共享文件夹中 ,在控制面板中->任务计划->新增 用户定义脚本:
    cp /volume1/mydata/FixSynoboot.sh /usr/local/etc/rc.d/FixSynoboot.sh chmod 755 /usr/local/etc/rc.d/FixSynoboot.sh
  2. 手动执行一次任务,然后重启黑群晖;
  3. 进入控制面板,升级,如果不能自动下载,就去官网手动下载更新包,下载地址:https://archive.synology.cn/download/Os/DSM/6.2.3-25426-3,下载更新补丁synology_apollolake_918+.pat;
  4. 手动更新,收工。

附上fixSynoboot.sh文件代码内容:

#!/bin/ash
# FixSynoboot() extracted from Jun 1.04b loader
# added hotplug-out event to gracefully clean up esata volumes 2020-Apr-18
# cleaned up share references in message log and root folder 2020-May-16

FixSynoboot()
{
if [ ! -e /dev/synoboot ]; then
  tail -n+3 /proc/partitions | while read major minor sz name
  do
    if echo $name | grep -q "^sd[[:alpha:]]*$";then
      basename=$name
      minor0=$minor
      synoboot1=""
      synoboot2=""
      continue
    fi
    if [ $name = "${basename}1" -a $sz -le 512000 ]; then
      synoboot1="$name"
      minor1=$minor
    elif [ $name = "${basename}2" -a $sz -le 512000 ]; then
      synoboot2="$name"
      minor2=$minor
    else
      continue
    fi
    if [ -n "$synoboot1" -a -n "$synoboot2" ]; then
      # begin hotplug event added
      if [ -e /sys/class/block/$basename ]; then
        port=$(synodiskport -portcheck $basename)
        df | grep "^/dev/$basename." | while read share; do
          share=$(echo $share | awk '{print $1,$NF}')
          sharedir=$(echo $share | awk '{print $2}')
          sharebase=$(echo $sharedir | awk -F\/ '{print $2}')
          sharedir=$(echo $sharedir | awk -F\/ '{print $3}')
          if ( synocheckshare --vol-unmounting $port $share ); then
            umount $(echo $share | awk '{print $1}')
            grep -v "^$share" /run/synostorage/volumetab >/tmp/volumetab
            mv /tmp/volumetab /run/synostorage/volumetab
            rm "/$sharebase/@eaDir/$sharedir/SYNO@.attr"
            find "/$sharebase" -empty -type d -delete 2>/dev/null
          fi
        done
        echo "remove" >/sys/class/block/$basename/uevent
      fi
      # end

      rm "/dev/$basename"
      rm "/dev/$synoboot1"
      rm "/dev/$synoboot2"
      rm "/dev/${basename}3"
      mknod /dev/synoboot b $major $minor0
      mknod /dev/synoboot1 b $major $minor1
      mknod /dev/synoboot2 b $major $minor2
      break
    fi
  done
fi
}

RUNAS="root"

case $1 in
    start)
    FixSynoboot
        exit 0
        ;;
    stop)
        exit 0
        ;;
    status)
        exit 0
        ;;
    log)
        exit 1
        ;;
    *)
        exit 1
        ;;
esac
如果觉得我的文章对你有用,请随意赞赏