本来家里的NAS是很少动的,但是最近发现升级升不动了,由于truenas升级到24+以后做了重大调整,将应用从K3S全部迁移到了Docker,而我升级的时候官方已经不提供老版本的升级镜像,所以网上的方法一一试过都不可以用,所以决定还是手动迁移。
因为底层改Docker了,想来也不难成功。
0.环境说明
我本地其实是用PVE作为宿主机底层系统,TRUENAS作为虚拟机运行于其上。
①宿主机配置如下:
| CPU | AMD7542 |
| RAM | 64G |
| 硬盘 | 4*16T HDD |
| 系统盘 | QCOW虚拟磁盘 |
| 网卡 | 直通1个2.5G,其余为虚拟网卡 |
| 当前版本:23.10.2 | 升级新版:25.10.3 (Goldeye) |
②升级软件清单:
| 编号 | 软件 | 版本 |
| 1 | mysql | 5.7.38 |
| 2 | trilium-cn | |
| 3 | phpmyadmin | |
| 4 | nextcloud | |
| 5 | plex |
1.安装系统,导入磁盘
Truenas Scale 镜像下载地址:
①下载好镜像后,配置默认网卡,完成系统安装。
②登录PVE系统,导入镜像,在终端输入:
qm set 11 --scsi2 /mnt/pve/images/10/vm-10-disk-0.qcow2
#qm set truenas23ID --scsi2 /mnt/pve/images/truenas23ID/truenas23Disk.qcow2
注:如果是在物理机安装,则直接把原来的磁盘插入新机器即可。
③登录WEBUI,点击存储,选择导入池,这里选择原先的应用磁盘即可。

2.创建应用/应用数据迁移
应用数据迁移步骤说明:
I.确认原应用目录(truenas 23 旧数据目录)
II.备份原应用数据
III.在新版本创建应用(truenas 25.10.3)
IV.解决权限问题和应用依赖
注:建议先升级数据类依赖应用(如mysql)
①确认原应用目录:
假设原来应用的目录挂载于:
/mnt/olddata/app_config #应用配置数据集
/mnt/olddata/app_data #应用数据数据集
②备份原应用数据
tar --acls --xattrs -cf - -C /mnt/olddata/app_config . | tar --acls --xattrs -xf - -C /mnt/newdata/app_config
#拷贝应用配置到新数据集,包括权限,ACL等
tar --acls --xattrs -cf - -C /mnt/olddata/app_data . | tar --acls --xattrs -xf - -C /mnt/newdata/app_data
#拷贝应用数据到新数据集,包括权限,ACL等
注:这里使用tar命令,减少磁盘的IO操作。
③创建应用:
进入 Apps → Discover Apps → Custom App (或 Launch Docker Image)。
或者直接通过 SSH 编写 docker-compose.yml
I.迁移mysql
truenas 创建自定义应用
点击应用→检查可用应用→自定义应用
配置应用信息:
- Image Configuration:
- Repository:mysql
- Tag:5.7.38
- 环境变量集合:
- MYSQL_ROOT_PASSWORD:你的mysql密码
- 网络配置:
- 端口:#配置映射宿主机端口
- 网络:
- 名称: 任意标识,如 multi_ip_net
- Aliases (Optional) :你的应用IP
- Interface Name (Optional) 留空,或填 ens19(取决于你是否需要显式绑定)
- MAC Address (Optional) 留空
- IPv4 Address (Optional) 留空(已在 Aliases 中指定)
- IPv6 Address (Optional) 留空
- Gateway Priority (Optional) 留空
- Priority (Optional) 留空
- Custom DNS Setup 保持默认(不启用)
然后点击安装
注:如果要使用独立的IP,需要先使用docker建立网络:
docker network create -d ipvlan \
--subnet=10.0.10.0/24 \
--ip-range=10.0.10.0/24 \
-o parent=eth0 \
-o ipvlan_mode=l2 \
net_ip_vmbr1
也可以直接编辑使用docker-compose.yml文件
services:
mysql:
image: mysql:5.7.38
container_name: mysql5738
environment:
MYSQL_ROOT_PASSWORD: "你的密码"
volumes:
- /mnt/your_pool/apps/mysql/data:/var/lib/mysql
ports:
- "3307:3306" # 将宿主机的3307端口映射到容器的3306端口
networks:
- my_network # 指定使用自定义网络
networks:
my_network:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/24 # (可选) 为自定义网络指定子网
gateway: 10.0.0.1
然后在truenas shell中运行:
docker-compose up -d
就可以看到mysql能够正常运行了:

