离线 DD 系统实战记录:从镜像到落地的完整流程
1. 背景与目标
某内网环境无外网出口,需要将一批裸机快速刷成统一系统。传统 PXE 依赖 DHCP/TFTP 服务端,本次采用 DD 镜像直写 方式:
-
离线环境,所有资源本地携带
-
目标机器支持 U 盘引导
-
要求无人值守、可批量复制
核心思路:把系统盘做成 raw 镜像,通过 Live 环境 dd 到目标磁盘,再修复引导。
2. 准备工作
2.1 硬件与介质
| 项目 | 说明 |
|---|---|
| U 盘 | ≥ 8G,用于承载 Live 系统与镜像 |
| 目标机 | x86_64,UEFI/Legacy 均可 |
| 移动硬盘 | 存放系统镜像(可选) |
2.2 软件清单(全部离线)
-
systemrescueISO(Live 环境) -
目标系统 raw 镜像
system.img -
grub2工具链 -
parted/gdisk -
校验文件
sha256sum.txt
3. 制作系统镜像
在参考机上完成系统安装与配置后,制作整盘镜像:
# 确认磁盘设备 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压缩:bashgzip -c system.img > system.img.gz
4. 制作 Live U 盘
使用 dd 将 ISO 写入 U 盘(Linux 下):
# 确认 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,挂载存放镜像的移动硬盘:
mkdir -p /mnt/src mount /dev/sdb1 /mnt/src cd /mnt/src sha256sum -c sha256sum.txt
5.2 确认目标磁盘
lsblk -o NAME,SIZE,MODEL
务必核对容量与型号,写错盘不可恢复。
5.3 执行 DD 写入
# 解压并直接写入(若为压缩镜像) 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 同步与校验
sync blockdev --flushbufs /dev/sda
6. 引导修复
DD 后引导可能因磁盘标识变化失效,需进入 chroot 修复。
6.1 挂载目标系统
# 假设根分区为 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
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 卸载并重启
for i in run sys proc dev; do umount /mnt/$i done umount /mnt/boot/efi umount /mnt reboot
7. 常见坑位
-
UUID 变化导致挂载失败
DD 后分区 UUID 不变,但若目标盘大小不同,分区表可能溢出。建议镜像盘 ≥ 目标盘。 -
EFI 分区缺失
Legacy 镜像刷到 UEFI 机器上无法引导,需提前统一引导模式。 -
网卡命名变化
不同硬件网卡名可能从eth0变为ens33,建议用net.ifnames=0或提前配置。 -
SSH host key 重复
批量部署后需清理/etc/ssh/ssh_host_*并重新生成。 -
DD 速度慢
使用bs=4M或bs=16M,并加status=progress观察进度。
8. 批量优化建议
-
将镜像放在内网 HTTP 服务器,Live 环境
curl拉取 -
编写自动化脚本,减少人工核对
-
使用
partclone替代dd,只写有效数据,速度更快 -
镜像制作后统一
fstrim并清零空闲块,提升压缩率
# 制作前清零空闲块 dd if=/dev/zero of=/zero.fill bs=1M || true rm -f /zero.fill
9. 总结
DD 离线部署胜在简单直接、不依赖网络服务,适合小批量与应急场景。核心要点:
-
镜像与目标盘容量匹配
-
写入前双重核对设备名
-
引导修复不可省略
-
批量场景优先考虑 partclone + 自动化脚本
- 点赞
- 收藏
- 关注作者
评论(0)