离线 DD 系统实战记录:从镜像到落地的完整流程

举报
yd_221669320 发表于 2026/11/10 08:40:18 2026/11/10
【摘要】 1. 背景与目标某内网环境无外网出口,需要将一批裸机快速刷成统一系统。传统 PXE 依赖 DHCP/TFTP 服务端,本次采用 DD 镜像直写 方式:离线环境,所有资源本地携带目标机器支持 U 盘引导要求无人值守、可批量复制核心思路:把系统盘做成 raw 镜像,通过 Live 环境 dd 到目标磁盘,再修复引导。2. 准备工作2.1 硬件与介质项目说明U 盘≥ 8G,用于承载 Live 系统...

1. 背景与目标

某内网环境无外网出口,需要将一批裸机快速刷成统一系统。传统 PXE 依赖 DHCP/TFTP 服务端,本次采用 DD 镜像直写 方式:

  • 离线环境,所有资源本地携带

  • 目标机器支持 U 盘引导

  • 要求无人值守、可批量复制

核心思路:把系统盘做成 raw 镜像,通过 Live 环境 dd 到目标磁盘,再修复引导。


2. 准备工作

2.1 硬件与介质



项目 说明
U 盘 ≥ 8G,用于承载 Live 系统与镜像
目标机 x86_64,UEFI/Legacy 均可
移动硬盘 存放系统镜像(可选)

2.2 软件清单(全部离线)

  • systemrescue ISO(Live 环境)

  • 目标系统 raw 镜像 system.img

  • grub2 工具链

  • parted / gdisk

  • 校验文件 sha256sum.txt


3. 制作系统镜像

在参考机上完成系统安装与配置后,制作整盘镜像:

bash
# 确认磁盘设备
lsblk

# 整盘 DD(注意 of 为目标文件,不是设备)
dd if=/dev/sda of=/mnt/usb/system.img bs=4M status=progress conv=fsync

# 生成校验
sha256sum /mnt/usb/system.img > /mnt/usb/sha256sum.txt

⚠️ 镜像大小等于整盘容量,建议先 dd 后 gzip 压缩:

bash
gzip -c system.img > system.img.gz

4. 制作 Live U 盘

使用 dd 将 ISO 写入 U 盘(Linux 下):

bash
# 确认 U 盘设备,切勿写错
lsblk
sudo dd if=systemrescue.iso of=/dev/sdX bs=4M status=progress conv=fsync
sync

Windows 下可用 Rufus,选择 DD 模式写入。


5. 目标机写入流程

5.1 进入 Live 环境

U 盘引导后进入 SystemRescue,挂载存放镜像的移动硬盘:

bash
mkdir -p /mnt/src
mount /dev/sdb1 /mnt/src
cd /mnt/src
sha256sum -c sha256sum.txt

5.2 确认目标磁盘

bash
lsblk -o NAME,SIZE,MODEL

务必核对容量与型号,写错盘不可恢复。

5.3 执行 DD 写入

bash
# 解压并直接写入(若为压缩镜像)
gzip -dc system.img.gz | dd of=/dev/sda bs=4M status=progress conv=fsync

# 或未压缩镜像
dd if=system.img of=/dev/sda bs=4M status=progress conv=fsync

5.4 同步与校验

bash
sync
blockdev --flushbufs /dev/sda

6. 引导修复

DD 后引导可能因磁盘标识变化失效,需进入 chroot 修复。

6.1 挂载目标系统

bash
# 假设根分区为 sda2,EFI 为 sda1
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi

for i in dev proc sys run; do
  mount --bind /$i /mnt/$i
done

6.2 chroot 修复 GRUB

bash
chroot /mnt /bin/bash

# UEFI 环境
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

# Legacy 环境
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

exit

6.3 卸载并重启

bash
for i in run sys proc dev; do
  umount /mnt/$i
done
umount /mnt/boot/efi
umount /mnt
reboot

7. 常见坑位

  1. UUID 变化导致挂载失败
    DD 后分区 UUID 不变,但若目标盘大小不同,分区表可能溢出。建议镜像盘 ≥ 目标盘。

  2. EFI 分区缺失
    Legacy 镜像刷到 UEFI 机器上无法引导,需提前统一引导模式。

  3. 网卡命名变化
    不同硬件网卡名可能从 eth0 变为 ens33,建议用 net.ifnames=0 或提前配置。

  4. SSH host key 重复
    批量部署后需清理 /etc/ssh/ssh_host_* 并重新生成。

  5. DD 速度慢
    使用 bs=4M 或 bs=16M,并加 status=progress 观察进度。


8. 批量优化建议

  • 将镜像放在内网 HTTP 服务器,Live 环境 curl 拉取

  • 编写自动化脚本,减少人工核对

  • 使用 partclone 替代 dd,只写有效数据,速度更快

  • 镜像制作后统一 fstrim 并清零空闲块,提升压缩率

bash
# 制作前清零空闲块
dd if=/dev/zero of=/zero.fill bs=1M || true
rm -f /zero.fill

9. 总结

DD 离线部署胜在简单直接、不依赖网络服务,适合小批量与应急场景。核心要点:

  • 镜像与目标盘容量匹配

  • 写入前双重核对设备名

  • 引导修复不可省略

  • 批量场景优先考虑 partclone + 自动化脚本

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。