II.迁移phpmyadmin
这里仅列出docker-compose.yml文件,迁移流程类似:
services:
mysql:
image: phpmyadmin
container_name: latest
environment:
PMA_HOSTS: "默认数据库地址1,..."
networks:
- my_network # 指定使用自定义网络
networks:
my_network:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/24 # (可选) 为自定义网络指定子网
gateway: 10.0.0.1
III.迁移plex
plex是truenas官方APP,直接搜索APP,配置即可
如果使用docker compose ,参考:
docker-compse.yml
version: '3'
services:
plex:
image: plexinc/pms-docker:latest
container_name: plex
network_mode: host
environment:
- TZ=Asia/Shanghai
- PLEX_CLAIM=claim-xxxx # 可选,首次认领
volumes:
- <path/to/plex/database>:/config
- <path/to/transcode/temp>:/transcode
- <path/to/media>:/data
restart: unless-stopped
其它步骤同上
IV. 迁移 trilium-cn
由于 trilium-cn 已经不再更新,而且官方已经有了中文版本,所以直接改用最新版的Trilium(Turenas 官方应用叫Trilium Notes)
如果使用docker compose ,参考:
docker-compse.yml
services:
trilium:
# Optionally, replace `latest` with a version tag like `v0.90.3`
# Using `latest` may cause unintended updates to the container
image: triliumnext/trilium:latest
# Restart the container unless it was stopped by the user
restart: unless-stopped
environment:
- TRILIUM_DATA_DIR=/home/node/trilium-data
ports:
- '8080:8080'
volumes:
# Unless TRILIUM_DATA_DIR is set, the data will be stored in the "trilium-data" directory in the home directory.
# This can also be changed with by replacing the line below with `- /path/of/your/choice:/home/node/trilium-data
- ${TRILIUM_DATA_DIR:-~/trilium-data}:/home/node/trilium-data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
其它步骤同上
V.迁移nextcloud
由于我之前使用的是nextcloud 31.0.8,使用config.php配置了mysql,truenas官方的nextcloud使用postgresql,我还是想使用mysql,所以先把nextcloud按31.0.8迁移,再进行升级:
docker-compse.yml参考:
services:
nextcloud:
image: nextcloud:31
environment:
TZ: "Asia/Shanghai"
volumes:
- /yourpool/nc-config:/var/www/html/config
- /yourpool/data:/var/www/html/data
networks:
my_network:
ipv4_address: #your ip
deploy:
resources:
limits: # 硬性限制(必须满足)
cpus: "8" # 最多使用2个CPU核心(如50%)
memory: 2048M # 最大内存2048MB
reservations: # 软性预留(最低保障)
cpus: "2" # 至少分配2个CPU核心
memory: 512M # 至少预留512内存
然后启动容器,修改版本进行升级:
docker compose up -d #启动容器
等待网页能够正常访问
docker compose down #停止容器
修改docker-compose.yml 文件中“nextcloud:31”为“nextcloud:32”
docker compose up -d #启动容器
等待升级完成,建议不要跨大版本升级,按31→32→33这样的顺序重复执行以上操作即可。
感觉这一趟操作下来比直接升级truenas中的应用方便很多,错误也少。



























近期评论