ファイルからデータを別のファイルの特定の場所にddでコピーすると、出力ファイルが切り捨てられます


1

単一のファイルシステムを含むループバックファイルがありますfs.image。それを呼び出しましょう。複数のパーティションと複数のファイルシステムを含む別のはるかに大きなループバックファイルがありますdisk.image

fs.imageのパーティションの1つとまったく同じサイズ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)には次の変換フラグがあります

notrunc は出力ファイルを切り捨てません

これはまさにあなたが望むことをします。ここに小さな例があります:

$ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.