迁移群晖的套件到不同的存储空间
需求
因为群晖的空间不足,但是硬盘已经插满,需要调整一下存储空间。结果在把一个存储空间的内容全部备份并删除以后,还是无法删除这个存储空间,提示有套件安装在这里,不能删除。
但是DSM居然没有提供移动套件存储空间的功能……简直了。
寻找解决方案的时候犯了一个错误就是用中文搜索并且忘记加"-csdn",结果走了一些弯路。
解决方案
当时找到CSDN这个方案《DSM7下套件迁移》,这个脚本的原理不复杂,也不是不能用,就是有点BUG,我稍微修改了一下。
用法不太复杂:
# 列出所有套件及其状态
transferpackage.sh list
# 列出存储空间n的套件及其状态(n为存储空间编号)
transferpackage.sh list <n>
# 移动套件(name为套件名)
tansferpackage.sh transfer <name> <n>
不过有些套件这样迁移还不够,因为它们还有一些额外的文件放在原来的存储空间里,需要手工移动一下。具体还有哪些需要移动的内容要实际看看:
find . -type l -exec ls -l {} \; | grep volume1
我这边运行出来有这些内容,你可能看到的不一样:
lrwxrwxrwx 1 root root 41 May 12 14:46 ./lib/synologan/database/alert.sqlite -> /volume1/@database/synologan/alert.sqlite
lrwxrwxrwx 1 root root 24 May 13 23:06 ./services/pgsql -> /volume1/@database/pgsql
lrwxrwxrwx+ 1 root root 14 May 9 21:59 ./services/video -> /volume1/video
lrwxrwxrwx 1 root root 18 May 13 01:02 ./services/download -> /volume1/@download
其中这几个对应的套件是:
- alert.sqlite是synologan用的
- video是videostation用的
- download是downloadstation用的
这些都要先停了相应套件再移动文件。
postgresql是系统服务,需要这样停:
systemctl stop pgsql
然后再移动,移动完重启服务。
终极方案
搞了半天搞好以后正准备把代码发到gayhub,结果发现那边已经有一个更好的工具了:Synology app mover。
这个工具的使用很简单,直接运行就能列出所有套件,然后选择要移动的套件执行即可,有些需要额外操作的套件会在最后给你提示,告诉你还需要移动哪些文件。
总之,通过这样的操作就可以成功删除存储空间了。
推送到[go4pro.org]