Como acrescentar dados em um arquivo por dd?


19

Quero acrescentar novos dados em um arquivo armazenado no SSD.

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

Mas df -h mostra que o comando dd sempre substitui o arquivo de teste, em vez disso, acrescenta novos dados no arquivo de teste. Eu também tentei

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

Também não funciona.

Respostas:


12

A respeito:

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

sua solução funciona. Obrigado. Mas você sabe por que minhas soluções não funcionam? Eu verifiquei a página de manual. não consigo encontrar o motivo. obrigado.
cidade


1

No Linux kernel 4.1 FALLOC_FL_INSERT_RANGEopção foi adicionada. Na fallocate(2) página do manual :

A especificação do sinalizador FALLOC_FL_INSERT_RANGE (disponível desde o Linux 4.1) no modo aumenta o espaço no arquivo, inserindo um furo no tamanho do arquivo sem substituir os dados existentes. O furo começará no deslocamento e continuará por bytes de len. Ao inserir o furo dentro do arquivo, o conteúdo do arquivo que começa no deslocamento será deslocado para cima (ou seja, para um deslocamento maior do arquivo) por bytes de len. Inserir um furo dentro de um arquivo aumenta o tamanho do arquivo em bytes de len.

E recentemente esse suporte de opção foi adicionado a util-linux:

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

Portanto, quando a util-linuxversão 2.30 for lançada e sua distribuição Linux for atualizada para esta versão, poderemos aumentar o tamanho do arquivo rapidamente, executando:

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

onde 128Mé o tamanho do arquivo atual.


1

Existe uma maneira mais fácil de acrescentar um orifício esparso a um arquivo.

truncateé muito mais rápido que o dd. Para aumentar o arquivo com 10 bytes, use:

 truncate -s +10 file.txt 

resposta encontrada em: /server//a/343726/70242

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.