使用 dd 将数据从文件复制到另一个文件的特定位置会截断输出文件

使用 dd 将数据从文件复制到另一个文件的特定位置会截断输出文件

我有一个包含单个文件系统的环回文件,我们称之为fs.image。我还有另一个更大的环回文件,其中包含多个分区和多个文件系统,我们称之为disk.image

fs.image与 中的一个分区大小完全相同disk.image。我想将其中的数据复制到disk.image文件中的正确位置。

我有一个脚本可以计算正确的偏移量,并尝试使用 来执行此操作dd。我认为这会起作用,因为它可以与块设备一起使用,但事实并非如此。disk.image在刚写入其中的数据之后的位置被截断。

有什么方法可以防止dd文件被截断?

fs.image被压缩为fs.image.bz2,并且我执行的命令如下:

bzcat fs.image.bz2 | dd of=disk.image bs=4M seek=$OFFSET

我计算的偏移量在哪里$OFFSET

我考虑过其他方法来实现这一点,但这似乎是最简单的(如果可行的话)。一种选择是将插入点之前的数据复制到另一个文件,附加文件系统,最后附加原始文件的其余部分。但是,这会很慢,因为我会复制大量我不需要的数据。我愿意接受其他选择。

答案1

GNU dd(至少版本 8.23)具有以下内容转换标志

诺特伦克 不要截断输出文件

这正是你想要的;这是一个小例子:

$ cat foo
foobar
$ echo -n XX | dd of=foo bs=1c seek=1 conv=notrunc
2+0 records in
2+0 records out
2 bytes (2 B) copied, 0.000283698 s, 7.0 kB/s
$ cat foo
fXXbar

相关内容