Como você pode aparar arquivos usando a linha de comando?

18

Qual é o console equivalente ao seguinte código Python:

target = file("disk", "w")    # create a file
target.seek(2*1024*1024*1024) # skip to 2 GB
target.write("
kvm disk -cd whatever.iso #Only allocate space as necessary
") target.close()

Talvez algum encantamento de dd? A ideia é criar um arquivo com o tamanho aparente de 2 GB para uso, por ex. na virtualização.

target = file("disk", "w")    # create a file
target.seek(2*1024*1024*1024) # skip to 2 GB
target.write("
kvm disk -cd whatever.iso #Only allocate space as necessary
") target.close()
    
por badp 20.12.2012 / 15:13

3 respostas

8

Em geral, use apenas dd ; mas como você mencionou o uso da virtualização KVM, você pode considerar o uso de qemu-img :

qemu-img create -f raw disk 2G

Ele faz o mesmo que o comando dd na resposta de Chris Down, efetivamente.

Independentemente do comando que você usa, para uso na virtualização, sugiro usar fallocate para pré-alocar blocos a fim de evitar a fragmentação e aumentar o desempenho.

fallocate -l 2G disk

Não está disponível em todas as plataformas e sistemas de arquivos, no entanto. Isso não gravará zeros, mas apenas atribuirá blocos ao arquivo, em vez de fazer isso sob demanda mais tarde toda vez que precisar estender o arquivo.

    
por 20.12.2012 / 15:31
14

Você pode criar um arquivo esparso como este com dd :

dd of=file bs=1 seek=2G count=0
$ du file
0       disk
$ du --apparent-size file
2097152 disk
    
por 20.12.2012 / 15:14
6

Veja também o comando GNU truncate :

truncate -s 2G some-file
    
por 20.12.2012 / 16:12