我有一个包含单个文件系统的环回文件,我们称之为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