linux dd命令详解

目录

备份磁盘并恢复

备份时进行压缩

备份磁盘的 MBR

使用 /dev/zero 和 /dev/null 来测试磁盘

利用 /dev/urandom 进行格式化

制作U盘启动盘


dd,是 device driver 的缩写,它可以称得上是“Linux 世界中的搬运工”,它用来读取设备、文件中的内容,并原封不动地复制到指定位置。

备份磁盘并恢复

好记性不如烂笔头,好硬盘不如常备份。硬盘的损坏虽然是个小概率事件,但是一旦发生却会带来灾难性的后果。对重要数据进行备份,不仅是一个好习惯,更体现了对别人对自己负责的态度。

早期的硬盘基本都是使用 hda、hdb 这种 IDE 接口的硬盘,现在的主流硬盘已经是 SATA 接口的了,下面我们把当前的linux系统盘备份到移动硬盘中。

[root@zyq images]# df
Filesystem            1K-blocks      Used Available Use% Mounted on
/dev/mapper/rhel-root 366976000 273496108  93479892  75% /
devtmpfs               16243772         0  16243772   0% /dev
tmpfs                  16260392        24  16260368   1% /dev/shm
tmpfs                  16260392     59016  16201376   1% /run
tmpfs                  16260392         0  16260392   0% /sys/fs/cgroup
/dev/loop0              3963760   3963760         0 100% /var/ftp/pub/rhel74
/dev/loop1              6935944   6935944         0 100% /var/ftp/pub/rhel8
/dev/sda2               1038336    178112    860224  18% /boot
/dev/loop2              8086368   8086368         0 100% /var/ftp/pub/centos75
/dev/sda1                204580      9960    194620   5% /boot/efi
/dev/mapper/rhel-home 104806400  84696140  20110260  81% /home
tmpfs                   3252080        44   3252036   1% /run/user/1000
/dev/sdb1             976760828 491666928 485093900  51% /run/media/zyq/Extreme SSD
[root@zyq images]# cd /run/media/zyq/Extreme\ SSD/
[root@zyq Extreme SSD]$  dd if=/dev/sda of=./sda.img

这个命令用到了如下两个选项:

  • if=文件名:指定输入文件名或者设备名,如果省略“if=文件名”,则表示从标准输入读取。
  • of=文件名:指定输出文件名或者设备名,如果省略“of=文件名”,则表示写到标准输出。

通过上面的 dd 命令,我们得到了 sda.img 文件,它就是已经备份好了的磁盘映像文件,里面存储着 /dev/sda 整块硬盘的内容。

在未来的某天,假如 /dev/sda 硬盘真的出现了故障,我们就可以将曾经备份的 sda.img 复制到另块磁盘上,然后将还原后的磁盘替换掉坏了的硬盘。

[root@zyq ~]# dd if=/root/sda.img of=/dev/sdb

 dd 操作就是简单的按字节复制,与文件系统没有任何关系。

备份时进行压缩

其实我们在使用 dd 做备份时,可以使用 gzip 或者 bzip2 压缩算法进行数据压缩处理,这样可以大大减少我们的磁盘空间用量,也就降低了备份成本。

下面就使用 gzip 压缩算法配合 dd 命令来备份 /dev/sda 盘:

[root@zyq Extreme SSD]$  dd if=/dev/sda | gzip > of=./sda.img.gz

下面我们更换 bzip2 压缩算法配合 dd 命令再来实现一遍上面示例的效果:

[root@zyq ~]# dd if=/dev/sda | bzip2 > disk.img.bz2
[root@zyq ~]# bzip2 -dc /root/sda.img.gz | dd of=/dev/sdb

  我们之前备份的磁盘是RAW格式的,原来的磁盘是多大,备份后的文件就多大,为了进一步节省磁盘空间我们可以对备份完的RAW文件进行格式转换(转换为别的磁盘格式,绝大部分磁盘格式都比RAW格式占据的空间小),再进行压缩处理。

对于 dd 命令来说,除了 if、of 两个选项之外,还应该掌握下面这两个重要选项:

  • bs=N:设置单次读入或单次输出的数据块(block)的大小为 N 个字节。当然也可以使用 ibs 和 obs 选项来分别设置。
  • ibs=N:单次读入的数据块(block)的大小为 N 个字节,默认为 512 字节。
  • obs=N:单次输出的数据块(block)的大小为 N 个字节,默认为 512 字节。
  • count=N:表示总共要复制 N 个数据块(block)。

备份磁盘的 MBR

MBR,是 Master Boot Record,即硬盘的主引导记录,MBR 一旦损坏,分区表也就被破坏,数据大量丢失,系统就再也无法正常引导了,真是不堪设想啊!所以,对 MBR 的定期备份是十分必要的,在紧急关头,把它比喻成一颗救死扶伤的速效救心丸,也绝不为过。

一块磁盘的第一个扇区的 512 个字节所存储的正是这块磁盘的 MBR 信息,我们尝试用 dd 命令备份 MBR:

[root@zyq ~]# dd if=/dev/sda of=/root/sda_mbr.img count=1 bs=512

如果未来遇到分区表损坏的情况,我们用曾经备份的 MBR 信息写回磁盘,就能起到立竿见影的效果。下面来一起看看如何将 MBR 写回硬盘:

[root@zyq ~]# dd if=/root/sda_mbr.img of=/dev/sda

使用 /dev/zero 和 /dev/null 来测试磁盘

本段落开始前,我们要为大家介绍两位新朋友:

  • /dev/null,也叫空设备,小名“无底洞”。任何写入它的数据都会被无情抛弃。
  • /dev/zero,可以产生连续不断的 null 的流(二进制的零流),用于向设备或文件写入 null 数据,一般用它来对设备或文件进行初始化。

我们可以观察下面两个命令的执行时间,来计算出硬盘的读、写性能:

#向磁盘上写一个大文件, 来看写性能
[root@zyq ~]# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
 
#从磁盘上读取一个大文件, 来看读性能
[root@zyq ~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null

上面命令生成了一个 1GB 的文件 1Gb.file,下面我们配合 time 命令,可以看出不同的块大小数据的写入时间,从而可以测算出到底块大小为多少时可以实现最佳的写入性能。

[root@zyq ~]# time dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
[root@zyq ~]# time dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
[root@zyq ~]# time dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
[root@zyq ~]# time dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

利用 /dev/urandom 进行格式化

除了 /dev/null 和 /dev/zero 之外,还有一个很重要的文件,即 /dev/urandom,它是“随机数设备”,它的本领就是可以生成理论意义上的随机数。

[root@zyq ~]# dd if=/dev/urandom of=/dev/sda

制作U盘启动盘

还在用乱七八糟的各类工具制作启动盘吗,快试试dd这个命令

[root@zyq ~]# dd if=mycentos.iso of=/dev/sdb

if后面添加镜像文件,of后面添加U盘被识别到的设备名 

你可能感兴趣的:(linux,运维,服务器)