É possível criar instantaneamente arquivos arbitrários?

6

Eu já vi o seguinte truque para criar arquivos grandes e vazios rapidamente:

dd if=/dev/zero of=test.dat bs=1024 count=1024

No entanto, isso ainda leva algum tempo ao criar arquivos com vários GB. Presumo que esse tempo seja dominado pelo disco que grava todos os \0s de /dev/zeropara test.dat.

Existe alguma maneira de "instantaneamente" criar um arquivo de tamanho arbitrário, sem realmente inicializar seu conteúdo?

ChrisB
fonte

Respostas:

12

Sim, se o seu sistema de arquivos suportar arquivos esparsos .

Seu ddmétodo, na verdade, cria os arquivos e preenche o arquivo criado com zero. Na verdade, ele precisa escrever esses zeros e isso leva tempo.

Se você 'pular' adiante no arquivo sem gravar, ainda criará um arquivo aparentemente grande, sem realmente gravar no arquivo. Como esse arquivo grande não consome realmente espaço em disco, é possível criar arquivos maiores do que o FS permitido.

Se você quiser tentar isso, use algo como isto
dd seek=123456 if=/dev/null of=sparse-file bs=1M

(Tome cuidado com backups e restaurações com software que não tem conhecimento de arquivos esparsos).

Hennes
fonte
Obrigado pela referência. Infelizmente, meu Mac parece não suportar arquivos esparsos, e o arquivo ainda parece estar cheio de \0s. Há alguma outra alternativa?
ChrisB
Se o arquivo é escasso e você o , deve obter \ 0's. Note que meu exemplo usou /dev/nulle não /dev/zero. Não escreveu zeros.
Hennes
Hmm, eu deveria ter lido esse artigo da Wikipedia mais detalhadamente. Eu perdi a parte onde se menciona: "A maioria dos sistemas de arquivos modernos suportam arquivos esparsos, incluindo a maioria variantes de Unix e NTFS, ., Mas sobretudo não da Apple HFS + "
Hennes
Desculpe a confusão - o que quero dizer é que o tempo de criação do arquivo não é mais rápido se eu usar a opção de busca no dd, ainda leva alguns segundos por GB. Como você menciona, sistema de arquivos da Apple não parece tirar proveito da opção de buscar
ChrisB