ubuntu jellyfin备份与恢复
小樊
64
2025-12-24 18:55:10
Ubuntu 下 Jellyfin 备份与恢复
一 备份策略与准备
- 备份范围建议包含:
- 配置与数据库数据目录:通常为 /var/lib/jellyfin;
- 媒体库文件:即你的电影、剧集等实际文件目录;
- 可选:自定义 Nginx/Apache 配置、SSL 证书、系统级服务文件等。
- 操作前准备:
- 确认 Jellyfin 运行用户与目录权限(常见为 jellyfin:jellyfin)。
- 准备外部磁盘/NAS/对象存储作为备份目的地。
- 建议先停止 Jellyfin 服务,避免备份过程中出现写入不一致(特别是数据库/缓存文件)。
- 记录关键路径与版本信息,便于跨机器或跨版本恢复时核对。
- 常用工具:tar、rsync(本地/远程/增量),如需云存储可挂载 S3 后拷贝归档。
二 原生安装的系统服务备份与恢复
- 备份步骤
- 停止服务
sudo systemctl stop jellyfin
- 打包数据目录(含配置与数据库)
sudo tar -czvf jellyfin_backup_$(date +%F).tar.gz -C /var/lib/jellyfin .
- 备份媒体库(示例路径,请替换为你的实际路径)
sudo rsync -av --delete /path/to/media /path/to/backup/media_$(date +%F)
- 如需远程/云端备份,可将归档拷贝到外部介质或挂载的 S3 存储后上传。
- 恢复步骤
- 先停止服务
sudo systemctl stop jellyfin
- 恢复数据目录(注意末尾的点,表示解包到当前目录)
sudo tar -xzf jellyfin_backup_YYYY-MM-DD.tar.gz -C /var/lib/jellyfin
- 恢复媒体库
sudo rsync -av --delete /path/to/backup/media_YYYY-MM-DD/ /path/to/media
- 修正权限(以实际运行用户为准)
sudo chown -R jellyfin:jellyfin /var/lib/jellyfin /path/to/media
- 启动服务并验证
sudo systemctl start jellyfin
sudo systemctl status jellyfin
- 说明
- 使用 tar 可一次性归档与压缩;使用 rsync 便于增量同步与远程备份。
- 若仅做小变更,可定期用 rsync 对媒体库做增量备份,对配置/数据库做全量归档。
三 Docker 部署的备份与恢复
- 备份步骤
- 停止容器
docker stop jellyfin
- 备份配置目录(假设容器名为 jellyfin,挂载到宿主机的 /path/to/config)
docker cp jellyfin:/config /path/to/backup/config_$(date +%F)
- 备份媒体库(宿主机路径)
rsync -av --delete /path/to/media /path/to/backup/media_$(date +%F)
- 恢复步骤
- 如需全新部署,先启动一个仅挂载配置的临时容器以校验配置可用性(可选)
docker run --name jellyfin-tmp -v /path/to/backup/config_YYYY-MM-DD:/config -p 8096:8096 --rm jellyfin/jellyfin
- 启动正式容器并挂载已备份的配置与媒体库
docker run -d --name jellyfin
-p 8096:8096
-v /path/to/backup/config_YYYY-MM-DD:/config
-v /path/to/media:/media
jellyfin/jellyfin
- 访问 http://服务器IP:8096 验证用户、插件、播放记录与媒体库是否完整。
四 自动化与云备份示例
- 本地定时归档脚本(系统服务)
- 示例(每日 2:30 打包 /var/lib/jellyfin 到 /backup):
sudo tee /usr/local/bin/jellyfin-backup.sh >/dev/null <<‘EOF’
#!/usr/bin/env bash
set -e
BACKUP_DIR=“/backup/jellyfin”
DATE=$(date +%F)
mkdir -p “$BACKUP_DIR”
systemctl stop jellyfin || true
tar -czvf “$BACKUP_DIR/jellyfin_data_$DATE.tar.gz” -C /var/lib/jellyfin .
systemctl start jellyfin || true
可选:保留最近 7 天
find “$BACKUP_DIR” -name “jellyfin_data_*.tar.gz” -mtime +7 -delete
EOF
sudo chmod +x /usr/local/bin/jellyfin-backup.sh
echo “30 2 * * * root /usr/local/bin/jellyfin-backup.sh” | sudo tee /etc/cron.d/jellyfin-backup
- 云端对象存储(S3)示例
- 挂载 S3 后拷贝归档:
sudo apt install -y s3fs-fuse
echo “YOUR_S3_ACCESS_KEY:YOUR_S3_SECRET_KEY” | sudo tee /etc/passwd-s3fs
sudo chmod 600 /etc/passwd-s3fs
sudo mkdir -p /mnt/s3/jellyfin
sudo mount -t s3fs YOUR_BUCKET /mnt/s3/jellyfin -o passwd_file=/etc/passwd-s3fs -o url=https://YOUR_BUCKET_ENDPOINT -o use_path_request_style
cp /backup/jellyfin_data_*.tar.gz /mnt/s3/jellyfin/
- 说明:S3 适合异地/长期留存与灾备场景。
五 验证与常见问题
- 验证要点
- 登录 Web 管理端,核对:用户与权限、插件列表与启用状态、播放记录/继续观看、媒体库扫描结果与元数据。
- 抽查若干影片的字幕、音轨、海报/背景是否正常。
- 若使用 Nginx/反向代理/HTTPS,检查证书与端口转发是否生效。
- 常见问题与处理
- 恢复后页面空白或 500:优先检查 /var/lib/jellyfin 与媒体库目录的所有者/权限是否为 jellyfin:jellyfin,以及 SELinux/AppArmor 是否拦截。
- 插件异常:在恢复配置后,逐个禁用/重新启用插件,必要时清理插件缓存目录后再重启。
- 媒体库路径变化:在管理端执行库扫描,或在高级设置中调整媒体库根路径后重新扫描。
- 版本差异:跨大版本恢复时,建议先升级到目标版本再恢复,减少数据库迁移风险。