609
文章
·
166678
阅读
609
文章
·
166678
阅读

有29人阅读过 将群晖已安装的套件从一个储存空间移动到另一个储存空间
发布于2025/10/22 更新于2025/10/23
[ 教程仅保证更新时有效,请自行测试。]

脚本:

mvSPK.sh


9ff0af70a92b568f668d539dd388754b.png

a7f5a363f9234bfd6f49b7a3f1166cd7.png

135606f89d51f27d83c390deeb9fd37e.png

da6b618984b2f845971c20711283dd71.png

适用于DSM7的大部分套件,如移动后提示需要修复,手动修复一下

脚本代码如下:

#!/bin/bash

i=1
printf "%-4s %-30s %-10s\n" "序号" "目录名" "所在卷"
printf "%-4s %-30s %-10s\n" "----" "------------------------------" "----------"

# 临时保存所有路径的数组
declare -a paths

for path in /volume*/@appstore/*; do
    dir_name=$(basename "$path")
    vol_name=$(echo "$path" | awk -F'/' '{print $2}')
    printf "%-4d %-30s %-10s\n" "$i" "$dir_name" "$vol_name"
    paths[$i]="$path"
    i=$((i+1))
done

echo
read -p "请输入要移动套件的序号: " sel

# 校验输入是否有效
if [[ ! "$sel" =~ ^[0-9]+$ ]] || [ -z "${paths[$sel]}" ]; then
    echo "❌ 无效的序号,请重新运行脚本。"
    exit 1
fi

# 提取目录名与卷名
appname=$(basename "${paths[$sel]}")
vol_from=$(echo "${paths[$sel]}" | awk -F'/' '{print $2}')

echo "✅ 已选择:"
echo "要移动的套件:$appname"
echo "所在卷:$vol_from"

echo
read -p "请输入目标卷号(例如输入 2 表示 volume2): " vol_num

# 校验卷号输入
if [[ ! "$vol_num" =~ ^[0-9]+$ ]]; then
    echo "❌ 无效的卷号,请输入数字。"
    exit 1
fi

vol_to="volume${vol_num}"

echo
echo "✅ 准备移动到:"
echo "$vol_to"

echo
read -p "确认执行 Y/y: " confirm

if [[ "$confirm" == "Y" || "$confirm" == "y" ]]; then
    echo "✅ 已确认,继续执行..."
    # 在这里写你要执行的命令
else
    echo "❌ 操作已取消。"
    exit 1
fi

mkdir -p /$vol_to/@appstore /$vol_to/@appshare /$vol_to/@apphome /$vol_to/@appdata /$vol_to/@appconf

# 停止套件
synopkg stop $appname

# 移动目录
mv /$vol_from/@appstore/$appname /$vol_to/@appstore/
mv /$vol_from/@appshare/$appname /$vol_to/@appshare/
mv /$vol_from/@apphome/$appname /$vol_to/@apphome/
mv /$vol_from/@appdata/$appname /$vol_to/@appdata/
mv /$vol_from/@appconf/$appname /$vol_to/@appconf/
mv /$vol_from/@apptemp/$appname /$vol_to/@apptemp/

# 删除指向旧应用程序路径的过时符号链接
rm -fv /var/packages/$appname/target
rm -fv /var/packages/$appname/var
rm -fv /var/packages/$appname/tmp
rm -fv /var/packages/$appname/share
rm -fv /var/packages/$appname/home
rm -fv /var/packages/$appname/etc

# 创建指向新的、正确的应用程序路径的新 Sim 链接。
ln -s /$vol_to/@appstore/$appname /var/packages/$appname/target
ln -s /$vol_to/@appdata/$appname /var/packages/$appname/var
ln -s /$vol_to/@apptemp/$appname /var/packages/$appname/tmp
ln -s /$vol_to/@appshare/$appname /var/packages/$appname/share
ln -s /$vol_to/@apphome/$appname /var/packages/$appname/home
ln -s /$vol_to/@appconf/$appname /var/packages/$appname/etc

# 启动套件
# 获取套件状态
status=$(synopkg status "$appname" | jq -r '.status' 2>/dev/null)
if [ "$status" = "stop" ]; then
    echo "正在启动 [$appname] ..."
    synopkg start $appname
fi

echo "已经把套件 $appname 从 $vol_from 移动到 $vol_to "

文章对你有帮助吗?
  • 一般[0]
  • 很赞[0]
  • 没用[0]
  • 垃圾[0]
  • 无语[0]
扫一扫,手机浏览手机访问本站