林荫
林荫
发布于 2026-05-06 / 9 阅读
0
0

PBS备份-给你的NAS套上复活甲

🎬 起因

说来真是有够无语的,老读者都知道笔者前不久刚把家用的飞牛转到了PVE虚拟机内,把整个HomeLab给虚拟化了。

本以为这次应该稳了,我只需要一键给飞牛建个快照,就可以实现秒级恢复系统,当时就觉得自己已经无敌了!

(关于如何把NAS迁移到PVE,可以参考笔者的上一篇文章。)

结果只能说,嚣张一定会迎来惩罚。我刚把所有的服务全部启动,反代全部配置好,兴致勃勃地准备重启一下HomeLab来享受新的更安全的环境时,我的家庭服务器突然就启动不起来了……

不认盘了……

经过一系列的检测,我发现是我的系统盘出现坏块了,还正好坏在了启动扇区,导致系统直接不认盘了……

最关键的是,我这块系统盘是去年10月份刚入手的,全新的官方旗舰店的1T固态,正经牌子,而且买回来之后基本一直闲置,通电时间估计还不到一百小时,就坏了…… aba41f0f4b6ac43b4f0b3f22ada45307.jpg|300

image.png

售后换盘还说仓库没货了,至少也得一到两个月换,退款还按我购入价格退,我去年购入的这个价格现在根本买不到同样的盘了啊,真无语了……

而且刚好坏在启动扇区……让我连抢救虚拟机数据的机会都没有……

只能说除了是老天想指着我的鼻子说”你的HomeLab还是如此脆弱不堪“这个可能性以外,我很难想到别的原因了。

好吧,那既然如此,就只能上家庭环境下可能最完美的数据安全方案了。

🎁 你将得到什么?

跟着这一篇文章完成步骤之后,你将获得:

  • 即使家里起火,也可以快速恢复服务的备份能力。

  • 自动任务备份,根据预设保留版本的备份方案。

  • 自动精简去除备份版本间的重复块,实现备份空间最大化利用的能力。

  • 严格满足321原则的终极备份实现

🛠️ PBS搭建

笔者这里直接展示如何搭建远程PBS服务,局域网内可以直接插_U盘启动_来安装,跟PVE安装几乎完全一样,此处不予赘述,具体可以参考笔者的上一篇文章

🖥️ 系统准备

大部分VPS厂商都支持自己选择系统版本。

此处最优的系统选择是 Debian 12 版本,也就是 Bookworm 版本。其它版本的 Debian 理论上也可以,不过不能保证流程完全相同。

image.png

💾 硬盘挂载(可选)

如果你的 VPS 买来之后默认硬盘是挂载好的,或者你打算直接备份在系统盘,可以跳过这个步骤。

🔍 判断硬盘是否已挂载

首先使用下面命令来看一下硬盘是否挂载:

lsblk

找到你打算用来做备份的硬盘,看后面的 MOUNTPOINTS 一栏是否有目录,比如 /mnt/data 或者 /data 这样的,如果有就说明挂载过了,没有就是没挂载。

image.png

可以看到我的这2T的机械盘是没有挂载的。

此时记下来你的盘的名字,比如我这里叫 vdb

🪓 硬盘分区

⚠️ 危险操作警告: 硬盘分区操作会导致数据全部丢失!请务必确认你要操作的磁盘名称(如 vdb)是正确的,不要误操作了存有重要数据的硬盘!

我这里是已经分区了的,可以看到 vdb 下面还有一个 vdb1

如果你的硬盘还没分区(比如只有 vdb 没有 vdb1),就需要给硬盘分区。我这里以 vdb 为例,读者根据自身情况改成自己的盘名即可

# 进入fdisk交互界面
fdisk /dev/vdb

# 新建分区
n

# 创建主分区
p

# 设置分区号为1
1

# 接下来连按两个回车,分别接受默认起始扇区、接受默认结束扇区(也就是用整个盘的空间分到当前分区)

# 保存并退出
w

接下来格式化分区:

# 把主分区格式化成ext4格式
mkfs.ext4 /dev/vdb1

🔗 挂载

接下来挂载分区到目录。我这里挂载到 /mnt/data,读者可以自己决定要挂载的目录:

# 创建挂载目录
mkdir /mnt/data

# 挂载
mount /dev/vdb1 /mnt/data

