17

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

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

4 ответа4

27
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

10

Как насчет:

 dd if=/dev/shm/test bs=1G >>/data/sdb/test
1

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

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

 truncate -s +10 file.txt 

ответ найден в:https://serverfault.com/a/343726/70242

1

В ядре Linux 4.1 добавлена опция FALLOC_FL_INSERT_RANGE . Из справочной страницы fallocate(2):

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

И недавно эта опция поддержки была добавлена в util-linux:

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

Поэтому, когда будет выпущена версия 2.30 util-linux и ваш дистрибутив linux обновится до этой версии, мы сможем быстро увеличить размер файла, выполнив:

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

где 128M - текущий размер файла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .