当前位置: 首页 > news >正文

Ubuntu 全盘备份

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


一、确认要备份的硬盘

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

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

sudo mkdir /mnt/backup
sudo mount /dev/sdb1 /mnt/backup

检查挂载是否成功:

df -h /mnt/backup

三、执行全盘备份

最简单的完整备份命令:

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 :实时显示进度

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

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

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


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

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

sudo dd if=/dev/sda of=/mnt/backup/mbr.img bs=512 count=1

四、恢复步骤

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

sudo dd if=/mnt/backup/ubuntu.img of=/dev/sda bs=64K status=progress

如果是压缩的:

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)

#!/bin/bash
# Ubuntu 全盘备份/恢复脚本(带防误操作机制)set -eBACKUP_DIR="/mnt/backup"echo "==== 检测可用磁盘 ===="
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
echo "====================="read -p "请输入系统盘(源盘)设备名,例如 sda: " SRC_DISK
read -p "请再次确认系统盘设备名(必须和上面相同): " SRC_DISK_CONFIRMif [ "$SRC_DISK" != "$SRC_DISK_CONFIRM" ]; thenecho "❌ 磁盘名不一致,退出!"exit 1
fiSRC_PATH="/dev/$SRC_DISK"if [ ! -b "$SRC_PATH" ]; thenecho "❌ $SRC_PATH 不是有效磁盘!"exit 1
firead -p "请输入外部存储分区(用于保存备份),例如 sdb1: " EXT_PART
EXT_PATH="/dev/$EXT_PART"if [ ! -b "$EXT_PATH" ]; thenecho "❌ $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): " MODEDATE=$(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): " CONFIRMif [ "$CONFIRM" != "yes" ]; thenecho "❌ 已取消"exit 1fiecho "开始备份..."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_FILEif [ ! -f "$RESTORE_FILE" ]; thenecho "❌ 文件不存在!"exit 1fi# 如果有校验文件,先验证if [ -f "$RESTORE_FILE.sha256" ]; thenecho "检测到校验文件,开始验证..."sha256sum -c "$RESTORE_FILE.sha256"elseecho "⚠️ 没有校验文件,跳过验证"firead -p "最后确认恢复吗?这会覆盖 $SRC_PATH (yes/no): " FINAL_CONFIRMif [ "$FINAL_CONFIRM" != "yes" ]; thenecho "❌ 已取消"exit 1fiecho "开始恢复..."gzip -dc "$RESTORE_FILE" | sudo dd of="$SRC_PATH" bs=64K status=progress conv=sync,noerrorecho "✅ 恢复完成!"elseecho "❌ 无效选项"exit 1
fisudo umount "$BACKUP_DIR"
echo "已卸载外部存储"

使用方法

  1. 保存为 backup_restore_dd.sh

  2. 赋予执行权限:

    chmod +x backup_restore_dd.sh
    
  3. 运行:

    ./backup_restore_dd.sh
    

安全特性

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

我建议你以后所有 dd 相关操作都用这个脚本,因为它帮你加了防呆保护。
如果你愿意,我可以帮你再加一个 Live USB 自动运行版本,这样插入启动盘就能直接执行全盘备份/恢复,不必进入系统。这样出错几率几乎为零。

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

http://www.dtcms.com/a/328518.html

相关文章:

  • 九尾狐未来机械晶核技术
  • k3s部署
  • 电脑硬件详解
  • ZYNQ AXI-GPIO学习——ZYNQ学习笔记8
  • 学习游制作记录(背包UI以及各种物品的存储)8.12
  • kafka 消费者组的概念是什么?它是如何实现消息的点对点和发布/订阅模式?
  • Supabase快速入门与实战指南
  • LangChain 入门学习
  • Spring AI Alibaba - 聊天机器人快速上手
  • SpringAI 使用通义千问进行聊天对话开发
  • 考研复习-计算机组成原理-第五章-CPU
  • [NoC]Outstanding和Credit的概念详解
  • Fluent Bit 日志合并正则表达式(上)
  • Nginx 高级配置
  • Python训练Day41
  • 基于PAI-ChatLearn的GSPO强化学习实践
  • LLM - 搭建 Grounded SAM 2 模型的视觉检测与分割服务 API
  • CMake笔记:PUBLIC/PRIVATE/INTERFACE的使用
  • FreeRTOS---基础知识6---事件组
  • Effective C++ 条款37:绝不重新定义继承而来的缺省参数值
  • Linux系统编程Day13 -- 程序地址空间
  • Vue3 整合高德地图完成搜索、定位、选址功能,已封装为组件开箱即用(最新)
  • 前端对接豆包AI(vue3+TS版本)
  • 力扣-739.每日温度
  • Leetcode-138. 复制带随机指针的链表
  • AI智能体的“四大支柱”:CAP框架核心层、执行层、约束层、操作层详解​
  • 手机蓝牙无感开锁在智能柜锁与智能箱包中的整体解决方案
  • Iptables 详细使用指南
  • 10-docker基于dockerfile自动制作镜像
  • 计算机网络摘星题库800题笔记 第5章 传输层