前言
Proxmox Backup Server (簡稱PBS)作為一個備份服務器茵乱,體驗還是不錯的,它除了備份PVE的虛擬機外孟岛,備份系統(tǒng)重要文件體驗也是相當不錯:backup-client瓶竭,現(xiàn)在,我使用它的場景幾乎都是備份重要文件渠羞,無論內(nèi)網(wǎng)還是公網(wǎng)斤贰,備份起來都非常方便。
官方當然推薦的方式是獨立的物理機了次询,個人使用在資源有限的前提下使用虛擬機也沒有問題荧恍,甚至有人把它改造成Docker容器了:ayufan/proxmox-backup-server。不過屯吊,在個人使用的前提下送巡,這些使用方式都有其缺點:
物理機,沒有獨立的物理機給它造盒卸。
虛擬機骗爆,太浪費內(nèi)存資源,內(nèi)存資源緊張蔽介,能不用虛擬機就不用摘投。
Docker容器,更新可能會比官方慢很久屉佳,并且功能不完整谷朝,比如查看PBS系統(tǒng)日志,比如自動續(xù)簽SSL證書等等武花,還有就是鏡像一更新就要往磁盤寫入幾百M甚至幾G的數(shù)據(jù),對SSD不友好杈帐。
LXC容器体箕,配置麻煩,想要直接訪問宿主上的磁盤要么麻煩挑童,要么性能下降得厲害累铅。
還有一種形式,直接在現(xiàn)有NAS系統(tǒng)中安裝proxmox-backup-server站叼,但這需要NAS系統(tǒng)是Debian或基于Debian娃兽,不過會產(chǎn)生一個新的問題,系統(tǒng)隔離性不好尽楔。
那么有沒有一種方式投储,能規(guī)避掉這些缺點呢第练,有的,那就是 Systemd Container玛荞。關(guān)于它的詳細介紹娇掏,見 Arch Wiki 上的 Systemd-nspawn,一些常用命令勋眯,以及常見問題該鏈接中都有婴梧,本文沒有提及的內(nèi)容請參考該鏈接。
systemd-nspawn 跟 chroot 命令類似客蹋,是個終極版的 chroot塞蹭。systemd-nspawn 可以在輕量的命名空間容器中運行命令或系統(tǒng)。它比 chroot 強大的地方是讶坯,它完全虛擬了文件系統(tǒng)層次結(jié)構(gòu)番电、進程樹、各種 IPC 子系統(tǒng)以及主機名闽巩。systemd-nspawn 將容器中各種內(nèi)核接口的訪問限制為只讀钧舌,像是 /sys, /proc/sys 和 /sys/fs/selinux。網(wǎng)絡接口和系統(tǒng)時鐘不能從容器內(nèi)更改涎跨,不能創(chuàng)建設(shè)備節(jié)點洼冻。不能從容器中重啟宿主機,也不能加載內(nèi)核模塊隅很。相比 LXC 或 Libvirt撞牢, systemd-nspawn 更容易配置。
安裝
以下均為 root 用戶運行的叔营。
基礎(chǔ)環(huán)境
對于 Debian 和基于 Debian 的系統(tǒng)屋彪,需要安裝 systemd-container
以及 debootstrap
:
apt install debootstrap systemd-container
對于 Arch Linux 和基于 Arch Linux 的系統(tǒng),系統(tǒng)默認安裝的 systemd
已經(jīng)包含了 systemd-container
绒尊,只需要安裝 debootstrap
和 debian-archive-keyring
:
pacman -S debootstrap debian-archive-keyring
安裝 Debian Base
Proxmox Backup Server 基于 Debian畜挥,在安裝 Proxmox Backup Server 前需要先安裝 Debian Base,以本文成文時的 Debian 最新穩(wěn)定版 bookworm
為例:
cd /var/lib/machines
debootstrap --include=dbus-broker,systemd-container --components=main bookworm pbs https://deb.debian.org/debian
其中 https://deb.debian.org/debian
可以替換為國內(nèi)鏡像站點(國內(nèi)高校開源鏡像站匯總)婴谱。dbus-broker
和 systemd-container
是必須安裝的蟹但,在 Systemd-nspawn 中有解釋。
配置密碼
cd /var/lib/machines
systemd-nspawn -D ./pbs
passwd
logout
配置macvlan網(wǎng)卡
還是建議 Proxmox Backup Server 使用和宿主機不一樣的 IP谭羔,這可以使用MacVLAN來實現(xiàn)华糖,在宿主機上為pbs配置:
mkdir -p /etc/systemd/nspawn
nano /etc/systemd/nspawn/pbs.nspawn
然后輸入以下內(nèi)容:
[Exec]
Hostname=pbs
[Network]
## eth0是指基于宿主機上的eth0創(chuàng)建MacVLAN網(wǎng)卡,需要修改為自己的瘟裸,比如 vmbr0, ens18, eno1等等
MACVLAN=eth0
[Files]
PrivateUsersChown=yes
## Proxmox Backup Server的備份數(shù)據(jù)存放位置客叉,類似于Docker的映射,冒號左邊是宿主機的路徑,右邊是容器內(nèi)的路徑兼搏,如果之前用過Docker卵慰,可以直接用的之前配置的路徑
Bind=/mnt/data:/mnt/data
啟動
machinectl start pbs # 啟動pbs
machinectl shell root@pbs # 進入pbs
配置網(wǎng)絡
因為我們使用以MacVLAN網(wǎng)絡,所以要單獨地為容器配置網(wǎng)絡向族,進入容器后創(chuàng)建并編輯 /etc/network/interfaces.d/macvlan
呵燕,內(nèi)容如下,其中的 mv-eth0
是容器中的MacVLAN虛擬網(wǎng)卡名件相,可以通過輸入命令 ip a
查看到再扭。
auto mv-eth0
iface mv-eth0 inet dhcp
iface mv-eth0 inet6 dhcp
這是按照DHCP的方式來配置的,你也可以按照自己的習慣設(shè)置為固定IP夜矗。
然后重啟網(wǎng)絡:
systemctl enable --now networking.service
systemctl restart networking.service
如果后面仍然無法訪問網(wǎng)絡泛范,則還需要設(shè)置DNS服務器,編輯 /etc/resolv.conf
紊撕,設(shè)置nameserver如下面的形式罢荡,你可以改為你所使用的DNS服務器。
nameserver 223.5.5.5
安裝 Proxmox Backup Server
進入pbs后对扶,配置 Debian 和 Proxmox Backup Server的倉庫源区赵,將 /etc/apt/sources.list
修改為這樣(基于 Debian 12 bookworm),其中建議前兩行修改為你下載最快 國內(nèi)源, 幫助文檔浪南。
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):
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
笼才,內(nèi)容如下,也可以修改為你下載最快的 國內(nèi)源, 幫助文檔络凿。
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription
安裝 Proxmox Backup Server:
apt update
apt install proxmox-backup-server
安裝完成以后會多產(chǎn)生一個文件 /etc/apt/sources.list.d/pbs-enterprise.list
骡送,將其內(nèi)容注釋掉。
然后就可以愉快的訪問 https://<IP>:8007
來配置PBS了絮记,有DDNS的童鞋也可以在webui中設(shè)置acme自動更新ssl證書摔踱。
其他
- 如果想要在 Proxmox Backup Server 可以查看磁盤的SMART信息,則
/etc/systemd/nspawn/pbs.nspawn
下面這樣的:
[Exec]
Hostname=pbs
Capability=CAP_SYS_RAWIO
[Network]
## eth0是指基于宿主機上的eth0創(chuàng)建MacVLAN網(wǎng)卡怨愤,需要修改為自己的派敷,比如 vmbr0, ens18, eno1等等
MACVLAN=eth0
[Files]
PrivateUsersChown=yes
## Proxmox Backup Server的備份數(shù)據(jù)存放位置,類似于Docker的映射撰洗,冒號左邊是宿主機的路徑膀息,右邊是容器內(nèi)的路徑,如果之前用過Docker了赵,可以直接用的之前配置的路徑
Bind=/mnt/data:/mnt/data
## 允許 Proxmox Backup Server 查看哪些磁盤的SMART信息,全部映射給它就好
Bind=/dev/sda
Bind=/dev/sdb
...其他磁盤
然后對上述設(shè)置過的磁盤設(shè)置允許容器讀取信息:
systemctl set-property systemd-nspawn@pbs DeviceAllow='/dev/sda r'
systemctl set-property systemd-nspawn@pbs DeviceAllow='/dev/sdb r'
...其他磁盤
- 設(shè)置pbs容器在宿主機開機時自啟:
machinectl enable pbs
在容器內(nèi)默認仍然是宿主機的
hostname
甸赃,在容器內(nèi)可以修改/etc/hostname
為pbs
柿汛。如果未來要更新PBS,進入容器后輸入
apt update && apt upgrade
就好了,簡單方便络断。使用MacVLAN時裁替,默認情況下宿主機無法訪問和自身處在同一個子網(wǎng)下的 Systemd 容器,不在一個子網(wǎng)的可以訪問貌笨,所以建議將PBS的IP設(shè)置在和宿主機不在一個子網(wǎng)下弱判。當然,在一個子網(wǎng)也可以訪問锥惋,可以在宿主機再額外創(chuàng)建一個macvlan橋來達到目的:
ip link add mymv link eth0 type macvlan mode bridge # mymv是新創(chuàng)建的網(wǎng)橋名稱(下同)昌腰,eth0是上述容器內(nèi)虛擬MacVLAN網(wǎng)卡橋接的宿主機網(wǎng)卡的名稱,此二者按需修改
ip link set dev mymv address "76:d3:4a:8b:81:47" # 新網(wǎng)橋的mac地址你可以按需修改
ip link set mymv up
ip route add "10.0.0.30" dev mymv # 10.0.0.30是pbs容器的ip膀跌,修改為自己的
在宿主機重啟以后遭商,需要再次輸入以上命令,如果希望自動化實現(xiàn)捅伤,可以根據(jù)以下情況的不同來選擇劫流。
-
宿主機是 Debian 的話,新建
/etc/network/if-up.d/mymv
丛忆,內(nèi)容如下祠汇,其中eth0
mymv
76:d3:4a:8b:81:47
10.0.0.30
請根據(jù)上文的解釋和你的實際情況修改。#!/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
然后為該腳本增加可執(zhí)行權(quán)限:
chmod +x /etc/network/if-up.d/mymv
-
宿主機是 Arch Linux 的話熄诡,如果使用的網(wǎng)絡管理軟件是
networkmanager
可很,可以創(chuàng)建/etc/NetworkManager/dispatcher.d/10-mymv
,內(nèi)容如下粮彤,其中eth0
mymv
76:d3:4a:8b:81:47
10.0.0.30
請根據(jù)上文的解釋和你的實際情況修改根穷。#!/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
該腳本同樣需要可執(zhí)行權(quán)限:
chmod +x /etc/NetworkManager/dispatcher.d/10-mymv
- 其他功能詳見 Systemd-nspawn。