fallocate falhou: operação não suportada


10

Ao executar,

fallocate -l 10G /path/to/file

Eu retornei o seguinte erro:

fallocate: file: fallocate failed: Operation not supported

Criar o arquivo usando dd (se = / dev / zero ou se = / dev / urandom) funciona, mas se estou tentando criar arquivos grandes, com dezenas de GBs de tamanho, leva várias horas para concluir.

Executando o Ubuntu 14.04. Usando uma partição ext4, especificar um tipo de arquivo não parece alterar o resultado.

Funcionando bem em minhas máquinas CentOS6, mas não no Ubuntu.


qual sistema de arquivos você está usando?
g_p

Atualize-nos também o tipo de arquivo que você está criando.
precisa

Usando ext4, o tipo de arquivo não parece importar. Se estou criando um arquivo em branco, um .txt, um .img, recebo o mesmo erro.
John J Johnson

Respostas:


11

Se arquivos esparsos estiverem ok para você (por exemplo, você deseja criar uma imagem para preenchê-la com um sistema de arquivos), eles serão criados em pouco tempo

100 GB demoram 3 milissegundos:

# time dd if=/dev/zero of=tmptst.dat bs=1G seek=100 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0,00037726 s, 0,0 kB/s

real    0m0.003s
user    0m0.000s
sys 0m0.002s

O arquivo resultante:

# ls -lh tmptst.dat
-rw-r--r-- 1 root root 100G 2015-01-22 16:39 tmptst.dat

Seu tamanho real no momento: 0 bytes

# ls -lsh tmptst.dat
0 -rw-r--r-- 1 root root 100G 2015-01-22 16:39 tmptst.dat

Tratava-se de criar um contêiner dm-crypt / LUKS, operando sob a suposição de que criar um contêiner usando / dev / urandom seria mais seguro do que criar um contêiner com / dev / zero e preenchê-lo gradualmente com dados. Desde então, aprendi que usar fallocate não teria resolvido meu problema de qualquer maneira, pois a velocidade lenta era simplesmente uma limitação da velocidade com que o pRNG de / dev / urandom funciona, mas ainda não tenho idéia do porquê de fallocate se recusar a trabalhar. Felicidades pela resposta, aceita como eu imagino depois de todo esse tempo, é a melhor resposta que eu vou ter haha.
John J Johnson

Gostaria de saber se fallocate não pode recuar para fazer a mesma coisa? Isso faria sentido para mim.
Unfa 10/05/19

3

Se você não se importa com o conteúdo, mas apenas precisa de alguns dados,

Primeiro faça,

dd if=/dev/urandom of=tmp.txt bs=1M count=1

Isso criará,

-rw-r--r-- 1 root root 1.0M Oct 17 00:30 tmp1.txt.

Então, se você deseja criar um arquivo de 10 milhões, use o arquivo gerado acima para anexar repetidamente,

for i in {1..10}; do dd if=tmp.txt of=tmp1.txt bs=1M oflag=append conv=notrunc; done;

2

Eu também tive esse problema.

Um link simbólico no caminho do diretório parece ser o problema. tente o mesmo comando em / tmp e deve funcionar.

Consegui solucionar o problema adicionando um '-x' ao comando fallocate. Este 'modo posix' forçado, e deveria levar mais tempo.

Mesmo que o sistema de arquivos estivesse ext4, o link simbólico estava causando o erro 'não suportado neste sistema de arquivos'. De fato, se eu fosse diretamente para o nome do diretório (sem links simbólicos), a chamada fallocate () funcionaria.

A1: não tem links simbólicos em nenhum lugar no nome do caminho completo do arquivo que você está criando.

A2: use o '-x', mesmo que demore mais.

b \ 375

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.