接下来设置开机自动挂载,以防重启后挂载失效:

# 获取分区UUID
blkid /dev/vdb1

# 接下来会打印一长串,里面有一格UUID=xxxx的内容,复制出来UUID备用

# nano编辑fstab文件
nano /etc/fstab

# 然后在文件末尾加上如下新行
UUID=刚才准备好的UUID   /mnt/data   ext4   defaults   0   0

# 然后ctrl+o回车保存,ctrl+x推出nano编辑模式

# 自动挂载配置测试,如果没有任何报错输出,就说明配置没问题
mount -a

到这挂载就算完成了,此时可以再用开头的命令看下是否挂载成功了,或者用 df -h 也可以:

image.png

可以看到我这里 vdb1 后面已经有挂载目录了。

📦 安装PBS

📥 安装

依次使用下面的命令安装 PBS。如果拉不到对应的包或者特别慢,可能需要通过国内的镜像来拉取或者改源,教程较多此处不予赘述:

# 下载安装官方安全密钥
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

# 添加PBS无订阅版软件源,有订阅的富哥可以选择别的版本
echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" > /etc/apt/sources.list.d/pbs.list

# 更新源列表
apt update

# 安装PBS
apt install proxmox-backup-server

中间会弹出一个类似下图的确定界面,让你选择 mail configuration type。这个是邮件告警方式,我这边不需要,直接选择 No configuration

image.png

然后会走一个时间比较长的进度条。等进度条走满,我们直接 reboot 重启 VPS,等 VPS 重启完成后,就可以使用 https://<你VPS的IP>:8007 来访问 PBS 管理后台了。

使用你 VPS 的 root 和对应密码登陆即可,跟 PVE 很像的。

✨ 一键优化

跟 PVE 很像的还有提醒订阅的弹窗,同样使用一键优化工具即可去除。

我们这里选择的是Proxmox VE Helper-Scripts

使用下面命令拉取并执行库中的 pbs 优化脚本即可:

# 中途会出现一些选项,根据自己的需求选择即可,一般来说都yes也没啥问题
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pbs-install.sh)"

image.png

等脚本跑完,重新打开后台并登录,你会发现弹窗已经没啦~

⚙️ 配置备份

🗄️ 准备PBS存储

首先,点击左侧的“添加数据存储”:

image.png

名称随便填,备份路径填入你想要存储备份数据的目录(比如我这里填入刚才刚挂载出来的目录)。GC时间和精简时间根据你的情况选择,后面可以等确定好具体的备份方案后,再作修改:

image.png

接下来选中新增的这个数据存储,点击“内容”页签,然后点击右上角的“新增命名空间”。

💡 提示: 不同 PVE 的备份推荐放在不同命名空间,这样同 ID 的虚拟机备份就不容易发生冲突。

image.png

名称根据你的 PVE 职责填就可以,我这里填的是 Router。因为我要备份我的软路由所在的 PVE,至于我家的主服务 PVE,目前还因为系统盘启动扇区的坏块宕机着(商家放假没给换货,买新盘又太贵,悲催 QwQ)。

创建完成之后回到“概要”页签,点击“显示连接信息”,会弹出一个小窗口,里面的信息一会儿配置 PVE 备份时要用:

image.png

💾 PVE备份

接着进入需要备份的 PVE 后台管理界面。这里要保证从你的 PVE 可以 ping 到你的 PBS 主机。

推荐使用反代或者内网穿透方式来连接,不要把IP+8007端口直接暴露在公网

笔者这里使用的是 Tailscale 实现的内网穿透,非常简单,此处不赘述了,感兴趣的话我后面可以再写专门的文章。

➕ 添加存储

选中“数据中心”,点击“存储”,添加一个 Proxmox Backup Server 格式的存储:

image.png

ID随便起。

  • 服务器:填入 PBS 服务器的 IP 或者域名。
  • 用户名:填入刚才 PBS 右上角用户的名字,默认是 root@pam
  • 密码:填入该用户的密码。
  • DataStore和命名空间:填入刚才新创建的。
  • 指纹:填入刚才获取的连接信息中的指纹。

image.png

备份保留可以先不用改,一会儿在备份功能中设置更方便;加密按需设置。

点击添加,不出意外的话就会看到存储里面多了一项,就是我们刚才配置的 PBS,内容默认只有一个空备份:

