Jellyfin 在 CentOS 上的备份与恢复
一 准备与原则
- 备份前先停止服务,避免数据库写入导致不一致:sudo systemctl stop jellyfin。
- 明确需要备份的数据范围:
- 配置与数据库:/var/lib/jellyfin(包含数据库与插件等)。
- 缓存(可选,可重建):/var/cache/jellyfin。
- 媒体库文件:你的媒体目录(如 /media、/mnt 下挂载盘等,通常不随备份包携带,恢复时指向原路径或新路径)。
- 选择备份方式:本地归档(tar/rsync)、远程同步(rsync)、或对象存储(S3 挂载)。
- 备份完成后务必做一次恢复演练,验证可用性与完整性。
二 本机备份步骤
- 方式 A(推荐)tar 归档
- 停止服务:sudo systemctl stop jellyfin
- 打包配置与数据:
tar -czvf jellyfin_backup_$(date +%F).tar.gz -C /var/lib/jellyfin .
如需连同缓存:tar -czvf jellyfin_backup_$(date +%F).tar.gz -C /var/lib/jellyfin . -C /var/cache/jellyfin .
- 启动服务:sudo systemctl start jellyfin
- 方式 B rsync 增量同步到本地或远程
- 本地目录:
rsync -avz /var/lib/jellyfin/ /backup/jellyfin/
- 远程服务器:
rsync -avz -e ssh /var/lib/jellyfin/ user@remote:/backup/jellyfin/
- 方式 C 同步到 S3(对象存储)
- 安装 s3fs-fuse 并配置密钥(示例):
sudo yum install -y gcc-c++ git libcurl-devel libxml2-devel make openssl-devel fuse-devel
git clone https://github.com/s3fs-fuse/s3fs-fuse.git && cd s3fs-fuse && ./autogen.sh && ./configure && make && sudo make install
echo “YOUR_S3_ACCESS_KEY:YOUR_S3_SECRET_KEY” | sudo tee /etc/passwd-s3fs >/dev/null
sudo chmod 600 /etc/passwd-s3fs
- 挂载存储桶并拷贝:
sudo mkdir -p /mnt/s3bucket
sudo s3fs YOUR_BUCKET /mnt/s3bucket -o passwd_file=/etc/passwd-s3fs -o url=https://YOUR_S3_ENDPOINT -o use_path_request_style
cp jellyfin_backup_$(date +%F).tar.gz /mnt/s3bucket/
- 说明:Jellyfin 本身不提供内置的一键备份功能,上述为通用且可靠的手动/脚本化做法。
三 本机恢复步骤
- 方式 A 从 tar 包恢复
- 建议先停止服务:sudo systemctl stop jellyfin
- 清空或重命名旧目录(谨慎操作):
sudo mv /var/lib/jellyfin /var/lib/jellyfin.bak_$(date +%F)
- 解压备份:
sudo mkdir -p /var/lib/jellyfin
sudo tar -xzvf jellyfin_backup_YYYY-MM-DD.tar.gz -C /var/lib/jellyfin
- 修正权限(Jellyfin 运行用户通常为 jellyfin:jellyfin):
sudo chown -R jellyfin:jellyfin /var/lib/jellyfin
如包含缓存也恢复:sudo chown -R jellyfin:jellyfin /var/cache/jellyfin
- 启动服务:sudo systemctl start jellyfin
- 方式 B 从 rsync 或 S3 恢复
- rsync 拉回:rsync -avz user@remote:/backup/jellyfin/ /var/lib/jellyfin/
- S3 下载:从挂载点或对象存储下载备份包后按方式 A 解压恢复。
- 媒体库路径变更时:在 Web 管理后台的 控制台 > 存储 调整媒体库文件夹路径,指向新的实际位置。
四 Docker 部署的备份与恢复
- 备份
- 停止容器:docker stop jellyfin(或 docker-compose stop)
- 备份卷数据(假设卷名为 jellyfin_config 与 jellyfin_cache):
docker run --rm --volumes-from jellyfin -v $(pwd):/backup alpine tar czvf /backup/jellyfin_backup_$(date +%F).tar.gz -C /config . -C /cache .
- 如需备份宿主机挂载的媒体目录:
tar -czvf media_backup_$(date +%F).tar.gz /path/to/media
- 恢复
- 清理或重命名旧数据卷(谨慎):docker volume rm jellyfin_config(或先备份)
- 启动临时容器解压配置:
docker run --rm -v jellyfin_config:/config -v $(pwd):/backup alpine tar xzvf /backup/jellyfin_backup_YYYY-MM-DD.tar.gz -C /config
如包含缓存:同样解压到 /cache
- 启动服务:docker start jellyfin(或 docker-compose up -d)
- 媒体库路径变更:在容器内或 compose 中更新卷挂载路径,并在控制台调整媒体库路径。
五 自动化与注意事项
- 自动化与异地容灾
- 使用 rsync 定时任务或系统计划任务(cron)做每日增量备份;
- 将备份包同步到远程主机或对象存储,保留多份与多年龄段(如近 7/30/90 天)。
- 校验与演练
- 定期在测试环境恢复备份,核对数据库、插件、用户与媒体库元数据一致性。
- 权限与 SELinux
- 恢复后确保目录属主为 jellyfin:jellyfin;如启用 SELinux,必要时执行:
sudo restorecon -R /var/lib/jellyfin
- 升级前必做
- 任何升级(YUM 或手动)前先完整备份,升级后验证服务与数据可用性。