所以我想在我的嵌入式设备上对加密和正常数据存储进行一些性能测试。
这根本不是我所期望看到的!
你能向我解释一下刚刚发生了什么吗?为什么dd
命令输出是 1843200+0 条记录,但df -h
文件系统磁盘空间使用情况显示为13TB?
也许我解释一下我所做的事情。这是我的工作流程:
dd if=/dev/urandom of=enc_per_test.img bs=512 count=2097152
dd if=/dev/urandom of=normal_per_test.img bs=512 count=2097152
并接收 2 张图像,每张 1GB - 正如我预测的那样。
losetup /dev/loop1 enc_per_test.img
losetup /dev/loop2 normal_per_test.img
之后我执行:
dmsetup -v create enc_per_test --table "0 $(blockdev --getsz /dev/loop1) crypt <crypt_setup> 0 /dev/loop1 0 1 sector_size:512"
mkfs.ext4 /dev/mapper/enc_per_test
mkdir /mnt/enc_per_test
mount -t ext4 /dev/mapper/enc_per_test /mnt/enc_per_test/
正如我预期的那样,df-h
显示了已安装的 enc_per_test:
Filesystem ############## Size ### Used ## Avail ## Use% ### Mounted on #####
/dev/mapper/enc_per_test ## 976M ## 2.6M ## 907M ## 1% #### /mnt/enc_per_test
我清除缓存:
echo 3 > /proc/sys/vm/drop_caches
最后执行 dd 命令来填充 enc_per_test:
time dd if=/tmp/random of=/dev/mapper/enc_per_test conv=fsync
1843200+0 records in
1843200+0 records out
943718400 bytes (944 MB, 900 MiB) copied, 152.098 s, 6.2 MB/s
所以我想,好吧,没关系。这就是我想要的。让我们看看 df -h 中的样子:
Filesystem ############## Size ### Used ## Avail ## Use% ### Mounted on #####
/dev/mapper/enc_per_test ## 13T ## 13T ## 0 ## 100% #### /mnt/enc_per_test
这里发生了什么?为什么df -h
展示13TB的数据存储。这甚至是不可能的,因为我的设备有大约 250GB 的硬盘。
感谢您的任何回答和提示!
答案1
/dev/mapper/enc_per_test
您将(设备)中存在的文件系统安装到/mnt/enc_per_test/
(安装点)。
然后dd
你选择写信给设备,而不是文件系统内的常规文件(即在挂载点下,例如of=/mnt/enc_per_test/blob
)。您使用安装文件系统时dd
的内容覆盖了文件系统的大部分内容。/tmp/random
df
查询已安装的文件系统。对于给定的文件系统, fields Size
、Used
等是文件系统了解并报告其自身的内容。可能有关文件系统的一些数据、元数据和信息仍然可以作为缓存中的旧值使用,所以它看起来足够理智;但显然必须从设备中读取新的内容。你写的垃圾的某些部分被读取了,因此令人惊讶的价值观
标题中的说法是错误的。 “dd
命令创建了 13TB 数据”是不正确的。13T
出现只是因为df
从中获得了一些随机值以前是一个文件系统。