标签搜索

Linux命令-dd(device driver)

jjiaper
2022-08-04 / 16 评论 / 54 阅读 / 正在检测是否收录...

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

本文摘抄自(CSDN博主) 江湖有缘

当我们用 dd 命令读取 /dev/null 文件时,就可以创造出空洞文件,而如果你的磁盘足够大,你甚至可以创造出一个宇宙黑洞呢!

一、备份磁盘并恢复

之前看过一些介绍 dd 的文章,例子中基本都是使用 hda、hdb 这种 IDE 接口的硬盘,其实现在的主流硬盘已经是 SATA 接口的了,下面我要备份的硬盘是 dev/sda,它就是块 SATA 盘。

dd if=/dev/sda of=/root/sda.img

这个命令将 sda 盘备份到指定文件 /root/sda.img 中去,其中用到了如下两个选项:

  • if=文件名:指定输入文件名或者设备名,如果省略“if=文件名”,则表示从标准输入读取。
  • of=文件名:指定输出文件名或者设备名,如果省略“of=文件名”,则表示写到标准输出。
    通过上面的 dd 命令,我们得到了 sda.img 文件,它就是已经备份好了的磁盘映像文件,里面存储着 /dev/sda 整块硬盘的内容。

在未来的某天,假如 /dev/sda 硬盘真的出现了故障,我们就可以将曾经备份的 sda.img 复制到另一台电脑上,并将其恢复到指定的 sdb 盘中去。

dd if=/root/sda.img of=/dev/sdb

如果能把目标硬盘直接连接到我们现在的电脑上,并让系统识别到这块新硬盘,例如识别成 /dev/sdc,那么我们可以直接使用 dd 命令将 sda 盘复制到 sdc 中去。这种用法既可以用来整盘备份,也可以用来快速复制系统环境。下面来看看具体的命令:

dd if=/dev/sda of=/dev/sdc

对 dd 来说,所有设备和文件都一视同仁,所谓的“备份”和“恢复”,dd 都认为是一种内容的复制。

二、分区、内存、软盘一个都不能少

如果只是想备份某一个分区的数据,操作如下:

dd if=/dev/sda2 of=/root/sda_part1.img

同理,将内存中的数据整体备份,照样可以如法炮制:

dd if=/dev/mem of=/root/mem.img

随着科技的飞速发展,无论是台式机还是笔记本,都已经取消了软驱和光驱设备,软盘和光盘也已经接近灭绝的边缘,很多九零后们应该都不知道软驱为何物了吧。所以接下来要介绍的软盘、光盘备份法:

备份软盘

dd if=/dev/fd0 of=/root/fd0.img count=1 bs=1440k

备份光盘

dd if=/dev/cdrom of=/root/cd.img

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

  • bs=N:设置单次读入或单次输出的数据块(block)的大小为 N 个字节。当然也可以使用 ibs 和 * obs 选项来分别设置。
  • ibs=N:单次读入的数据块(block)的大小为 N 个字节,默认为 512 字节。
  • obs=N:单次输出的数据块(block)的大小为 N 个字节,默认为 512 字节。
  • count=N:表示总共要复制 N 个数据块(block)。
    所以这里备份的软盘大小是 1440kB,可以看出这是一块 3 寸盘,其大小为 1.44MB。
    全部选项

    #输入文件名,缺省为标准输入。 从file读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)
    if=file
    #输出文件名,缺省为标准输出。 向file写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO)
    of=file 
    #一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
    ibs=bytes 
    #一次写 bytes 个字节(即一个块大小为 bytes 个字节)。 
    obs=bytes 
    #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs。如bs=8k 每次读或写的大小,即一个块的大小为8K。 
    bs=bytes
    # 一次转换 bytes 个字节,即转换缓冲区大小。 
    cbs=bytes 
    #从输入文件开头跳过 blocks 个块后再开始复制。 
    skip=blocks 
    #从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。 
    seek=blocks  
    #仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
    count=blocks
    #指定读的方式FLAGS,参见“FLAGS参数说明”oflag=FLAGS指定写的方式FLAGSflag=FLAGS
    #用指定的参数转换文件。    
    conv=conversion 
      ascii:转换ebcdic为ascii 
      ebcdic:转换ascii为ebcdic 
      ibm:转换ascii为alternate ebcdic 
      block:把每一行转换为长度为cbs,不足部分用空格填充 
      unblock:使每一行的长度都为cbs,不足部分用空格填充 
      lcase:把大写字符转换为小写字符 
      ucase:把小写字符转换为大写字符 
      swab:交换输入的每对字节 
      noerror:出错时不停止 
      notrunc:不截短输出文件 
      sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。 flags参数
    

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

    本段落开始前,先介绍下面两个参数:

  • /dev/null,也叫空设备,小名“无底洞”。任何写入它的数据都会被无情抛弃。
  • /dev/zero,可以产生连续不断的 null 的流(二进制的零流),用于向设备或文件写入 null 数据,一般用它来对设备或文件进行初始化。
    我们可以观察下面两个命令的执行时间,来计算出硬盘的读、写性能:

