性能测试出错,dd 命令在 /dev/mapper/device 上创建了 13TB 的数据。为什么系统没有崩溃?硬盘-250GB

性能测试出错,dd 命令在 /dev/mapper/device 上创建了 13TB 的数据。为什么系统没有崩溃?硬盘-250GB

所以我想在我的嵌入式设备上对加密和正常数据存储进行一些性能测试。

这根本不是我所期望看到的!

你能向我解释一下刚刚发生了什么吗?为什么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 SizeUsed等是文件系统了解并报告其自身的内容。可能有关文件系统的一些数据、元数据和信息仍然可以作为缓存中的旧值使用,所以它看起来足够理智;但显然必须从设备中读取新的内容。你写的垃圾的某些部分被读取了,因此令人惊讶的价值观

标题中的说法是错误的。 “dd命令创建了 13TB 数据”是不正确的。13T出现只是因为df从中获得了一些随机值以前是一个文件系统。

相关内容