Please enable Javascript to view the contents

Ubuntu系统dd命令备份和恢复系统

 ·  ☕ 2 分钟

重要

最重要的事:

1.简介

dd指令是一个简单的复制指令,它不管源和目标的编码、格式、数据结构,简单粗暴的把二进制数据从A复制到B。
所以恢复的目标硬盘甚至不需要提前分区,因为dd会把分区信息也写入。
不管源数据是文件、分区、磁盘还是光盘,都可以进行数据备份。

优点:

  • 操作简单

缺点:

  • 速度慢
  • 硬盘大小必须比源大

2. 操作

2.1 整盘复制

目标磁盘需要比源磁盘大。
if=表示源磁盘,of=表示目标磁盘

1
dd if=/dev/sda of=/dev/sdb

2.2 磁盘备份成文件再恢复

2.2.1 磁盘->文件

bs参数: 一次拷贝的字节数。如:bs=4096。合理使用bs参数可优化dd执行速度,bs的合理范围要参考本机的性能进行具体设置。

  • 单备份
1
dd if=/dev/sda of=/home/sda.img bs=4096
  • 备份并压缩
1
dd if=/dev/sda | gzip > /home/sda.img

2.2.2 文件->磁盘

  • 单备份
1
dd if=sdadisk.img of=/dev/sdb
  • 从压缩文件恢复
1
gzip -dc /home/sda.img | dd of=/dev/sda

2.3 分区备份

  1. 把分区直接备份到另一个分区,就需要生成一个新的分区,这个分区的大小不能比源分区小,只能和源分区大小一致或比它大。

  2. 查看磁盘sdb的分区表,查看所有分区uuid,此时各分区uuid各不相同。

1
2
df -h
blkid

备份

1
dd if=/dev/sda1 of=/dev/sdb1

恢复

1
dd if=/dev/sdb1 of=/dev/sda1

修复还原到大小不一样的分区时的设置:

1
2
3
sudo dd if=/dev/sda1 of=/dev/sdb1
sudo e2fsck -f /dev/sdb1
sudo resize2fs /dev/sdb1

2.4 查看进度

  • watch
1
watch -n 5 killall -USR1 dd

2.5 销毁磁盘数据

原磁盘包含有敏感数据,因为所有删除甚至格式化的内容都有可能使用技术手段进行还原。使用dd命令即可完全抹盘。

使用0填充整个硬盘:

1
dd if=/dev/zero of=/dev/sda1

或者,使用随机数填充整个硬盘,效果更佳:

1
dd if=/dev/urandom of=/dev/sda1

2.6 磁盘测速

1
2
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null

2.7 磁盘修复

1
dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda

2.8 制作系统盘

1
dd if=ubuntu-server-amd64.iso if=/dev/sdb

2.0 写指定大小文件

如大文件测试上传或下载的速度。下面命令生成一个文件名为 file.img 大小为 1G 的文件。

1
dd if=/dev/zero of=file.img bs=1M count=1024

参考链接

分享

Hex
作者
Hex
CloudNative Developer

目录