É possível criar um arquivo e um link físico para ele sem inicializar os dados?

0

Eu quero criar um arquivo de 2 GB, mas não me importo com o conteúdo dele. Atualmente, uso dd com /dev/zero , mas isso é bastante lento.

É possível criar um arquivo e um link físico para ele, sem inicializar o conteúdo do arquivo (ele pode conter dados ilegíveis que estavam naquele local no HDD antes)?

Nota: Eu realmente quero alocar o armazenamento. Eu não quero um arquivo esparso.

    
por daknøk 08.08.2012 / 13:05

2 respostas

1

O que você está se referindo é conhecido como um arquivo "esparso".

De esta página

Sparse files are basically just like any other file except that blocks that only contain zeros (i.e., nothing) are not actually stored on disk. This means you can have an apparently 16G file – with 16G of “data” – only taking up 1G of space on disk.

Para criar um usando dd , você pode usar o parâmetro seek= :

dd if=/dev/zero of=sparse-file bs=1 count=1 seek=1024k

Os parâmetros seek e bs informam simplesmente para buscar o final do arquivo após 1 bloco, o que deve fornecer um arquivo esparso que você pode, em seguida, vincular, se desejar.

Isto lhe dará um arquivo completamente vazio que não ocupa espaço no disco até que seja realmente gravado. Sua criação também deve ser quase instantânea.

- = EDIT = -

Se você quiser um arquivo alocado e não se importar com o conteúdo até que você o escreva, precisará de um arquivo esparso, mas geralmente por motivos de segurança do sistema de arquivos ele é considerado "de má forma" para permitir que um aplicativo não privilegiado crie um arquivo usando dados que já existem no disco.

Isso porque, se um aplicativo userland puder fazer isso, ele poderá expor dados confidenciais de outros usuários alocando um arquivo do tamanho de todo o espaço livre em um disco e vasculhando-o procurando senhas e outros dados confidenciais que outro usuário pode ter salvo, copiado ou excluído.

Isso é um projeto incorreto explícito em sistemas operacionais que gostam de pensar em si mesmos como seguros e que nenhum sistema operacional multiusuário moderno fará isso.

Esta é a outra razão pela qual os arquivos esparsos assumem o padrão de zeros ao serem lidos, em vez de permitir a alocação de uma área de disco.

Se você deseja criar um arquivo de dados arbitrários rapidamente sem pré-alocar blocos, você precisa de um arquivo esparso, se você quiser realmente alocar esses blocos, você precisa escrever explicitamente algo dentro deles.

    
por 08.08.2012 / 23:16
0

Pode ser o que você precisa, arquivo raw instantâneo:

qemu-img create yourfile.img 2G
Formatting 'yourfile.img', fmt=raw size=2147483648

$ls -all
-rw-r--r--  1 mugen users 2147483648 Aug  8 23:48 yourfile.img

Mokubai: "This is because if a userland application could do that it could potentially expose sensitive data from other users by allocating a file the size of all the free space on a disk and trawl through it searching for passwords and other sensitive data that another user may have saved, copied, or deleted. This is considered explicit bad design in operating systems that like to think of themselves as secure and no modern multi-user operating system will do this."

Na verdade, é por isso que shred foi inventado.

    
por 08.08.2012 / 23:51