Featured image of post 安装Proxmox Backup Server新姿势,Systemd Container!

安装Proxmox Backup Server新姿势,Systemd Container!

安装Proxmox Backup Server新姿势,Systemd Container!

前言

Proxmox Backup Server (简称PBS)作为一个备份服务器,体验还是不错的,它除了备份PVE的虚拟机外,备份系统重要文件体验也是相当不错:backup-client,现在,我使用它的场景几乎都是备份重要文件,无论内网还是公网,备份起来都非常方便。

官方当然推荐的方式是独立的物理机了,个人使用在资源有限的前提下使用虚拟机也没有问题,甚至有人把它改造成Docker容器了:ayufan/proxmox-backup-server。不过,在个人使用的前提下,这些使用方式都有其缺点:

  • 物理机,没有独立的物理机给它造。

  • 虚拟机,太浪费内存资源,内存资源紧张,能不用虚拟机就不用。

  • Docker容器,更新可能会比官方慢很久,并且功能不完整,比如查看PBS系统日志,比如自动续签SSL证书等等,还有就是镜像一更新就要往磁盘写入几百M甚至几G的数据,对SSD不友好。

  • LXC容器,配置麻烦,想要直接访问宿主上的磁盘要么麻烦,要么性能下降得厉害。

  • 还有一种形式,直接在现有NAS系统中安装proxmox-backup-server,但这需要NAS系统是Debian或基于Debian,不过会产生一个新的问题,系统隔离性不好。

那么有没有一种方式,能规避掉这些缺点呢,有的,那就是 Systemd Container。关于它的详细介绍,见 Arch Wiki 上的 Systemd-nspawn,一些常用命令,以及常见问题该链接中都有,本文没有提及的内容请参考该链接。

systemd-nspawn 跟 chroot 命令类似,是个终极版的 chroot。systemd-nspawn 可以在轻量的命名空间容器中运行命令或系统。它比 chroot 强大的地方是,它完全虚拟了文件系统层次结构、进程树、各种 IPC 子系统以及主机名。systemd-nspawn 将容器中各种内核接口的访问限制为只读,像是 /sys, /proc/sys 和 /sys/fs/selinux。网络接口和系统时钟不能从容器内更改,不能创建设备节点。不能从容器中重启宿主机,也不能加载内核模块。相比 LXC 或 Libvirt, systemd-nspawn 更容易配置。

安装

以下均为 root 用户运行的。

基础环境

对于 Debian 和基于 Debian 的系统,需要安装 systemd-container 以及 debootstrap

1
apt install debootstrap systemd-container

对于 Arch Linux 和基于 Arch Linux 的系统,系统默认安装的 systemd 已经包含了 systemd-container,只需要安装 debootstrapdebian-archive-keyring

1
pacman -S debootstrap debian-archive-keyring

安装 Debian Base

Proxmox Backup Server 基于 Debian,在安装 Proxmox Backup Server 前需要先安装 Debian Base,以本文成文时的 Debian 最新稳定版 bookworm 为例:

1
2
cd /var/lib/machines
debootstrap --include=dbus-broker,systemd-container --components=main bookworm pbs https://deb.debian.org/debian

其中 https://deb.debian.org/debian 可以替换为国内镜像站点(国内高校开源镜像站汇总)。dbus-brokersystemd-container 是必须安装的,在 Systemd-nspawn 中有解释。

配置密码

1
2
3
4
cd /var/lib/machines
systemd-nspawn -D ./pbs
passwd
logout

配置macvlan网卡

还是建议 Proxmox Backup Server 使用和宿主机不一样的 IP,这可以使用MacVLAN来实现,在宿主机上为pbs配置:

1
2
mkdir -p /etc/systemd/nspawn
nano /etc/systemd/nspawn/pbs.nspawn

然后输入以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Exec]
Hostname=pbs

[Network]
## eth0是指基于宿主机上的eth0创建MacVLAN网卡,需要修改为自己的,比如 vmbr0, ens18, eno1等等
MACVLAN=eth0

[Files]
PrivateUsersChown=yes
## Proxmox Backup Server的备份数据存放位置,类似于Docker的映射,冒号左边是宿主机的路径,右边是容器内的路径,如果之前用过Docker,可以直接用的之前配置的路径
Bind=/mnt/data:/mnt/data

启动

1
2
machinectl start pbs       # 启动pbs
machinectl shell root@pbs  # 进入pbs

配置网络

因为我们使用以MacVLAN网络,所以要单独地为容器配置网络,进入容器后创建并编辑 /etc/network/interfaces.d/macvlan,内容如下,其中的 mv-eth0 是容器中的MacVLAN虚拟网卡名,可以通过输入命令 ip a 查看到。

1
2
3
auto mv-eth0
iface mv-eth0 inet dhcp
iface mv-eth0 inet6 dhcp

这是按照DHCP的方式来配置的,你也可以按照自己的习惯设置为固定IP。

然后重启网络:

1
2
systemctl enable --now networking.service
systemctl restart networking.service

如果后面仍然无法访问网络,则还需要设置DNS服务器,编辑 /etc/resolv.conf,设置nameserver如下面的形式,你可以改为你所使用的DNS服务器。

1
nameserver 223.5.5.5

安装 Proxmox Backup Server

