Modo per riempire / utilizzare all'istante un sacco di spazio su disco?


45

Su una VM Linux vorrei testare il monitoraggio NAGIOS in modo più approfondito che semplicemente spegnere la VM o disconnettere la scheda di rete virtuale; Vorrei testare o "imporre un allarme di spazio su disco" occupando una percentuale di spazio libero per un breve periodo di tempo.

So che potrei semplicemente usare a

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

o qualcosa del genere ... ma questo richiede tempo e carica il sistema e richiede di nuovo tempo quando si rimuovono i file di test con rm.

Esiste un modo rapido (quasi istantaneo) per riempire una partizione che non carica il sistema e richiede molto tempo? sto pensando a qualcosa che alloca spazio, ma non lo "riempie".


scusate, ho dimenticato di menzionare che si tratta di un >> filesystem ext3.
Axel Werner,

È necessario aggiornarlo a ext4 per supportare fallocate.
Rui F Ribeiro,

1
La bomba con zip funziona sempre
Galois il

1
@jaska Dagli una risposta. È stata la prima idea che ho avuto durante la lettura del titolo ...
Crowley,

Perché non usi /dev/full? (Supponendo che esista). Prova echo 'test' > /dev/fullDebian.
Ismael Miguel,

Risposte:


63

Il modo più veloce per creare un file in un sistema Linux sta usando fallocate:

fallocate -l 50G file 

Dall'uomo:

fallocate viene utilizzato per manipolare lo spazio su disco allocato per un file, sia per deallocare che per preallocarlo.
Per i filesystem che supportano la chiamata di sistema fallocate, la preallocazione viene eseguita rapidamente allocando i blocchi e contrassegnandoli come non inizializzati, senza richiedere IO sui blocchi di dati. Questo è molto più veloce della creazione di un file riempendolo con zeri.
Supportato per XFS (dal Linux 2.6.38), ext4 (dal Linux 3.0), Btrfs (dal Linux 3.7) e tmpfs (dal Linux 3.5).


1
Perché lo stai attraversando sudo?
Gerrit,

1
@gerrit Aggiunto quel punto alla risposta.
Rui F Ribeiro,

3
" fallocatenecessita dei privilegi di root" Non sul mio sistema (Linux Mint 17.3, a valle di Ubuntu, quindi Debian). (file system ext4)
TJ Crowder,

1
+1 sebbene l'OP abbia esplicitamente menzionato che il suo filesystem è ext3.
syneticon-dj,

1
@RuiFRibeiro, grazie! per sles11sp4 sono stato in grado di creare un file, formattarlo con ext4, ma dove non è stato possibile montarlo in modalità RW. più tardi ho trovato un messaggio del kernel in / var / log / messaggi che diceva, ext4 è supportato solo in sola lettura. : /
Axel Werner

13

Altre alternative includono:

  1. per modificare le soglie di allarme in un valore vicino o inferiore all'utilizzo corrente, oppure
  2. per creare una partizione di test molto piccola con inode, dimensioni o altri attributi limitati.

Essere in grado di testare cose come correre nella percentuale riservata di root, se presente, può anche essere utile.


la percentuale riservata alla radice normalmente è del 10% a meno che non la modifichi - si finisce con uno spreco di sistema troppo grande in partizioni grandi / dischi moderni. Quando si definiscono gli allarmi, è meglio tenerne conto.
Rui F Ribeiro,

+1 per la prima cosa. cento volte vero. perché diavolo dovrei davvero creare qualcosa su un disco della macchina? cosa succede se al momento del mio test succede qualcosa (come coredump, processo batch che genera grandi file temporanei, ...) e l'intero disco viene accidentalmente rovinato?
Fiisch,

2
@Fisch - Perché? Per assicurarsi che la soglia di avviso sia corretta e che non si stia facendo qualcosa di simile all'impostazione accidentale della percentuale di inode libera invece della percentuale di spazio libero su disco (che ho visto fare prima). Se qualcosa fallisce perché hai riempito un disco fino alla soglia di avviso, allora la soglia di avviso è troppo bassa - l'intero punto di avviso è che dovrebbe avvisarti prima che le cose inizino a rompersi.
Johnny,

Gatto, buon punto. Ma nessuna soluzione per me. Non ho il controllo sulla configurazione della VM (non posso modificare partizioni o dischi virtuali), né controllo sul server NAGIOS.
Axel Werner,

2
@AxelWerner Puoi montare un file in loopback come partizione "falsa"? Ciò ti consentirebbe comunque di testare senza compromettere seriamente nulla. Formattalo con uno dei filesystem supportati e puoi giocare anche con fallocate.
Tonny,

9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

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

Poiché questi tre modi possono riempire rapidamente una partizione.

Se ti piace usare dd , di solito puoi provarlo con seek . Basta impostare seek=file_size_what_you_neede impostare count=0. Ciò dirà al sistema che esiste un file e le sue dimensioni sono quelle che hai impostato, ma il sistema non lo creerà effettivamente. E utilizzato in questo modo, è possibile creare un file più grande della dimensione della partizione.


Esempio, su una partizione ext4 con meno di 3G disponibili. Usa dd per creare un file 5T che esiste come metadati, che non richiede praticamente spazio di blocco.

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

Produzione:

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

1
puoi aggiungere qualche informazione in più alla tua risposta?
gatto,

Aggiungo solo più pensiero in una domanda finita per le persone che cercano la stessa domanda in altro modo. ignoralo cosa succede se non lo sei.
Se ven

Questo count=0metodo è piuttosto interessante, ho aggiunto un esempio.
agc,

7
Si noti che l' ddesempio sopra potrebbe allocare un file sparse. In tal caso, la dimensione del file è 50G, in realtà sta usando solo un blocco (o nemmeno) e quindi il disco non si riempie. YMMV.
MAP

2
Ho testato il tuo suggerimento sul mio filesystem ext3. non ha funzionato come previsto. truncate e dd hanno creato un file di grandi dimensioni, ma "df -h" non lo ha riconosciuto. mostra ancora lo stesso spazio hd libero.
Axel Werner,

0

È inoltre possibile sfruttare lo strumento stress-ng supportato su un ampio numero di sistemi basati su Linux:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.