Ubuntu 全盘备份

好,那我给你做一个 Ubuntu 全盘备份(dd 方法) 的完整实操步骤,从准备、备份到恢复都写清楚。


一、确认要备份的硬盘

先确认你的系统安装在哪个硬盘上,比如 /dev/sda/dev/nvme0n1 等。

bash 复制代码
lsblk

示例输出:

复制代码
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0   50G   0 part /
└─sda3   8:3    0 415.3G  0 part /home
sdb      8:16   0 931.5G  0 disk

上面 sda 是系统盘,sdb 是另一块空盘,可以用来保存备份。

⚠️ 确认系统盘名字,千万不要选错,不然恢复的时候会毁掉数据。


二、挂载备份存放位置

建议用另一块硬盘、U 盘、或 NAS 保存备份,不要放到同一块硬盘。

例如 /dev/sdb1 挂载到 /mnt/backup

bash 复制代码
sudo mkdir /mnt/backup
sudo mount /dev/sdb1 /mnt/backup

检查挂载是否成功:

bash 复制代码
df -h /mnt/backup

三、执行全盘备份

最简单的完整备份命令:

bash 复制代码
sudo dd if=/dev/sda of=/mnt/backup/ubuntu.img bs=64K status=progress

参数解释:

  • if=/dev/sda :输入文件是系统盘
  • of=/mnt/backup/ubuntu.img :输出镜像文件保存位置
  • bs=64K :一次读写 64KB(速度和稳定性的平衡)
  • status=progress :实时显示进度

可选:加压缩减少文件大小

bash 复制代码
sudo dd if=/dev/sda bs=64K status=progress | gzip > /mnt/backup/ubuntu.img.gz

压缩后的文件会更小,尤其适合 SSD/HDD 存在大量空闲空间时。


可选:备份 MBR(引导扇区)

如果只想备份引导信息(512字节):

bash 复制代码
sudo dd if=/dev/sda of=/mnt/backup/mbr.img bs=512 count=1

四、恢复步骤

恢复会完全覆盖目标盘,所以非常危险,一定要确认磁盘名!

bash 复制代码
sudo dd if=/mnt/backup/ubuntu.img of=/dev/sda bs=64K status=progress

如果是压缩的:

bash 复制代码
gzip -dc /mnt/backup/ubuntu.img.gz | sudo dd of=/dev/sda bs=64K status=progress

恢复完成后,直接重启就能进入原系统(分区、数据、引导全都一样)。


五、安全建议

  1. 千万确认磁盘名:恢复时如果写错磁盘,会瞬间覆盖数据。
  2. 备份文件尽量放在不同设备,不要和源盘同一个硬盘。
  3. 备份过程可能会花很久(几十分钟到几个小时,取决于硬盘大小)。
  4. 建议在 Live USB 模式(Ubuntu 安装盘)下做备份,这样系统不会在运行中改变数据。

如果你愿意,我可以帮你画一个全盘 dd 备份/恢复的操作流程图 ,这样做时可以直接照图走,几乎不会出错。

要我帮你画吗?这样你一眼就能看懂每一步。


好,那我给你写一个 带防误操作机制的 Ubuntu dd 全盘备份/恢复脚本,加了多重确认和校验功能,避免误操作抹掉数据。


脚本功能

  • 自动检测本机磁盘
  • 区分系统盘和外部存储
  • 让用户选择 备份恢复 模式
  • 至少 2 次确认磁盘名
  • 自动生成 SHA256 校验文件(备份时)
  • 恢复前自动验证校验码(可选)
  • conv=sync,noerror 防止坏扇区导致中断

脚本内容(backup_restore_dd.sh)

bash 复制代码
#!/bin/bash
# Ubuntu 全盘备份/恢复脚本(带防误操作机制)

set -e

BACKUP_DIR="/mnt/backup"

echo "==== 检测可用磁盘 ===="
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
echo "====================="

read -p "请输入系统盘(源盘)设备名,例如 sda: " SRC_DISK
read -p "请再次确认系统盘设备名(必须和上面相同): " SRC_DISK_CONFIRM

if [ "$SRC_DISK" != "$SRC_DISK_CONFIRM" ]; then
    echo "❌ 磁盘名不一致,退出!"
    exit 1
fi

SRC_PATH="/dev/$SRC_DISK"

if [ ! -b "$SRC_PATH" ]; then
    echo "❌ $SRC_PATH 不是有效磁盘!"
    exit 1
fi

read -p "请输入外部存储分区(用于保存备份),例如 sdb1: " EXT_PART
EXT_PATH="/dev/$EXT_PART"

