DSM7下套件迁移

这篇具有很好参考价值的文章主要介绍了DSM7下套件迁移。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

重要提示:数据无价,进行任何操作前请妥善备份好数据

2023.08.01 更新v0.2

  1. 添加套件外部链接检测功能。
  • 提示:部分套件会链接到套件文件夹外部的文件(夹),迁移后一般还能正常运行,如果外部的文件(夹)在需要调整的存储空间上,你可能需要手动移动它们,同时修改对应的软链接。
  1. 增加显示特定存储空间上安装的套件清单功能。
  2. 增加对迁移目标存储空间的检测。

一、介绍

用于在Synology DSM7 中将套件迁移到不同的存储空间。

二、测试平台

所有功能在DS3615xs DSM 7.1.1-42962 Update 2中测试通过。

经测试的套件

  1. 官方套件
套件名 套件中心里的名称 迁移结果 备注
CloudSync Cloud Sync 正常 迁移后在设置中调整数据库位置
SynologyApplicationService Synology应用程序服务 正常
StorageAnalyzer 存储空间分析器 正常
Node.js_v12 Node.js v12 正常
SynologyPhotos Synology Photos 正常
LogCenter 日志中心 正常
  1. SynoCommunity套件
套件名 套件中心里的名称 迁移结果
transmission Transmission 正常
vim Vim 正常

三、原理

  1. 所有套件均安装在/var/packages目录,进入相应套件(以StorageAnalyzer为例)的目录可以看到,如图所示的结构:
    DSM7下套件迁移

其中"etc" “home” “target” “tmp” “var"目录链接到了对应存储空间的相应目录
2. 操作步骤:
1)复制原存储空间的目录到新存储空间;
2)修改"etc” “home” “target” “tmp” "var"链接到新存储空间。

四、使用说明

  1. 为避免数据丢失,操作前建议先停用要迁移的套件
    DSM7下套件迁移
  2. 执行sudo -i获得root权限。
  3. 创建transferpackage.sh脚本文件,内容如下。也可以执行wget https://gitee.com/kangzeru/dsm_-transferpackage/raw/master/transferpackage.sh直接下载脚本。 2023.08.01 更新v0.2
#!/bin/bash

# v0.2
# 1、添加套件外部链接检测功能
#    提示:部分套件会链接到套件文件夹外部的文件(夹),迁移后一般还能正常运行,如果外部的文件(夹)在需要调整的存储空间上,你可能需要手动移动它们,同时修改对应的软链接
# 2、增加显示特定存储空间上安装的套件清单功能
# 3、增加对迁移目标存储空间的检测

operation=$1


dir=("conf" "home" "store" "temp" "data")
link=("etc" "home" "target" "tmp" "var")


check_package () {
	echo 正在检测套件是否含有外部链接...
	check_result=0
	for l in "${link[@]}";
	do
		if [ -e /var/packages/$package/$l ]
		then
			for f in `find /var/packages/$package/$l/ -type l`
			do
				#ll=$(ls -l $f)
				#echo /${ll#*/}
				local k=0
				for ((j=0;j<=4;j++))
				do
				if [ -e /var/packages/$package/${link[$j]} ]
				then
					lk=$(ls -l /var/packages/$package/${link[$j]})
					# echo realpath1: `realpath -e --relative-base=${lk##* } $f`
					# echo realpath2: `realpath -e $f`
					if [ `realpath -e --relative-base=${lk##* } $f` = `realpath -e $f` ] 
					then
						# echo realpath1=realpath2
						((k=k+1))
					else
						# echo $f在${lk##* }目录下
						break
					fi
					if [ $k -eq 5 ]
					then
						check_result=1
						ll=$(ls -l $f)
						echo 有外部链接:/${ll#*/}
					fi
				else
					echo /var/packages/$package/${link[$j]} 不存在.
					exit
				fi
				
				done
		
			done
		else
			echo /var/packages/$package/$l 不存在.
			exit
		fi
	done
	if [ $check_result -eq 0 ]
	then
		echo 没有外部链接
	fi
}

check_answer () {
	local a=1
	while [ $a -ne 0 ]
		do
		read -n1 -p "是否继续迁移套件$package?[y/n]" answer
		case $answer in
			Y|y)
				a=0
				echo;;
			N|n)
				echo
				exit;;
		esac
	done
}

