Jak dołączyć dane do pliku przez dd?

19

Chcę dołączyć nowe dane do pliku przechowywanego na dysku SSD.

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

Ale df -h pokazuje, że polecenie dd zawsze zastępuje plik testowy, zamiast tego dołącza nowe dane do pliku testowego. Też próbowałem

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

To też nie działa.

Miasto
źródło

Odpowiedzi:

12

Co powiesz na:

 dd if=/dev/shm/test bs=1G >>/data/sdb/test
mdpc
źródło
twoje rozwiązanie działa. Dzięki. Ale czy wiesz, dlaczego moje rozwiązania nie działają? Sprawdziłem stronę podręcznika. nie mogę znaleźć przyczyny. dzięki.
miasto
29
dd if=/dev/shm/test of=/data/sdb/test bs=1G oflag=append conv=notrunc 

Myślę, że powinieneś był to zrobić.

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

Charm_quark
źródło
2
Bez count=1opcji dołącza całą dostępną przestrzeń.
mixel
1

W jądrze Linuksa 4.1 FALLOC_FL_INSERT_RANGEdodano opcję. Ze fallocate(2) strony podręcznika :

Określenie flagi FALLOC_FL_INSERT_RANGE (dostępnej od Linuksa 4.1) w trybie zwiększa przestrzeń plików poprzez wstawienie dziury w rozmiarze pliku bez nadpisywania istniejących danych. Otwór rozpocznie się z przesunięciem i będzie kontynuowany dla bajtów len. Podczas wstawiania dziury do pliku zawartość pliku zaczynająca się od przesunięcia zostanie przesunięta w górę (tj. Do większego przesunięcia pliku) o bajty len. Wstawienie dziury do pliku zwiększa rozmiar pliku o bajty len.

A ostatnio ta obsługa opcji została dodana do util-linux:

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

Kiedy więc util-linuxzostanie wydana wersja 2.30, a dystrybucja Linuksa zostanie zaktualizowana do tej wersji, będziemy mogli błyskawicznie zwiększyć rozmiar pliku, uruchamiając:

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

gdzie 128Mjest bieżący rozmiar pliku.

mixel
źródło
1

Jest łatwiejszy sposób na dodanie rzadkiej dziury do pliku.

truncatejest znacznie szybszy niż dd. Aby powiększyć plik o 10 bajtów, użyj:

 truncate -s +10 file.txt 

odpowiedź znaleziona w: /server//a/343726/70242

akostadinov
źródło