诺甘农圆盘

参考资料收集库

用户工具

站点工具


synology:插件整体迁移脚本

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

synology:插件整体迁移脚本 [2020/10/31 10:02] – 创建 packingboxsynology:插件整体迁移脚本 [2025/12/27 16:45] (当前版本) packingbox
行 1: 行 1:
 +===== 插件和系统数据库整体迁移到新的存储空间 =====
 +
 +有时需要更换硬盘,首先建立不同的存储空间,然后把插件和系统数据迁移过去,在删除原有的存储空间,关机拔掉硬盘。
 +
 +下面就是一次性整体迁移的脚本。
 +
 +<code bash move_syno_pkgs.sh>
 +#!/bin/bash
 +SOURCE=/volume1
 +DEST=/volume2
 +
 +APPDIR=\@appstore
 +
 +ASK=true
 +
 +while getopts ":y" opt; do
 +  case $opt in
 +    y)
 +   ASK=false
 +   ;;
 + \?)
 +   echo "Invalid option: -$OPTARG" >&2
 +   exit 1
 +   ;;
 +  esac
 +done
 +
 +echo "This will move packages from $SOURCE to $DEST"
 +echo ""
 +
 +if [ ! -d $DEST/$APPDIR ]; then
 +  mkdir $DEST/$APPDIR
 +  chmod 777 $DEST/$APPDIR
 +  echo "New app directory created"
 +fi
 +
 +echo "Searching for packages on $SOURCE..."
 +
 +for d in /var/packages/*
 +do
 +  [ -d "$d" ] || continue
 +  app=$(basename $d)
 +  symlink=$d/target
 +
 +  if [ ! -e "$symlink" ]; then 
 +    echo "$app has no symlink"
 + continue
 +  fi
 +
 +  if [ ! -e "$SOURCE/$APPDIR/$app" ]; then
 +    echo "$app is not in source directory"
 + continue
 +  fi
 +
 +  if [ ! "$(readlink $symlink)" -ef "$SOURCE/$APPDIR/$app" ]; then
 +    echo "$app: Symlink doesn't point to source directory"
 + continue
 +  fi
 +
 +  echo "Found $app"
 +
 +  file_warnings=$(find $d -type f -exec grep -l "$SOURCE" {} \;)
 +  if [ ! -z $file_warnings ]; then
 +    echo "Be careful!"
 + echo "The following files contain '$SOURCE':"
 + echo "$file_warnings"
 +  fi
 +
 +  if $ASK; then
 +    read -s -p "`echo $'\t'`Move $app? (y/n)`echo $'\n \b'`" -n 1 -r
 +    [[ $REPLY =~ ^[Yy]$ ]] || continue
 +    echo ""
 +  fi
 +
 +  echo "`echo $'\t'`Moving $app..." 
 +  synopkgctl stop $app
 +  cp -rp $SOURCE/$APPDIR/$app $DEST/$APPDIR/
 +  rm -f $symlink
 +  ln -s $DEST/$APPDIR/$app $symlink
 +  mv $SOURCE/$APPDIR/$app $SOURCE/$APPDIR/__$app
 +  synopkgctl start $app
 +  echo "`echo $'\t'`Done. Backup in: $SOURCE/$APPDIR/__$app"
 +  echo ""
 +done
 +
 +echo "Done for all."
 +echo ""
 +
 +echo "If you want to remove $SOURCE you should also move the following:"
 +echo ""
 +
 +for f in /var/services/*
 +do
 +  [ -L $f ] || continue
 +  target=$(readlink $f)
 +  if echo "$target" | grep -q $SOURCE; then
 +    echo "System service symlink $f to $target"
 +  fi
 +done
 +</code>
 +
 + 参考链接:https://gist.github.com/nobodypb/fc3e70b535bcd95b5de7659d6fbda434?permalink_comment_id=2040120
 +
  
synology/插件整体迁移脚本.txt · 最后更改: packingbox