向磁盘上写一个大文件, 来看写性能

dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

从磁盘上读取一个大文件, 来看读性能

dd if=/root/1Gb.file bs=64k | dd of=/dev/null

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

time dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
time dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
time dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
time dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

四、利用 /dev/urandom 进行格式化

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

如果我们想清除硬盘里的某些机密数据,就可以使用 /dev/urandom 这个随机数生成器来产生随机数据,写到磁盘上,以确保将磁盘原始数据完全覆盖掉。

dd if=/dev/urandom of=/dev/sda
0

评论 (16)

取消
  1. 头像
    btbthxqnjt
    Windows 10 · Google Chrome

    博主真是太厉害了!!!

    回复
  2. 头像
    mzaafcsngb
    Windows 10 · Google Chrome

    看的我热血沸腾啊

    回复
  3. 头像
    kglqcunxcp
    Windows 10 · Google Chrome

    不错不错,我喜欢看 https://www.237fa.com/

    回复
  4. 头像
    godresfhhi
    Windows 10 · Google Chrome

    看的我热血沸腾啊https://www.ea55.com/

    回复
  5. 头像
    gtfpzvlnov
    Windows 10 · Google Chrome

    不错不错,我喜欢看 www.jiwenlaw.com

    回复
  6. 头像
    bliqfnocxb
    Windows 10 · Google Chrome

    哈哈哈,写的太好了https://www.cscnn.com/

    回复
  7. 头像
    kujizmuopi
    Windows 10 · Google Chrome

    如何调整传奇私服背包透明UI设置以达到最佳效果?:https://501h.com/heji/2024-09-08/33742.html

    回复
  8. 头像
    kkvtdarqzy
    Windows 10 · Google Chrome

    博主太厉害了!

    回复
  9. 头像
    gepqxwcbkk
    Windows 10 · Google Chrome

    《混沌金乌动态漫画》国产动漫高清在线免费观看:https://www.jgz518.com/xingkong/31669.html

    回复
  10. 头像
    xvbwwwwiam
    Windows 10 · Google Chrome

    《黑子的篮球:影与光》动画片高清在线免费观看:https://www.jgz518.com/xingkong/53497.html

    回复
  11. 头像
    yzsfyqvvbb
    Windows 10 · Google Chrome

    《混沌金乌动态漫画》国产动漫高清在线免费观看:https://www.jgz518.com/xingkong/31669.html

    回复
  12. 头像
    uministdmx
    Windows 10 · Google Chrome

    《黑子的篮球:影与光》动画片高清在线免费观看:https://www.jgz518.com/xingkong/53497.html

    回复
  13. 头像
    ogipbumdpe
    Windows 10 · Google Chrome

    《钓鱼岛真相》记录片高清在线免费观看:https://www.jgz518.com/xingkong/100723.html

    回复
  14. 头像
    ztvqhenfhr
    Windows 10 · Google Chrome

    《三国杀:太平天书》国产动漫高清在线免费观看:https://www.jgz518.com/xingkong/127229.html

    回复
  15. 头像
    sqqjbglvjk
    Windows 10 · Google Chrome

    《她来自台北》喜剧片高清在线免费观看:https://www.jgz518.com/xingkong/11932.html

    回复
  16. 头像
    iwlwjbajso
    Windows 10 · Google Chrome

    哈哈哈,写的太好了https://www.lawjida.com/

    回复