迁移群晖的套件到不同的存储空间

需求

因为群晖的空间不足,但是硬盘已经插满,需要调整一下存储空间。结果在把一个存储空间的内容全部备份并删除以后,还是无法删除这个存储空间,提示有套件安装在这里,不能删除。

但是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]