频道栏目
首页 > 资讯 > Linux > 正文

linux dd命令的使用介绍

18-04-11        来源:[db:作者]  
收藏   我要投稿

dd命令用于复制文件并对原文件的内容进行转换和格式化处理。

建议在有需要的时候使用dd 对物理磁盘操作,如果是文件系统的话还是使用tar backup cpio等其他命令更加方便。另外,使用dd对磁盘操作时,最好使用块设备文件。

[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s

[root@localhost text]# du -sh sun.txt 
1.1M    sun.txt

该命令创建了一个1M大小的文件sun.txt,其中参数解释:

if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。 of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。 bs 代表字节为单位的块大小。 count 代表被复制的块数。 /dev/zero 是一个字符设备,会不断返回0值字节(\0)

Linux中I/O设备分为两类:字符设备和块设备。两种设备本身没有严格限制,但是,基于不同的功能进行了分类。
(1)字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。
举例来说,键盘、串口、调制解调器都是典型的字符设备。
(2)块设备:应用程序可以随机访问设备数据,程序可自行确定读取数据的位置。硬盘、软盘、CD-ROM驱动器和闪存都是典型的块设备,
应用程序可以寻址磁盘上的任何位置,并由此读取数据。此外,数据的读写只能以块(通常是512B)的倍数进行。与字符设备不同,块设备并不支持基于字符的寻址。
总结一下,这两种类型的设备的根本区别在于它们是否可以被随机访问。字符设备只能顺序读取,块设备可以随机读取。

dd是一个非常使用高效的命令,他的作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

一、备份

备份整个磁盘到磁盘

#将sdx整盘备份到sdy中去
dd if=/dev/sdx  of=/dev/dev/sdy

备份整盘到目录

#将sdx整盘被分到目录中去
dd if=/dev/sdx  of=/PATH/back

整盘备份并压缩

#整盘压缩后备份到制动路径
dd if=/dev/sdx  | gzip > /path/back.gz

二、恢复

整盘恢复

#磁盘到磁盘
dd if=/dev/sdy of=/dev/md0
#目录到磁盘
dd if=/PATH/dir of=/dev/md0

整盘的压缩文件恢复

#将文件解压缩到标准输出,通过管道用dd输出到磁盘
#-d解压;-c解压缩到标准输出
gzip -dc /path/back.gz | dd of=/dev/md0

三、测试

得到最恰当的block size

#通过执行时间确定系统的最佳block size
dd if=/dev/zero bs=1024 count=1000000 of=/G.file
dd if=/dev/zero bs=2048 count=500000 of=/G.file
dd if=/dev/zero bs=4096 count=250000 of=/G.file

测试读写速度

#测试读
dd if=/dev/zero of=/1G.file bs=1024 count=1000000
#测试写
dd if=/1G.file bs=64k | dd of=/dev/null

四、MBR表的备份与恢复

dd if=/dev/sdx of=sdxmbr.bak bs=512 count=1
dd if=sdxmbr.bak of=/dev/sdx bs=512 count=1

四、其他

修复硬盘

当硬盘长时间未使用,磁盘会产生消磁点。当磁头读到这些区域时会遇到困难,容易产生I/O错误。如果这些情况发生到第一个扇区时,可能会导致报废。所以使用磁盘修复功能,这个过程安全高效

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

复制内存中的数据

dd if=/dev/mem  of=/root/mem.bin bs=1024

生成镜像

dd if=/dev/cdrom of=/root/cdrom.iso

销毁磁盘数据

#利用随机数填充数据,
dd if=/dev/urandom  of=/dev/sda1

自己的一点新理解(可能与题 主的 “站在应用的角度”不合,但如果真要在应用程序的角度,大多是不需要考虑设备类型的,只需要关心操作系统抽象出来的接口就可以了。除非你的应用有自己的io管理,比如oracle的asm,操作系统只需要把系统识别到的原始设备暴露给oracle,并把设备的属主给oracle,oracle会有自己的抽象层来对原始设备进行管理自己完成和自己上层应用的交互):

@in nek 曾提到的我们 受 到国内教材的 毒害(字符设备 的顺序访问,块设备 的随机访问 ),国外 好像 也是这样的教材。

相关TAG标签
上一篇:不小心把linux系统文件删除了怎么办?linux救援模式介绍
下一篇:[VMware]关于升级VMware Workstation 14后虚拟机出现内存不足的问题怎么解决?
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站