Linux dd命令操作磁盘
Linux dd命令操作磁盘
Linux dd命令操作磁盘
dd所执行的是简单粗暴的按字节复制,什么分区表啊,MBR啊统统照搬
dd参数说明
if =输入文件(或设备名称)。
of =输出文件(或设备名称)。
ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。
obs = bytes 一次写入bytes字节,即写 入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置obs和obs)。
cbs = bytes 一次转换bytes字节。
count = blocks 只拷贝输入的blocks块。
conv = ASCII 把EBCDIC码转换为ASCII码。
conv = ebcdic 把ASCII码转换为EBCDIC码。
conv = ibm 把ASCII码转换为alternate EBCDIC码。
conv = blick 把变动位转换成固定字符。
conv = ublock 把固定们转换成变动位
conv = ucase 把字母由小写变为大写。
conv = lcase 把字母由大写变为小写。
conv = notrunc 不截短输出文件。
conv = swab 交换每一对输入字节。
conv = noerror 出错时不停止处理。
conv = sync 把每个输入记录的大小都调到ibs的大小(用ibs填充)。
fdformat命令 低级格式化软盘。
实例:创建一个100M的空文件
dd if=/dev/zero of=hello.txt bs=100M count=1
磁盘镜像克隆
全部克隆
也就是把整个硬盘复制一份。当然你首先需要在计算机上在接上一块新硬盘,并让系统识别。例如这块硬盘可能被识别为/dev/sdb,原有硬盘叫/dev/sda. 然后你可以在linux命令行上简单地执行:
dd if=/dev/sda of=/dev/sdb
此命令完成后,你的第二块硬盘上(/dev/sdb)将有一个和第一块硬盘一模一样的副本,也是可以启动的。因为dd操作就是简单的按字节复制,什么分区表啊,MBR啊统统照搬。
当然你也可以做一些微调,来定制一下克隆操作。例如你可能希望把硬盘上的内容全部备份到一个磁盘文件中,而不是另一块新硬盘,你可以
dd if=/dev/sda of=~/disk1.img
之后,disk1.img就是备份好的磁盘映像文件,你可以复制或转移到其他介质也可以压缩一下:
gzip disk1.img #generates disk1.img.gz
或者在创建磁盘映像文件的同时就执行压缩:
dd if=/dev/sda | gzip > disk.img.gzdd if=/dev/sda | bzip2 > disk.img.bz2
分区克隆
如果我们不想克隆整块磁盘,只想把某些存放数据的分区备份一下,你会需要克隆一个分区。正如预备知识所述,分区在linux下也是一个文件。例如
dd if=/dev/sda1 of=~/part1.img
将把第一块磁盘的第一个分区备份到名为part1.img的文件中。
也可以进行分区复制:
dd if=/dev/hda1 of=/dev/hda3
将把分区一原样复制到分区3.
从镜像文件恢复磁盘或分区
很简单,把上面命令中,of和if指向的文件名互换一下即可实现恢复。例如
dd if=disk1.img of=/dev/sda
把保存在disk1.img中的映像恢复到第一块磁盘
dd if=part1.img of=/dev/hda2
把保存在part1.img中的映像恢复到第一块硬盘的第二个分区
最后,需要注意一点是,无论备份还是恢复,都需要保证 of 指向的文件或磁盘空间要大于 if 指向的内容,因为是按字节复制 如果没有足够的空间去存储内容,备份自然会失败。
数据备份与恢复
备份
将本地的/dev/hdx整盘备份到/dev/hdy :
dd if=/dev/hdx of=/dev/hdy
将/dev/hdx全盘数据备份到指定路径的image文件:
dd if=/dev/hdx of=/path/to/image
备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径:
dd if=/dev/hdx | gzip >/path/to/image.gz
恢复
将备份文件恢复到指定盘:
dd if=/path/to/image of=/dev/hdx
将压缩的备份文件恢复到指定盘 :
gzip -dc /path/to/image.gz | dd of=/dev/hdx
备份MBR
备份:
备份磁盘开始的512Byte大小的MBR信息到指定文件:
dd if=/dev/hdx of=/path/to/image count=1 bs=512
恢复:
将备份的MBR信息写到磁盘开始部分:
dd if=/path/to/image of=/dev/hdx
其它实例分析
备份软盘
dd if=/dev/fd0 of=disk.img count=1 bs=1440k
将软驱数据备份到当前目录的disk.img文件
拷贝内存资料到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
得到最恰当的block size
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小
测试硬盘读写速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度
修复硬盘
当硬盘较长时间(比如一两年年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到
这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致
硬盘报废。下面的命令有可能使这些数据起死回生。且这个过程是安全,高效的。
dd if=/dev/sda of=/dev/sda
销毁磁盘数据
dd if=/dev/urandom of=/dev/hda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。
用dd命令制作硬盘镜像的特点
- 在制作镜像时,不能对需要进行备份的硬盘进行写操作,可以只读挂载或者不挂载
- 在制作镜像时,MBR、硬盘的分区表、bootloader也会被备份
- 生成的镜像文件用于恢复时,目标硬盘的容量必须等于或大于源硬盘的容量
- 使用硬盘镜像完成恢复后,由于目标硬盘的分区表跟源硬盘的分区表是一样的,所以会造成目标硬盘的空间浪费。这个问题可以通过使用硬盘分区大小调整工具解决。
- 在dd生成或恢复镜像时,默认没有显示进度,但这个问题可以解决。解决方法请看下文。
显示dd命令进度
想要查看上面的dd命令的执行进度,可以使用下面几种方法:
比如:每5秒输出dd的进度
方法一:
watch -n 5 pkill -USR1 ^dd$
方法二:
watch -n 5 killall -USR1 dd
方法三:
while killall -USR1 dd; do sleep 5; done
方法四:
while (ps auxww |grep " dd " |grep -v grep |awk '{print $2}' |while read pid; do kill -USR1 $pid; done) ; do sleep 5; done
上述四种方法中使用三个命令:pkill、killall、kill向dd命令发送SIGUSR1信息,dd命令进程接收到信号之后就打印出自己当前的进度。
- 【Linux】dd命令操作磁盘与镜像
- dd命令测试linux磁盘读写速度操作
- 使用dd命令测试linux磁盘读写速度的方法
- 在Linux下创建一个大文件,即制造磁盘I/O异常,使用dd命令
- dd命令测试linux磁盘读写速度
- linux 磁盘挂载操作
- 关于linux的磁盘和分区的操作(一)
- Linux iostat --对系统磁盘操作进行监控 2013年7月4日
- linux磁盘写操作实时跟踪
- Linux下fdisk命令操作磁盘详解--添加、删除、转换分区等
- Linux中VMware虚拟机增加磁盘空间的扩容操作[图文]
- Linux磁盘挂载、分区、扩容操作
- linux磁盘操作
- Linux基础02:磁盘操作,文件权限、文件及文件夹操作、网络服务
- Linux新增磁盘与LVM逻辑卷操作
- Linux系统磁盘已满的处理操作
- linux命令之磁盘和文件系统操作
- linux 磁盘操作
- linux下磁盘操作命令
- Linux下使用DD命令测试磁盘读写速度