背景
这两天工作中需要使用大文件验证文件加解密模块的效果,一般来说,无论是大文件还是小文件,要验证解密后的结果是否和明文一致,都是用md5sum、shasum等计算摘要的方式,比较解密后的结果的摘要和明文的摘要,如果摘要一致,则说明加解密功能是正常的。
也可以通过直接查看明文文件和解密文件,进行对比,检查加解密效果,但是由于文件比较大,加载时间比较长,对内存的消耗也很大,操作起来很不方便。
于是想到可以使用dd命令,构造指定大小的文件,再对文件进行格式化,生成文件系统,使用文件系统进行加解密,再分别挂载明文文件系统和解密后的文件系统,挂载后查看文件系统下的文件,以及文件内容是否一致,以此确定加解密功能是否正常。
操作方法
构建指定大小的文件
dd工具可以用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。通常用于文件的备份,如:
将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/dev/hdb of=/root/image
将备份文件恢复到指定盘
dd if=/root/image of=/dev/hdb
备份磁盘开始的512个字节大小的数据到指定文件,count=1指仅拷贝一个块;bs=512表示同时设置读入/输出的块大小为512个字节:
dd if=/dev/hda of=/root/image count=1 bs=512
备份磁盘开始的512M大小的数据到指定文件,count=512指拷贝512个块;bs=1024KiB表示同时设置读入/输出的块大小为1MByte:
dd if=/dev/hda of=/root/image count=512 bs=1024KiB
注意,在使用dd命令中的bs/ibs/obs选项时,如果想指定1KByte或者1MBytes(即1024个Byte或者10241024个Byte),需要写成1KiB或者1MiB;如果写成1KB或者1MB,则会被识别成1000Byte或者10001000Byte
可以看到,因为有了bs和count两个选项,所以我们可以用dd命令构建任意大小的文件,在构建文件时可以使用/dev/zero作为输入,这个设备节点可以向我们构建的文件写入0
dd if=/dev/zero of=bs_is_KiB count=512 bs=1KiB
对文件进行格式化
根据需要使用哪种文件系统,选择对应的格式化工具,如想要将上面构建的文件格式化成ext4的文件系统,则应该使用mkfs.ext4,用法很简单,直接在后面加上文件名即可
mkfs.ext4 bs_is_KiB
挂载格式化后的文件系统,挂载后查看挂载目录,看到lost+found目录,说明挂载成功
sudo mount bs_is_KiB test/