我有一個包含單一文件系統的環回文件,我們稱之為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