目录
一、介绍
用于在Synology DSM7 中将套件迁移到不同的存储空间。
二、测试平台
所有功能在DS3615xs DSM 7.1.1-42962 Update 2中测试通过。
经测试的套件
官方套件
套件目录名套件名称迁移结果备注CloudSyncCloud Sync正常迁移后在设置中调整数据库位置SynologyApplicationServiceSynology应用程序服务正常StorageAnalyzer存储空间分析器正常Node.js_v12Node.js v12正常SynologyPhotosSynology Photos正常LogCenter日志中心正常SynoCommunity套件
套件目录名套件名称迁移结果transmissionTransmission正常vimVim正常三、原理
所有套件均安装在/var/packages目录,进入相应套件(以StorageAnalyzer为例)的目录可以看到,如图所示的结构:
其中"etc" “home” “target” “tmp” “var"目录链接到了对应存储空间的相应目录
2. 操作步骤:
1)复制原存储空间的目录到新存储空间;
2)修改"etc” “home” “target” “tmp” "var"链接到新存储空间。
四、使用说明
- 为避免数据丢失,操作前建议先停用要迁移的套件
- 执行
sudo -i
获得root权限。 - 创建
transferpackage.sh
脚本文件,内容如下。也可以执行wget https://gitee.com/kangzeru/dsm_-transferpackage/raw/master/transferpackage.sh
直接下载脚本。
#!/bin/bashoperation=$1package=$2new_volume=$3case$operationin
list)package_list=$(ls /var/packages/ |tr -s " ")echo" Folder name -- Package name
-----------------------------"forain$package_list;doif[ -e /var/packages/$a/INFO ]thenpackage_name=$(cat /var/packages/$a/INFO |grep displayname_chs\=|grep -o '".*"'|sed's/"//g')if[ -z "$package_name"]thenpackage_name=$(cat /var/packages/$a/INFO |grep displayname\=|grep -o '".*"'|sed's/"//g')fiecho$a -- $package_nameelseecho$a -- /var/packages/$a/INFO does not exist.The package may be uninstalled.
fidone;;
transfer)dir=("conf""home""store""temp""data")link=("etc""home""target""tmp""var")for((i=0;i<=4;i++))doif[ -e /var/packages/$package/${link[$i]}]thenlk=$(ls -l /var/packages/$package/${link[$i]})original_lk=${lk##* }original_volume=${original_lk:7:1}if[$new_volume -ne $original_volume]thenif[! -d /volume$new_volume/@app${dir[$i]}]thenmkdir /volume$new_volume/@app${dir[$i]}if[$? -eq 0];thenecho"Creat directory /volume$new_volume/@app${dir[$i]}...Done.";elseecho"Creat directory /volume$new_volume/@app${dir[$i]}...Failed.";exit;fifinew_lk=$original_lknew_lk=${original_lk/$original_volume/$new_volume}cp -a $original_lk$new_lkif[$? -eq 0];thenecho"Copy $original_lk to $new_lk...Done.";elseecho"Copy $original_lk to $new_lk...Failed.";exit;filn -snf $new_lk /var/packages/$package/${link[$i]}if[$? -eq 0];thenecho"Link $new_lk to /var/packages/$package/${link[$i]}...Done.";elseecho"Link $new_lk to /var/packages/$package/${link[$i]}...Failed.";exit;fifielseecho /var/packages/$package/${link[$i]} does not exist.
exitfidone;;help|*)echo"Usage: $0 list|transfer [packagefolder_name] [targetvolume_num]";;esac
- 执行
chmod +x transferpackage.sh
获得执行权限 - 执行
./transferpackage.sh list
显示所有套件目录,找到要迁移套件的目录名 ./transferpackage.sh transfer [packagefolder_name] [targetvolume_num]
例如:要把“存储空间分析器”套件迁移到存储空间2,则执行./transferpackage.sh transfer StorageAnalyzer 2
- 查看迁移结果
版权归原作者 kangzeru 所有, 如有侵权,请联系我们删除。