群晖迁移套件及数据到另一个存储空间

之前群辉一直只用了两个盘位,装了两个硬盘做的jbod(亡命之徒,请勿模仿),用了很多年也没出问题。但是最近迷上摄影,拍摄的照片越来越多,2T的空间就装不下了,正好最近双十一,买了两个12T矿盘,准备做RAID1,保存一下重要数据,用了很久的两块老硬盘也可以逐渐退休了。

因为RAID类型不同,所以只能建立一个新的存储池,重要数据也要迁移到更大的空间中去了。

迁移前准备

背景

我使用的群辉系统是DSM 7.2.1-69057 Update 5,非此系统也请慎重参考

创建存储池及存储空间

首先第一步应该是创建新的存储池及存储空间,但是这个操作很简单,就不过多赘述了,总之新的两块硬盘做了RAID1,剩余空间有10T左右。

另外说个题外话,我的NAS是四盘位的,经过许多考证及我个人思考,我认为最好的硬盘RAID方案是两块RAID1,另外两块basic或者jbod,这样重要数据和不重要的数据分开存放,也能最大化利用空间(与RAID5相当),如果4个盘位一起做RAID5的话,一旦有个硬盘坏了不一定能重建成功,风险较高。

注意事项

迁移是非常非常非常高危的行为,一定一定一定要做好备份!

经过我的测试,除了ContainerManager以外,其他套件迁移都比较简单,下面是我安装的套件,可以参考下,如果你有套件不在列表里,那迁移时需要小心。

套件名称
CloudSync
SynologyApplicationService
qBittorrent
FileStation
OAuthService
syno-magnet
syncthing
dmtc.spk
DDNS-GO
frpc
PHP7.4
SynologyDrive
SynoFinder
Tailscale
StorageAnalyzer
SimplePermissionManager
SupportService
BackupRestoreManager
ScsiTarget
ActiveInsight
SMBService
StorageManager
QuickConnect
SecureSignIn
Python2
DhcpServer
HybridShare
exFAT-Free
ContainerManager
SnapshotReplication
TTYD
Virtualization
ReplicationService
CodecPack
USBCopy
python311
TextEditor
SynologyPhotos
Node.js_v18
Node.js_v20
SynoOnlinePack_v2
UniversalViewer
LogCenter

迁移共享文件夹

第一步当然是迁移共享文件夹,直接在网页端切换存储空间就好,系统会自动停用对应套件,迁移也是无感的。

但是时间会非常长,可以在晚上时迁移数据量比较大的文件夹。

迁移套件

Notice:建议在执行下方操作时,先单独迁移ContainerManager,以免出现意外情况

迁移套件有一个比较好用的工具Synology app mover:https://github.com/007revad/Synology_app_mover

按照文档进行操作就行,也不难,并且有些迁移完成后需要手动操作的部分作者也贴心的贴了操作步骤,跟着执行基本不会有错。

单独迁移ContainerManager

备份

首先需要备份docker这个共享文件夹,如果有些数据没有持久化的存储在这个文件夹里,建议网上找找解决办法备份一下。

docker的执行命令最好也找工具导出一下,docker-compose文件比较好解决,复制即可。

卸载

为什么要卸载?:经过我的测试,直接迁移套件及它的共享文件夹,会遇到各种各样的问题,包括但不限于:

  • 执行时提示Error response from daemon: no such file or directory
  • docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: “/bin/bash”: stat /bin/bash: no such file or directory: unknown.

如果你认为你有能力解决各种意想不到的问题,欢迎使用自己的方式。

高危操作:上面的备份结束后,可以在套件中心卸载ContainerManager套件了,所有的数据,报错docker文件夹都会被删除,所以一定要做好备份。

卸载完成最好重启一下,当然不重启也行。

重新安装

套件中心重新安装ContainerManager,此时会重新创建docker文件夹,可以将之前备份的文件拷贝回去,然后一个一个重新安装所需要的镜像及容器即可。

在这里附上DSM7.2.1可用的docker代理方式:群晖 DSM 7.2 为 Docker 设置 HTTP/HTTPS/SOCKS5 代理