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.

Odpowiedzi:


12

Co powiesz na:

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

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


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.