A maneira de preencher / utilizar instantaneamente muito espaço em disco?

39

Em uma VM Linux, gostaria de testar o monitoramento NAGIOS mais profundamente do que apenas desligar a VM ou desconectar a NIC virtual; Gostaria de testar ou "aplicar um alarme de espaço em disco" ocupando vários% de espaço livre por um curto período de tempo.

Eu sei que posso usar apenas um

dd if=/dev/zero of=/tmp/hd-fillup.zeros bs=1G count=50

ou algo parecido ... mas isso leva tempo e carrega o sistema e requer novamente tempo ao remover os arquivos de teste com rm.

Existe uma maneira rápida (quase instantânea) de preencher uma partição que não carrega o sistema e leva muito tempo? estou pensando em algo que aloca espaço, mas não "preenche".

    
por Axel Werner 29.06.2016 / 14:04

4 respostas

56

A maneira mais rápida de criar um arquivo em um sistema Linux é usar fallocate :

fallocate -l 50G file 

Do homem:

fallocate is used to manipulate the allocated disk space for a file, either to deallocate or preallocate it.
For filesystems which support the fallocate system call, preallocation is done quickly by allocating blocks and marking them as uninitialized, requiring no IO to the data blocks. This is much faster than creating a file by filling it with zeros.
Supported for XFS (since Linux 2.6.38), ext4 (since Linux 3.0), Btrfs (since Linux 3.7) and tmpfs (since Linux 3.5).

    
por 29.06.2016 / 14:17
13

Outras alternativas incluem:

  1. para alterar os limites de alarme para algo próximo ou abaixo do uso atual ou
  2. para criar uma partição de teste muito pequena com inodes, tamanho ou outros atributos limitados.

Ser capaz de testar coisas como a porcentagem da raiz reservada, se houver, também pode ser útil.

    
por 29.06.2016 / 16:05
9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

  3. dd of=bigfile bs=1 seek=50G count=0

Como essas três formas podem preencher uma partição rapidamente.

Se você gosta de usar dd , geralmente pode tentar com seek . Basta definir seek=file_size_what_you_need e definir count=0 . Isso dirá ao sistema que existe um arquivo , e seu tamanho é o que você define, mas o sistema não irá criá-lo na verdade. E usado dessa maneira, você pode criar um arquivo maior que o tamanho da partição.

Exemplo, em uma partição ext4 com menos de 3G disponível. Use dd para criar um arquivo 5T que exista como metadado - não exigindo praticamente nenhum espaço em bloco.

df -h . ; dd of=biggerfile bs=1 seek=5000G count=0 ; ls -log biggerfile ; df -h .

Saída:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
0+0 records in
0+0 records out
0 bytes copied, 4.9296e-05 s, 0.0 kB/s
-rw-rw-r-- 1 5368709120000 Jun 29 13:13 biggerfile
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9        42G   37G  2.8G  94% /home
    
por 29.06.2016 / 16:33
0

Você também pode aproveitar a ferramenta stress-ng que é suportada em um grande número de sistemas baseados em Linux:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
    
por 02.11.2018 / 22:30