if [ ! -b "$EXT_PATH" ]; then
    echo "❌ $EXT_PATH 不是有效分区!"
    exit 1
fi

# 挂载外部硬盘
sudo mkdir -p "$BACKUP_DIR"
sudo mount "$EXT_PATH" "$BACKUP_DIR"

echo "已挂载外部存储到 $BACKUP_DIR"
df -h "$BACKUP_DIR"

echo "请选择模式:"
echo "1) 备份系统盘"
echo "2) 恢复系统盘"
read -p "请输入选项 (1/2): " MODE

DATE=$(date +%Y%m%d_%H%M%S)

if [ "$MODE" == "1" ]; then
    # 备份模式
    BACKUP_FILE="$BACKUP_DIR/ubuntu-$DATE.img.gz"
    echo "⚠️ 备份将创建文件:$BACKUP_FILE"
    read -p "确认执行备份吗?(yes/no): " CONFIRM
    if [ "$CONFIRM" != "yes" ]; then
        echo "❌ 已取消"
        exit 1
    fi

    echo "开始备份..."
    sudo dd if="$SRC_PATH" bs=64K status=progress conv=sync,noerror | gzip > "$BACKUP_FILE"
    echo "生成 SHA256 校验文件..."
    sha256sum "$BACKUP_FILE" > "$BACKUP_FILE.sha256"
    echo "✅ 备份完成!文件保存在 $BACKUP_FILE"

elif [ "$MODE" == "2" ]; then
    # 恢复模式
    echo "⚠️ 恢复将完全覆盖 $SRC_PATH 的数据!"
    read -p "请输入要恢复的备份文件路径(.gz 格式): " RESTORE_FILE
    if [ ! -f "$RESTORE_FILE" ]; then
        echo "❌ 文件不存在!"
        exit 1
    fi

    # 如果有校验文件,先验证
    if [ -f "$RESTORE_FILE.sha256" ]; then
        echo "检测到校验文件,开始验证..."
        sha256sum -c "$RESTORE_FILE.sha256"
    else
        echo "⚠️ 没有校验文件,跳过验证"
    fi

    read -p "最后确认恢复吗?这会覆盖 $SRC_PATH (yes/no): " FINAL_CONFIRM
    if [ "$FINAL_CONFIRM" != "yes" ]; then
        echo "❌ 已取消"
        exit 1
    fi

    echo "开始恢复..."
    gzip -dc "$RESTORE_FILE" | sudo dd of="$SRC_PATH" bs=64K status=progress conv=sync,noerror
    echo "✅ 恢复完成!"

else
    echo "❌ 无效选项"
    exit 1
fi

sudo umount "$BACKUP_DIR"
echo "已卸载外部存储"

使用方法

  1. 保存为 backup_restore_dd.sh

  2. 赋予执行权限:

    bash 复制代码
    chmod +x backup_restore_dd.sh
  3. 运行:

    bash 复制代码
    ./backup_restore_dd.sh

安全特性

  • 两次确认磁盘名 → 避免 of= 写错盘
  • 自动挂载外部存储 → 防止写到系统盘
  • 模式选择 → 明确是备份还是恢复
  • 恢复前可校验 SHA256 → 确保数据完整
  • conv=sync,noerror → 遇坏扇区继续备份/恢复
  • 挂载完成才操作 → 避免空路径误写

我建议你以后所有 dd 相关操作都用这个脚本,因为它帮你加了防呆保护。

如果你愿意,我可以帮你再加一个 Live USB 自动运行版本,这样插入启动盘就能直接执行全盘备份/恢复,不必进入系统。这样出错几率几乎为零。

你要我帮你做这个 自动运行 Live USB 版本 吗?这样连命令都不用敲了。

相关推荐
喵叔哟5 分钟前
42.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成认证(一)
运维·微服务·.net
ChironW3 小时前
Ubuntu 22.04 离线环境下完整安装 Anaconda、CUDA 12.1、NVIDIA 驱动及 cuDNN 8.9.3 教程
linux·运维·人工智能·深度学习·yolo·ubuntu
池以遇3 小时前
云原生高级——nginx
运维·nginx·云原生
你无法关注此用户3 小时前
CentOS7搭建安全FTP服务器指南
运维·服务器
TG_yunshuguoji4 小时前
阿里云国际DDoS高防:添加网站配置指南
运维·后端·阿里云
轻松Ai享生活4 小时前
linux 日志详解
linux
小白的代码日记4 小时前
Linux常用指令
linux·运维·服务器
月舞之剑5 小时前
linux离线安装nodejs
linux·node.js
维尔切5 小时前
Linux中Https配置与私有CA部署指南
linux·运维·https