我正在尝试将 x.file 数据复制到大小为 32 KB 的虚拟卷中,并尝试再次从同一卷读取 32 KB 到 y.file。使用 cat y.file 时它会显示预期的输出,但每当我使用 vim/vi 查看内容时,它都会显示附加字符“^@”。
在虚拟卷中写入数据的命令。
dd if=/tmp/x.file of=/dev/vv/<vv_id> seek=0 bs=16K count=2
从虚拟卷读取数据的命令。
dd of=/tmp/y.file if=/dev/vv/<vv_id> seek=0 bs=16K count=2
x.file 包含一系列模式,大小为 24 KB。
例如:
如果 x.file PATTERN PATTERN PATTERN
然后 y.filePATTERN PATTERN PATTERN^@^@^@^@
编辑:
现在,我知道显示“^@”字符的原因是什么了。我的输入文件大小小于 32 KB。但仍然怀疑为什么“^@”被填充,因为它可能是任何其他值?有什么具体原因吗?
答案1
来自评论,很明显该文件x.file
小于 32768 字节 (32 KiB)。这意味着当dd
要求将 32 KiB 写入时/dev/vv/<vv_id>
,它将无法从文件中复制全部内容,并且 32 KiB 的最后一位将保持未写入状态。
y.file
然后,第二个操作将复制这些未初始化的数据dd
,这就是您在编辑器中打开该文件时看到的内容。
这^@
是编辑器显示空字节的方式。通过阅读dd
手册,我不清楚这是否是第一次写入设备的内容dd
,或者是否是第一次调用之前设备上已经存在的垃圾数据dd
。