进入pbs后,配置 Debian 和 Proxmox Backup Server的仓库源,将 /etc/apt/sources.list 修改为这样(基于 Debian 12 bookworm),其中建议前两行修改为你下载最快 国内源, 帮助文档

1
2
3
deb https://deb.debian.org/debian bookworm main contrib
deb https://deb.debian.org/debian bookworm-updates main contrib
deb https://deb.debian.org/debian-security bookworm-security main contrib

信任 Proxmox 的 keyring(只下载了当前版本 bookworm 的 key):

1
2
apt install wget
wget http://download.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

新建 /etc/apt/sources.list.d/pbs.list ,内容如下,也可以修改为你下载最快的 国内源, 帮助文档

1
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription

安装 Proxmox Backup Server:

1
2
apt update
apt install proxmox-backup-server

安装完成以后会多产生一个文件 /etc/apt/sources.list.d/pbs-enterprise.list,将其内容注释掉。

然后就可以愉快的访问 https://<IP>:8007 来配置PBS了,有DDNS的童鞋也可以在webui中设置acme自动更新ssl证书。

其他

  1. 如果想要在 Proxmox Backup Server 可以查看磁盘的SMART信息,则 /etc/systemd/nspawn/pbs.nspawn 下面这样的:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[Exec]
Hostname=pbs
Capability=CAP_SYS_RAWIO

[Network]
## eth0是指基于宿主机上的eth0创建MacVLAN网卡,需要修改为自己的,比如 vmbr0, ens18, eno1等等
MACVLAN=eth0

[Files]
PrivateUsersChown=yes
## Proxmox Backup Server的备份数据存放位置,类似于Docker的映射,冒号左边是宿主机的路径,右边是容器内的路径,如果之前用过Docker,可以直接用的之前配置的路径
Bind=/mnt/data:/mnt/data
## 允许 Proxmox Backup Server 查看哪些磁盘的SMART信息,全部映射给它就好
Bind=/dev/sda
Bind=/dev/sdb
...其他磁盘

然后对上述设置过的磁盘设置允许容器读取信息:

1
2
3
systemctl set-property systemd-nspawn@pbs DeviceAllow='/dev/sda r'
systemctl set-property systemd-nspawn@pbs DeviceAllow='/dev/sdb r'
...其他磁盘
  1. 设置pbs容器在宿主机开机时自启:
1
machinectl enable pbs
  1. 在容器内默认仍然是宿主机的 hostname ,在容器内可以修改 /etc/hostnamepbs

  2. 如果未来要更新PBS,进入容器后输入 apt update && apt upgrade 就好了,简单方便。

  3. 使用MacVLAN时,默认情况下宿主机无法访问和自身处在同一个子网下的 Systemd 容器,不在一个子网的可以访问,所以建议将PBS的IP设置在和宿主机不在一个子网下。当然,在一个子网也可以访问,可以在宿主机再额外创建一个macvlan桥来达到目的:

1
2
3
4
ip link add mymv link eth0 type macvlan mode bridge # mymv是新创建的网桥名称(下同),eth0是上述容器内虚拟MacVLAN网卡桥接的宿主机网卡的名称,此二者按需修改
ip link set dev mymv address "76:d3:4a:8b:81:47"    # 新网桥的mac地址你可以按需修改
ip link set mymv up
ip route add "10.0.0.30" dev mymv                   # 10.0.0.30是pbs容器的ip,修改为自己的

在宿主机重启以后,需要再次输入以上命令,如果希望自动化实现,可以根据以下情况的不同来选择。

  • 宿主机是 Debian 的话,新建 /etc/network/if-up.d/mymv,内容如下,其中 eth0 mymv 76:d3:4a:8b:81:47 10.0.0.30 请根据上文的解释和你的实际情况修改。

    1
    2
    3
    4
    5
    6
    7
    8
    
    #!/bin/sh
    
    if [ "$IFACE" = "eth0" ]; then
        ip link add mymv link eth0 type macvlan mode bridge
        ip link set dev mymv address "76:d3:4a:8b:81:47"
        ip link set mymv up
        ip route add 10.0.0.30 dev mymv
    fi
    

    然后为该脚本增加可执行权限:

    1
    
    chmod +x /etc/network/if-up.d/mymv
    
  • 宿主机是 Arch Linux 的话,如果使用的网络管理软件是 networkmanager ,可以创建 /etc/NetworkManager/dispatcher.d/10-mymv,内容如下,其中 eth0 mymv 76:d3:4a:8b:81:47 10.0.0.30 请根据上文的解释和你的实际情况修改。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    #!/bin/bash
    
    export LANG='C'
    INTERFACE=$1
    STATUS=$2
    
    set_ip_route() {
        if [[ "$INTERFACE" == "eth0" ]]; then
            ip link add mymv link eth0 type macvlan mode bridge
            ip link set dev mymv address "76:d3:4a:8b:81:47"
            ip link set mymv up
            ip route add 10.0.0.30 dev mymv
        fi
    }
    
    case "$STATUS" in
        "up"|"vpn-up") set_ip_route;;
    esac
    exit 0
    

    该脚本同样需要可执行权限:

    1
    
    chmod +x /etc/NetworkManager/dispatcher.d/10-mymv
    
  1. 其他功能详见 Systemd-nspawn

截图

数据存储

系统日志

Built with Hugo
主题 StackJimmy 设计