百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

proxmox ve ZFS备份及恢复系统/根分区(无需重装系统)

bigegpt 2025-01-14 10:46 7 浏览

在pve中如果不小心误操作删除了系统分区的东西,或者升级调试有问题,有没有后悔药呢?有没有时间胶囊可以回到操作之前?

如果你的pve系统分区用的是zfs,是可以做到的,下面通过测试来模拟一下这个过程。

一、环境及准备

这里是用pve来测试的,先看一下挂载:

root@pve:/# df -h
Filesystem          Size  Used Avail Use% Mounted on
udev                4.8G     0  4.8G   0% /dev
tmpfs               982M  9.0M  973M   1% /run
rpool/ROOT/pve-1    108G  901M  107G   1% /
tmpfs               4.8G   66M  4.8G   2% /dev/shm
tmpfs               5.0M     0  5.0M   0% /run/lock
tmpfs               4.8G     0  4.8G   0% /sys/fs/cgroup
rpool               107G  128K  107G   1% /rpool
rpool/ROOT          107G  128K  107G   1% /rpool/ROOT
rpool/data          109G  1.4G  107G   2% /rpool/data
/dev/fuse            30M   16K   30M   1% /etc/pve
//10.5.1.222/share   32G   12G   20G  37% /mnt/pve/omv-cifs

看一下zfs list 确定rpool/ROOT/pve-1是挂载到/目录下的,可以看到目前没有任何的快照

root@pve:/# zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
rpool                      7.35G   107G    96K  /rpool
rpool/ROOT                  902M   107G    96K  /rpool/ROOT
rpool/ROOT/pve-1            902M   107G   901M  /
rpool/data                 6.46G   107G  1.31G  /rpool/data
rpool/data/vm-100-disk-0   36.3M   107G  36.3M  -
rpool/data/vm-101-disk-0   17.4M   107G  17.4M  -
rpool/data/vm-101-disk-1    919M   107G   919M  -
rpool/data/vm-101-disk-2   2.20G   107G  2.20G  -
rpool/data/vm-102-disk-0   2.00G   107G  2.00G  -

将rpool的属性修改一下,加上listsnapshots,可以用zpool get看一下属性有哪些:

root@pve:/# zpool get
missing property argument
usage:
        get [-Hp] [-o "all" | field[,...]] <"all" | property[,...]> <pool> ...

the following properties are supported:

        PROPERTY         EDIT   VALUES

        allocated          NO   <size>
        capacity           NO   <size>
        dedupratio         NO   <1.00x or higher if deduped>
        expandsize         NO   <size>
        fragmentation      NO   <percent>
        free               NO   <size>
        freeing            NO   <size>
        guid               NO   <guid>
        health             NO   <state>
        leaked             NO   <size>
        size               NO   <size>
        altroot           YES   <path>
        ashift            YES   <ashift, 9-16, or 0=default>
        autoexpand        YES   on | off
        autoreplace       YES   on | off
        bootfs            YES   <filesystem>
        cachefile         YES   <file> | none
        comment           YES   <comment-string>
        dedupditto        YES   <threshold (min 100)>
        delegation        YES   on | off
        failmode          YES   wait | continue | panic
        listsnapshots     YES   on | off
        multihost         YES   on | off
        readonly          YES   on | off
        version           YES   <version>
        feature@...       YES   disabled | enabled | active

The feature@ properties must be appended with a feature name.
See zpool-features(5).

我们需要加上listsnapshots=on

root@pve:/# zpool set listsnapshots=on rpool

二、创建快照

给rpool/ROOT创建一个名字为20190416的快照

问:为什么只能rpool/ROOT创建快照?rpool/data没有?
答:你也可以把rpool整个创建快照,整体恢复。我rpool/data下的虚拟机单独备份了,就不整体快照了,等恢复完rpool/ROOT后手工创建rpool/data,然后恢复单独的虚拟机备份。

root@pve:/# zfs snapshot -r rpool/ROOT@20190416

回车没有报错基本就创建好了,zfs list看一下

root@pve:/# zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
rpool                      7.35G   107G    96K  /rpool
rpool/ROOT                  902M   107G    96K  /rpool/ROOT
rpool/ROOT@20190416           0B      -    96K  -
rpool/ROOT/pve-1            902M   107G   901M  /
rpool/ROOT/pve-1@20190416  1.48M      -   900M  -
rpool/data                 6.46G   107G  1.31G  /rpool/data
rpool/data/vm-100-disk-0   36.3M   107G  36.3M  -
rpool/data/vm-101-disk-0   17.4M   107G  17.4M  -
rpool/data/vm-101-disk-1    919M   107G   919M  -
rpool/data/vm-101-disk-2   2.20G   107G  2.20G  -
rpool/data/vm-102-disk-0   2.00G   107G  2.00G  -

看到已经创建好了

三、备份快照

现在我们需要把快照存起来,可以挂一个物理硬盘或存到网络硬盘上,这里我们用已经挂载好的samba共享文件夹(cifs)


下面,来传送快照

~# zfs send -Rv rpool/ROOT@20190416 > /mnt/pve/omv-cifs/rpool/snaps/rpool.ROOT.2019041601

执行后会提示信息,快照大小和进度,成功后就可以在共享文件夹中看到了

root@pve:/mnt/pve/omv-cifs/rpool/snaps# ls -alh
total 0
drwxr-xr-x 2 root root    0 Apr 16 16:15 .
drwxr-xr-x 2 root root    0 Apr 16 10:51 ..
-rwxr-xr-x 1 root root 1.6G Apr 16 11:03 rpool.ROOT.2019041601

