web-dev-qa-db-ja.com

ファイルにデータをddで追加する方法は?

SSDに保存されているファイルに新しいデータを追加したい。

dd if=/dev/shm/test of=/data/sdb/test bs=1G oflag=append

ただし、df -hは、ddコマンドが常にテストファイルを上書きすることを示し、代わりにテストファイルに新しいデータを追加します。私も試しました

dd if=/dev/shm/test of=/data/sdb/test bs=1G conv=notrunc

それも機能しません。

21
city

何について:

 dd if=/dev/shm/test bs=1G >>/data/sdb/test
12
mdpc
dd if=/dev/shm/test of=/data/sdb/test bs=1G oflag=append conv=notrunc 

それはあなたが使うべきだったと私が思うものです。

REF: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=373736

30
Charm_quark

スパースホールをファイルに追加する簡単な方法があります。

truncateはddよりもはるかに高速です。 10バイトでファイルを大きくするには、次のようにします。

 truncate -s +10 file.txt 

https://serverfault.com/a/343726/70242 にある回答

1
akostadinov

Linuxカーネル4.1では、_FALLOC_FL_INSERT_RANGE_オプションが追加されました。 fallocate(2)から man page

モードでFALLOC_FL_INSERT_RANGEフラグ(Linux 4.1以降で使用可能)を指定すると、既存のデータを上書きせずにファイルサイズ内に穴を挿入することにより、ファイルスペースが増加します。ホールはオフセットから始まり、lenバイトの間続きます。ファイル内に穴を挿入すると、オフセットで始まるファイルの内容がlenバイトだけ上方に(つまり、より高いファイルオフセットに)シフトされます。ファイル内に穴を挿入すると、ファイルサイズがlenバイト増加します。

そして最近このオプションは 追加されました から_util-linux_をサポートします:

_   -i, --insert-range
          Insert a hole of length bytes from offset, shifting existing
          data.
_

したがって、_util-linux_バージョン2.30がリリースされ、Linuxディストリビューションがこのバージョンに更新されると、次のコマンドを実行することで、フラッシュのファイルサイズを増やすことができます。

_fallocate -i -l 1G -o 128M /path/to/file
_

ここで、_128M_は現在のファイルサイズです。

1
mixel