Come aggiungere i dati in un file da dd?


19

Voglio aggiungere nuovi dati in un file archiviato in SSD.

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

Ma df -h mostra che il comando dd sovrascrive sempre il file di test, invece aggiunge nuovi dati nel file di test. Ho anche provato

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

Non funziona neanche.

Risposte:


12

Che dire:

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

la tua soluzione funziona. Grazie. Sai perché le mie soluzioni non funzionano? Ho controllato la pagina man. non riesco a trovare il motivo. Grazie.
città


1

Nel kernel Linux è FALLOC_FL_INSERT_RANGEstata aggiunta l'opzione 4.1 . Dalla fallocate(2) pagina man :

Specificare il flag FALLOC_FL_INSERT_RANGE (disponibile da Linux 4.1) in modalità aumenta lo spazio per i file inserendo un buco nella dimensione del file senza sovrascrivere i dati esistenti. Il foro inizierà all'offset e continuerà per len byte. Quando si inserisce il foro all'interno del file, il contenuto del file a partire dall'offset verrà spostato verso l'alto (ovvero, verso un offset del file più elevato) di len byte. L'inserimento di un foro all'interno di un file aumenta la dimensione del file di len byte.

E recentemente questa opzione è stata aggiunta a util-linux:

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

Quindi, quando util-linuxverrà rilasciata la versione 2.30 e la tua distribuzione Linux verrà aggiornata a questa versione, saremo in grado di aumentare le dimensioni del file in un lampo eseguendo:

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

dove 128Mè la dimensione del file corrente.


1

C'è un modo più semplice per aggiungere un buco sparse a un file.

truncateè molto più veloce di dd. Per far crescere il file con 10 byte usare:

 truncate -s +10 file.txt 

risposta trovata in: /server//a/343726/70242

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.