四、恢复快照

恢复用了一台virtualbox虚拟机测试
我这台虚拟机原来安装了一个pve系统,假设现在这个系统挂了,我现在把刚才备份的zfs快照恢复到这台虚拟机的pve中
需要做一下准备工作:

在虚拟机用PVE的安装ISO启动在安装界面选第二个菜单(带debug mode那个),命令提示那里ctrl+d继续,出现安装界面后点左下角的abort退出安装界面在退出安装界面后的命令行操作在虚拟机里把共享文件夹挂好 mount -t cifs -o username=用户名,password=密码 //ip/folder



/dev/sda3是需要恢复的nfs分区 然后退出fdisk准备恢复

1. 查看测试zpool

按提示加载zfs模块

2.重新创建根池

root@proxmox:/# zpool create  rpool /dev/sda3


从远程文件恢复

root@proxmox:/# cat /mnt/rpool/snaps/rpool.ROOT.2019041601 | zfs recv -Fdu rpool 

用-u选项表示zfs receive完成后不挂载恢复的文件

3. 验证根池数据集

可以看到数据和快照都恢复好了

  • 如果这时不小心退出、关机、重启,可以用cd/ iso进来后zpool import rpool重新导入池

4. 设置引导

设置bootfs属性

root@proxmox:/# zpool set bootfs=rpool/ROOT/pve-1 rpool
  • 这里如果硬盘是原硬盘,到这里重启就可以了。
  • 注意:
  • 如果无法加载zpool 会进到busybox界面,这里可以手工zpool import -N rpool成功后ctrl+d或exit继续开机(有可能提示有多个rpool,可以zpool import看一下id,然后zpool impot id -N导入)(有可能提示pool may be in use on another system,用zpool import -fN rpool导入),进系统后,需要做两步:
  • vi /etc/default/grub 把quiet改成rootdelay=4 quiet保存
  • update-grub
    这两步没做会有这个提示:
  • 如果不是原硬盘,是其他环境,就麻烦点了,看分割线下面

以下是针对不是原硬盘,是其他环境的情况:

a. 修改zpool的挂载点,用chroot进去配置

zfs set mountpoint=/mnt rpool/ROOT/pve-1
zfs mount rpool/ROOT/pve-1
mount -t proc /proc /mnt/proc
mount --rbind /dev /mnt/dev
mount --rbind /sys /mnt/sys
 
#Enter the chroot
chroot /mnt /bin/bash
source /etc/profile

b. 重新配置grub

grub-install /dev/sda   #这里的sda要根据实际情况,可以fdisk -l确认一下
update-grub2
grub-probe / 
update-initramfs -u -k all
 
zfs set mountpoint=/ rpool/ROOT/pve-1
 
#退出chroot
exit

重启后就可以了

相关推荐

10w qps缓存数据库——Redis(redis缓存调优)

一、Redis数据库介绍:Redis:非关系型缓存数据库nosql:非关系型数据库没有表,没有表与表之间的关系,更不存在外键存储数据的形式为key:values的形式c语言写的服务(监听端口),用来存...

Redis系列专题4--Redis配置参数详解

本文基于windowsX64,3.2.100版本讲解,不同版本默认配置参数不同在Redis中,Redis的根目录中有一个配置文件(redis.conf,windows下为redis.windows....

开源一夏 | 23 张图,4500 字从入门到精通解释 Redis

redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。...

redis的简单与集群搭建(redis建立集群)

Redis是什么?是开源免费用c语言编写的单线程高性能的(key-value形式)内存数据库,基于内存运行并支持持久化的nosql数据库作用主要用来做缓存,单不仅仅是做缓存,比如:redis的计数器生...

推荐几个好用Redis图形化客户端工具

RedisPlushttps://gitee.com/MaxBill/RedisPlusRedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows、Linux...

关于Redis在windows上运行及fork函数问题

Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成。微软的一些工程师花费时间在解决在...

你必须懂的Redis十大应用场景(redis常见应用场景)

Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。...

极简Redis配置(redis的配置)

一、概述Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf,linux下的是redis.conf)你可以通过C...

什么是redis,怎么启动及如何压测

从今天起咱们一起来学习一下关于“redis监控与调优”的内容。一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。...

一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI

介绍P3XRedisUI这是一个非常实用的RedisGUI,提供响应式WebUI访问或作为桌面应用程序使用,桌面端是跨平台的,而且完美支持中文界面。Githubhttps://github....

windows系统的服务器快速部署java项目环境地址

1、mysql:https://dev.mysql.com/downloads/mysql/(msi安装包)2、redis:https://github.com/tporadowski/redis/r...

window11 下 redis 下载与安装(windows安装redis客户端)

#热爱编程是一种怎样的体验#window11下redis下载与安装1)各个版本redis下载(windows)https://github.com/MicrosoftArchive/r...

一款轻量级的Redis客户端工具,贼好用!

使用命令行来操作Redis是一件非常麻烦的事情,我们一般会选用客户端工具来操作Redis。今天给大家分享一款好用的Redis客户端工具TinyRDM,它的界面清新又优雅,希望对大家有所帮助!简介Ti...

一个.NET开发且功能强大的Windows远程控制系统

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍SiMayRemoteMonitorOS是一个基于Windows的远程控制系统,完...

Redis客户端工具详解(4款主流工具)

大家好,我是mikechen。Redis是大型架构的基石,也是大厂最爱考察内容,今天就给大家重点详解4款Redis工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集...