show_usage () {
	echo "使用方法:
	显示套件清单:
		transferpackage.sh list [存储空间编号]
		示例: transferpackage.sh list 显示所有安装的套件
		       transferpackage.sh list 2 显示所有安装在存储空间2上的套件
	迁移套件:
		transferpackage.sh transfer 套件名 目标存储空间编号
	检查套件外部链接:
		transferpackage.sh check 套件名
	显示本帮助:
		transferpackage.sh help"
}

case $operation in
	list)
		if [ $2 ]
		then
			synostgvolume --enum-dep-pkgs /volume$2
		else
			#package_list=$(ls /var/packages/ |tr -s " ")
			echo " 套件名 -- 套件中心显示的名称
-----------------------------"
			for a in `synopkg list --name`
			do
			if [ -e /var/packages/$a/INFO ]
			then
				package_name=$(cat /var/packages/$a/INFO | grep displayname_chs\= | grep -o '".*"' |sed 's/"//g')
				if [ -z "$package_name" ]
				then
					package_name=$(cat /var/packages/$a/INFO | grep displayname\= | grep -o '".*"' |sed 's/"//g')
				fi
				echo $a -- $package_name
			else
				echo $a -- /var/packages/$a/INFO 文件不存在.该套件可能已卸载.
			fi
			done
		fi
		;;
	transfer)
		if [ ! $2 ];then show_usage;exit;fi
		if [ ! $3 ];then show_usage;exit;fi
		package=$2
		new_volume=$3
		# 检测目标存储空间
		synostgvolume --is-writable /volume$new_volume 2>/dev/null
		if [ $? -eq 255 ];then echo 错误:目标存储空间不可用;exit;fi
		case `synopkg status $package | sed 's/^.*Status: \[//g' | sed 's/\].*//g'` in
			0)
				echo "检测到套件$package未停用,为避免出现未知错误建议先停用该套件再进行迁移."
				check_answer
				;;
			255)
				echo 套件$package未安装
				exit;;
			263)
				#echo 套件$package已停用
				;;
		esac
		# 检测外部链接
		check_package
		if [ $check_result -eq 1 ]
		then
			echo "套件$package存在以上外部链接,请根据需要手动迁移这些文件(夹)并修改相应链接."
			check_answer
		fi
		for ((i=0;i<=4;i++))
		do
		if [ -e /var/packages/$package/${link[$i]} ]
		then
			lk=$(ls -l /var/packages/$package/${link[$i]})
			original_lk=${lk##* }
			original_volume=${original_lk:7:1}
			if [ $new_volume -ne $original_volume ]
			then
				if [ ! -d /volume$new_volume/@app${dir[$i]} ]
				then
					mkdir /volume$new_volume/@app${dir[$i]}
					if [ $? -eq 0 ];then echo -e "添加文件夹 /volume$new_volume/@app${dir[$i]}...\e[0;32m完成\e[0m.";else echo -e "添加文件夹 /volume$new_volume/@app${dir[$i]}...\e[0;31m失败\e[0m.";exit;fi
				fi
				new_lk=$original_lk
				new_lk=${original_lk/$original_volume/$new_volume}
				cp -a $original_lk $new_lk
				if [ $? -eq 0 ];then echo -e "复制 $original_lk$new_lk...\e[0;32m完成\e[0m.";else echo -e "复制 $original_lk$new_lk...\e[0;31m失败\e[0m.";exit;fi
				ln -snf $new_lk /var/packages/$package/${link[$i]}
				if [ $? -eq 0 ];then echo -e "链接 $new_lk 到 /var/packages/$package/${link[$i]}...\e[0;32m完成\e[0m.";else echo -e "链接 $new_lk 到 /var/packages/$package/${link[$i]}...\e[0;31m失败\e[0m.";exit;fi
			else
				echo "目标存储空间与套件/var/packages/$package/${link[$i]}文件夹所在存储空间相同,无需迁移."
			fi
		else
			echo "/var/packages/$package/${link[$i]} 不存在."
			exit
		fi
		done
		;;
	check)
		if [ ! $2 ];then show_usage;exit;fi
		package=$2
		check_package
		;;
	help|*)
		show_usage
		;;
esac
  1. 执行chmod +x transferpackage.sh获得执行权限

  2. 执行./transferpackage.sh list
    显示所有套件目录,找到要迁移套件的目录名
    DSM7下套件迁移

  3. ./transferpackage.sh transfer [packagefolder_name] [targetvolume_num]
    例如:要把“存储空间分析器”套件迁移到存储空间2,则执行./transferpackage.sh transfer StorageAnalyzer 2
    DSM7下套件迁移

  4. 查看迁移结果
    DSM7下套件迁移文章来源地址https://www.toymoban.com/news/detail-496722.html

