Linux下dd命令生成指定大小的虚拟块设备文件

发布时间:2020-09-22编辑:脚本学堂
本文介绍下,在linux系统中,使用dd命令生成指定大小的虚拟块设备文件的方法,有兴趣的朋友,可以作个参考。

本节主要内容:
dd命令生成指定大小的虚拟块设备文件

什么是虚拟块设备文件
虚拟块设备文件的通用名称为:硬盘镜像文件(Hard Disk Image),但不是所有的硬盘镜像文件都是虚拟块设备文件,例如,目前Ghost的GHO格式的镜像文件就不能成为虚拟机中的硬盘。

linux的dd命令,可以用于生成虚拟块设备文件。
既可以用于创建空镜像文件,也可以用于创建物理硬盘的镜像。
例如:
 

复制代码 代码示例:
# dd if=/dev/hda of=/mnt/nebula/hda_dd.image4757130+0 records in4757130+0 records out

将IDE设备/dev/hda的内容复制到/mnt/nebula/hda_dd.image文件。参数if告诉dd从哪个文件读取数据,参数 of告诉dd读出的数据写入哪个文件中。

注意,对于dd来说,输入和输出都是文件,dd做的只是文件拷贝工作,这得益于Unix/Linux下面将设备也抽象为特殊的文件。

一般来说设备文件有两种,一种是块设备,一种是字符设备。
块设备的特点是可以随机读写(Random Access),比如内存、硬盘等。字符设备的特点是顺序读写(Sequential Access),比如鼠标,键盘,麦克风等。

如果想生成空镜像文件,还需要一个特殊的设备。
/dev/zero是Linux提供的一个特殊的字符设备,它的特点是可以永远读该文件,每次读取的结果都是二进制0。

例子,生成一个100M的空镜像文件:
 

复制代码 代码示例:
dd if=/dev/zero of=100M.img bs=1M count=100

除了前面已经解释的of和if参数,这次又出现了bs和count参数。
bs=1M表示每一次读写1M数据,count=100表示读写 100次,这样就指定了生成文件的大小为100M。
bs参数还可以进一步细分为ibs和obs两种,为读操作与写操作分别指定不同的Buffer大小。

这样就生成100M的空镜像文件,问题是,如果要生成1G的虚拟块设备文件,就得占用1G的硬盘空间,而这个镜像文件完全是空的,是不是有一点浪费?

好在Linux支持Sparse(稀疏)文件。

例子
 

复制代码 代码示例:
# dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0
# ls -l 1G.img
-rw-r-r- 1 root  root  1048576000 Mar 25 15:32 1G.img
# du -m 1G.img
 

用到了一个新的命令seek,表示略过1000个Block不写(这里Block按照bs的定义是1M),count=0表示写入0个Block。用ls命令看新生成的文件,大小可以看出是1000M。
但是再用du一看,实际占用硬盘大小只有1M。

以上介绍了,linux下dd命令生成指定大小虚拟块设备文件的方法,希望对大家有一定的帮助吧。
 

您可能感兴趣的文章:

linux下dd命令备份磁盘的节点(主引导记录)恢复数据
linux中dd命令的用法详解
linux中dd命令使用详解
使用dd命令克隆磁盘的方法介绍
linux中dd命令详解(清除硬盘数据)
dd命令中seek和skip的用法
如何解决dd命令输出结果无法重定向到文件的问题
如何查看dd命令的拷贝进度