Linux中的dd命令可以用来生成虚拟块设备文件,可以用于创建空镜像文件,也可以用于创建物理磁盘的镜像
dd if=/dev/zero of=file.img bs=1M count=1024
输出结果
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.885124 s, 1.2 GB/s
[root@k8s-node2 tmp]# du -sh file.img
1.0G file.img
可以看到,该命令生成了1个G的镜像文件,我们可以使用mkfs命令来对该文件进行文件系统初始化
# mkfs.xfs file.img
meta-data=file.img isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
查看该镜像文件的属性
file file.img
file.img: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
挂载该镜像文件
# mkdir /test
# mount file.img /test/
# mount |grep /test
/tmp/file.img on /test type xfs (rw,relatime,attr2,inode64,noquota)
可以看到,该镜像文件已经成功的挂载到/test上了,可以对该目录进行读写
以上生成的镜像文件是”实心的“,也就是说,该文件一出来就会占用实际的磁盘大小,难免有些许浪费,我们可以使用dd的一些参数来创建稀疏型的镜像文件,在总容量不变的情况下,减小镜像文件的大小。
在dd的命令行中,增加一个seek参数,将写入次数count设置为0,如此就可以生成一个稀疏型的镜像文件,该文件初始大小为0。
# dd if=/dev/zero of=file2.img bs=1M seek=1024 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000238717 s, 0.0 kB/s
# du -sh file2.img
0 file2.img
该镜像文件同样可以创建文件系统以及挂载
# mkfs.xfs file2.img
meta-data=file2.img isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@k8s-node2 tmp]# mkdir /test2
[root@k8s-node2 tmp]# mount file2.img /test2/
[root@k8s-node2 tmp]# mount |grep /test2
/tmp/file2.img on /test2 type xfs (rw,relatime,attr2,inode64,noquota)
对比两个磁盘镜像文件可知,通过创建稀疏型的磁盘文件可以有效降低镜像文件的大小
# du -sh file*
11M file2.img
1.0G file.img