到了这里,关于DSM7下套件迁移的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最好用的BT下载工具Qbittorrent ~群晖DSM7.0 Docker如何安装QB

    qBittorrent是我非常非常非常喜欢的一款BT下载工具,纯净无广告,快速。有win、mac、Linux、Docker版,按你需求下载 官网地址 https://www.qbittorrent.org/ 这是Windows版的截图 最新版本QT6 V4.4.2 我现在用的系统是Windows11,完美兼容 这边还有个小技巧 先到Github下载最新的Trackers ,有了最

    2024年02月05日
    浏览(67)
  • [黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程

    鉴于网上几乎没有志强cpu安装的教程,我走了相当多的弯路,不一定适合你的cpu,但是有一些小问题的解决办法,可能提供你解决思路,为了帮助更多的人能更快安装上故出此教程。 ** 我也是受到了很多帖子的帮助,结尾会挂上链接 之前使用的是j1900做了ddns映射,发现了好

    2023年04月24日
    浏览(45)
  • 群晖DSM下套件及系统网页服务器ssl证书自动更新

    : DSM ssl  证书 群晖下自建服务(alist3)和系统服务在外部网络访问需要加ssl安全证书来实现基础的传输保护。 申请证书和续期手动操作都还好,不算太麻烦,但是每个应用单独证书需要复制和重启,再配合服务重启一套下来就比较麻烦了,于是有了这篇文章和末尾的

    2024年02月10日
    浏览(56)
  • 以猫盘为例,手把手教你怎么在群晖DSM7.2正式版ARM64机型中安装Container Manager (Docker)

    系统版本没有问题之后,我们就可以开始安装Container Manager (Docker)了。 👉安装前的准备: 🔺正式安装之前我们先去群晖官网下载Container Manager (Docker)的离线安装包。为什么需要下载离线安装包?因为我们直接在套件中心是搜索不到了,所以也无法通过套件中心来安装。 🔺打

    2024年02月12日
    浏览(46)
  • 黑群晖从入门到入土,自编译适合自己硬件的黑群晖7.1.x引导(黑群晖DSM7.X引导用arpl编译教程)

    没啥好说的,只需要感谢在GitHub上开源代码的巴西老哥就好,好了废话不多说直接开始。 一个完成硬件安装的nas 下载arpl镜像,截止目前最新版是v1.0-beta3,这个可以增加进入系统的速度 写盘功能具:rufus、img写盘工具 两个u盘,一个用来制作PE,一个用来做引导盘,我用的是

    2023年04月08日
    浏览(56)
  • 群晖docker套件迁移

    某天突然收到消息提示群晖的存储空间1出现磁盘故障。但是试了下功能都还正常,就拖拖拉拉了几天,才开始着手迁移,避免进一步硬盘彻底完蛋。   存储空间1这块硬盘放了所有安装的套件,包括docker套件及docker套件的容器等文件,主要是这部分的迁移比较麻烦,其他的图

    2024年02月10日
    浏览(51)
  • 保护你无价的数据 | 推荐一个开源备份工具,可去重、增量、压缩、还原到特定日期...

    Borg 的优势是 高效: BorgBackup 会将文件按数据块去重,只有改动的数据块才会被备份。 一个 25 GiB 的虚拟机磁盘文件,只改动了 1 GiB,那就只会新增备份这 1 GiB 的数据; 高速: 核心算法使用 C 编译,使用缓存快速跳过未改动过的文件以加快备份速度; 加密: 数据默认是

    2024年02月05日
    浏览(41)
  • django添加数据库字段进行数据迁移

    1.修改view.py里面的变量 2.在model.py新增字段 3.打开terminal并将环境切到项目所在环境,切换方式为 4.执行命令

    2024年02月09日
    浏览(46)
  • 迁移更新EF Core 中的sqlserver 数据库提示0x80131904

    Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)  --- System.ComponentModel.Win32Exception (0x80090325): 证书链是由不受信任的颁发机构颁发的

    2024年02月16日
    浏览(39)
  • 使用DataX对MySQL 8.1进行数据迁移

    这里采用直接下载的方式:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz,不过这个包是真的有点大。 Python下载地址:https://www.python.org/downloads/ 安装的时候添加到PATH,这样后面不用再配置环境变量。 安装完成之后验证下: DataX中可以给咱们生成示例的脚本: 比如

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包