Как добавить данные в файл с помощью dd?

19

Я хочу добавить новые данные в файл, хранящийся в 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

Это тоже не работает.

город
источник

Ответы:

12

Как насчет:

 dd if=/dev/shm/test bs=1G >>/data/sdb/test
Якорь,
источник
Ваше решение работает. Благодарю. Но знаете ли вы, почему мои решения не работают? Я проверил страницу справочника. не могу найти причину. Благодарю.
город
29
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

Charm_quark
источник
2
Без count=1опции он добавляет все доступное пространство.
mixel
1

В ядре Linux 4.1 FALLOC_FL_INSERT_RANGEбыла добавлена ​​опция. С fallocate(2) man-страницы :

Задание флага FALLOC_FL_INSERT_RANGE (доступно с Linux 4.1) в режиме увеличивает файловое пространство, вставляя дыру в размер файла без перезаписи существующих данных. Отверстие начнется со смещением и продолжится для длинных байтов. При вставке отверстия внутри файла содержимое файла, начиная со смещения, будет смещено вверх (то есть в более высокое смещение файла) на длину в байты. Вставка дыры в файл увеличивает размер файла на длину в байт.

И недавно эта опция поддержки была добавлена в 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текущий размер файла.

Mixel
источник
1

Существует более простой способ добавить разреженную дыру в файл.

truncateгораздо быстрее, чем дд. Чтобы увеличить файл с 10 байтами, используйте:

 truncate -s +10 file.txt 

ответ найден в: /server//a/343726/70242

akostadinov
источник