我正在努力备份一台在 ZFS 上运行 Ubuntu 的笔记本电脑。我有一个备份服务器,也在一些辅助卷(不是根卷)上运行 ZFS。
我制作了今天的快照bpool
并使用命令将其发送到备份服务器zfs send / recv
:
export SNAPSHOT=first-backup-2022-01-27
zfs snapshot -r bpool@$SNAPSHOT
zfs send -LRc bpool@$SNAPSHOT | pv | ssh [email protected] zfs recv -F susepool0/sets/1M/os-images/Ubuntu-thinkpad-t460s/bpool@$SNAPSHOT
这对于第一次备份来说工作正常,但是当我进入存储备份的服务器时,挂载点仍然设置为/boot
:
zfs list | grep t460s
susepool0/sets/1M/os-images/Ubuntu-thinkpad-t460s/bpool@first-backup-2022-01-27 591M 3.83T 96K /boot
susepool0/sets/1M/os-images/Ubuntu-thinkpad-t460s/bpool/BOOT@first-backup-2022-01-27 591M 3.83T 96K none
susepool0/sets/1M/os-images/Ubuntu-thinkpad-t460s/bpool/BOOT/ubuntu_qjvcro@first-backup-2022-01-27 591M 3.83T 162M /boot
我如何才能最好地配置此备份,以使其挂载点不与存储它们的服务器冲突? 有rpool
所有内容,例如/usr
,,/var
-/etc
如果允许远程重新安装它们,我可以看到那真是一团糟。
编辑:有人要求我在源和目标上发布 ZFS 挂载点,因为他们认为这可能会有帮助,所以我很乐意效劳:
编辑编辑(2021 年 1 月 30 日):我被要求减少这些列表的篇幅,因此这些列表仅包含最相关的文件系统挂载,以演示我所说的如果发送包含相同挂载的快照映像,zfs 挂载点将如何与 unix 文件路径冲突
我认为一个可能的解决方案是在发送快照之前或之后为快照设置一个备用根,但我不确定如何做到这一点或什么命令负责。
客户端(源)——这是运行 ZFS 根目录的机器(Ubuntu 21.10):
❯ for i in bpool rpool/ROOT; do echo ' '; zfs list -t filesystem -o name,mountpoint -d 4 $i; done
NAME MOUNTPOINT
bpool /boot
bpool/BOOT none
bpool/BOOT/ubuntu_qjvcro /boot
NAME MOUNTPOINT
rpool/ROOT none
rpool/ROOT/ubuntu_qjvcro /
rpool/ROOT/ubuntu_qjvcro/srv /srv
rpool/ROOT/ubuntu_qjvcro/usr /usr
rpool/ROOT/ubuntu_qjvcro/usr/local /usr/local
rpool/ROOT/ubuntu_qjvcro/var /var
rpool/ROOT/ubuntu_qjvcro/var/games /var/games
rpool/ROOT/ubuntu_qjvcro/var/lib /var/lib
rpool/ROOT/ubuntu_qjvcro/var/lib/AccountsService /var/lib/AccountsService
rpool/ROOT/ubuntu_qjvcro/var/lib/NetworkManager /var/lib/NetworkManager
rpool/ROOT/ubuntu_qjvcro/var/lib/apt /var/lib/apt
rpool/ROOT/ubuntu_qjvcro/var/lib/dpkg /var/lib/dpkg
rpool/ROOT/ubuntu_qjvcro/var/lib/machines /var/lib/machines
rpool/ROOT/ubuntu_qjvcro/var/log /var/log
rpool/ROOT/ubuntu_qjvcro/var/mail /var/mail
rpool/ROOT/ubuntu_qjvcro/var/snap /var/snap
rpool/ROOT/ubuntu_qjvcro/var/spool /var/spool
rpool/ROOT/ubuntu_qjvcro/var/www /var/www
服务器(目标) - 注意,这台机器使用 btrfs 作为其根文件系统,但这并不意味着rpool/ROOT
尝试挂载到/
它时不会出现问题:
❯ ssh osuse-leap zfs list -t filesystem,volume -o name,mountpoint -d 2
NAME MOUNTPOINT
susepool0 /mnt/susepool0
susepool0/sets /mnt/susepool0/sets
susepool0/sets/16K /mnt/susepool0/sets/16K
susepool0/sets/1M /mnt/susepool0/sets/1M
susepool0/sets/4K /mnt/susepool0/sets/4K
susepool0/sets/64K /mnt/susepool0/sets/64K
susepool0/sets/chipmunk-user-folder /mnt/ubuntu/home/avery
susepool0/snapper-backup /mnt/snapper
susepool0/snapper-backup/vols /mnt/snapper/vols
susepool0/vols /mnt/susepool0/vols
susepool0/vols/endpoint-bob-image -
susepool0/vols/macosvol0 -
susepool0/vols/real-endpoint-bob -
susepool0/vols/testvol -
susepool0/vols/vmfspool0 -
答案1
首先,我对此一无所知BTFS
,也无法判断发送ZFS
快照是否透明。这可能会导致您的问题。
其次,关于ZFS
安装相关 特性:
mountpoint
可以使用继承canmount
管理是否默认挂载池overlay
管理挂载点在挂载前存在的情况
就你的情况而言,我不明白你的源/目标数据集是什么,也看不到用作父母在目的地。如果你发送rpool/ROOT/ubuntu_qjvcro
,它将被安装在/
目的地。
您可以组合上述属性以避免安装在/
但更聪明的方法是使用子数据集……
rpool/ROOT/ubuntu_qjvcro/srv
rpool/ROOT/ubuntu_qjvcro/var/www
- ETC。
…到目标数据集正确设置挂载点:
susepool0/backup/qjvcro
例如mountpoint=/mnt/backup/qjvcro/
在这种情况下,类似的源rpool/ROOT/ubuntu_qjvcro/srv
将安装在目标上/mnt/backup/qjvcro/srv