image.png

📅 添加备份作业

接下来继续在“数据中心”里点击“备份”页签,添加一个新的备份作业。

节点选择 pve 主节点,存储选择刚才新增的 PBS 存储。计划可以根据你的时间线选择,笔者这里选择的是每周日1点,你也可以自己改时间代码来实现更细致的计划模式。

然后在下方的列表中,勾选想要备份的虚拟机:

image.png

通知不用改,“保留”则根据需求调整。我这里因为是每周备份,所以选择了保留最近两次备份 + 最近两周备份 + 最近两个月备份。

不要看好像备份的版本多,就觉得空间占用会很大:

💡 原理: PBS 是增量备份,所以不是每一份备份数据都是完整的,不能按版本数来简单叠加计算备份所占空间

image.png

然后点击创建,备份任务就创建出来了。

至此这套流程就跑通了!想要测试可以直接选中任务点击“现在运行”,测试虚拟机是否能成功备份到了 PBS 后台。

可以看到我这里已经备份成功了,其中100号虚拟机我还备份了两份:

image.png

📋 备份方案

📐 设计思路

严格执行 321原则,即”3份数据、2种介质、1份异地“。

  • 1份数据:PVE自身数据。
  • 1份数据:局域网内的 PBS 服务。
  • 1份数据:远端 VPS 运行的异地 PBS 服务。

注意: 局域网内的 PBS 服务一定要架设在要备份的 PVE 以外的物理主机上,这样才能互不依赖。

因为局域网内一般网络环境较好,主要备份发生在局域网内的 PBS 服务;而远端 VPS 则可以通过拉取的方式,低频备份局域网内 PBS 的备份数据。

  • 当 PVE 挂掉时,可以通过局域网内 PBS 快速恢复。
  • 当局域网内 PBS 挂掉时,不影响 PVE 本身数据。
  • 当本地两端全部挂掉时,还有远端 PBS 服务保底。
  • 当远端 PBS 挂掉时,同样不影响本地的 PVE 运行和 PBS 备份。

至此,真正完美实现321原则。

⏱️ 频率与保留

推荐根据 PVE 具体的服务类型来制定不同的备份计划:

  • 场景一:软路由等长期稳定服务 这类服务很少更改、长期稳定运行。可以考虑一周甚至一个月备份一次到局域网内 PBS,保留最近两次即可。

  • 场景二:NAS系统 本身系统更新不算频繁,但经常会进行一些细节设置。可以考虑局域网内每周备份,保留最近两次 + 最近两个月。

  • 场景三:代码托管/数据库等高频变动服务 像各类知识库管理或者基于本地 mysql 数据库的服务,更新非常频繁。推荐每天备份,并且保留最近两次 + 最近两周 + 最近两个月。

另外需要注意的是,非 PVE 本身虚拟机系统盘的内容(比如直通给 NAS 虚拟机的机械硬盘里的数据),是不包含在 PBS 备份范围之内的,需要读者自行选择其它方式备份。

不过这个就比较简单了,因为都是文件性质的,不需要一键恢复环境,而且一般 NAS 都有自己的备份工具,定期自动打包同步到云盘即可。

🧹 精简、GC与验证

  • 精简:推荐基于备份作业的频率来设计,保证在大体积的备份作业完成后能及时精简。比如凌晨3点开始备份,可以设计凌晨6点进行精简,保证错峰运行。
  • GC(垃圾回收):精简完成后只会标记存储块为重复,但不会真正释放空间,GC 才是真正的释放操作。建议跟在精简任务之后,执行 GC 来释放空间。
  • 验证:主要是验证备份数据是否有效。因为会极大占用硬盘 IO,建议根据前两个任务的时间来错开安排,定期抽出比较空闲的时间来跑验证作业。

📝 总结

总的来说,其实整个流程还是很简单的,希望读者能严肃执行,尽快建立起自己的备份体系。

不要抱有侥幸心理,特别是在对待数据安全上。不要觉得全基于虚拟机就安全了,不要觉得上了 RAID5 就完美了。

命运总是会以你想象不到的方式给你致命一击。 一不小心,就会像笔者一样,一夜回到解放前。

还好这次出问题的只是系统盘,大不了重头再来。但如果里面存的是家人的珍贵照片没了,那才真的是追悔莫及。


评论