Manière de remplir / utiliser instantanément beaucoup d'espace disque?

46

Sur une machine virtuelle Linux, j'aimerais tester la surveillance NAGIOS plus profondément que la simple mise hors tension de la machine virtuelle ou la déconnexion de la carte réseau virtuelle; Je souhaite tester ou "imposer une alarme d'espace disque" en occupant plusieurs% de l'espace libre pendant une courte période.

Je sais que je pourrais juste utiliser un

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

ou quelque chose comme ça ... mais cela prend du temps et charge le système et demande encore du temps lors de la suppression des fichiers de test avec rm.

Existe-t-il un moyen rapide (presque instantané) de remplir une partition qui ne charge pas le système et prend beaucoup de temps? Je pense à quelque chose qui alloue de l’espace, mais ne le "remplit" pas.

Axel Werner
la source
Désolé, j'ai oublié de mentionner que c'est un système de fichiers >> ext3.
Axel Werner
Vous devez le mettre à niveau vers ext4 pour prendre en charge Fallocate.
Rui F Ribeiro
1
La bombe zip fonctionne toujours
galois
1
@ jaska Faites-en une réponse. C’était la toute première idée que j’avais en lisant le titre ...
Crowley
Pourquoi n'utilisez-vous pas /dev/full? (En supposant qu'il existe). Essayez echo 'test' > /dev/fullDebian.
Ismael Miguel

Réponses:

64

Le moyen le plus rapide de créer un fichier sur un système Linux consiste à fallocate:

fallocate -l 50G file 

De l'homme:

fallocate est utilisé pour manipuler l’espace disque alloué pour un fichier, que ce soit pour le désallouer ou le préallouer.
Pour les systèmes de fichiers prenant en charge l'appel système fallocate, la préallocation est effectuée rapidement en allouant des blocs et en les marquant comme non initialisés, ce qui n'exige aucune IO pour les blocs de données. C'est beaucoup plus rapide que de créer un fichier en le remplissant de zéros.
Pris en charge pour XFS (depuis Linux 2.6.38), ext4 (depuis Linux 3.0), Btrfs (depuis Linux 3.7) et tmpfs (depuis Linux 3.5).

Rui F Ribeiro
la source
1
Pourquoi le traversez-vous sudo?
gerrit
1
@gerrit Ajouté ce point à la réponse.
Rui F Ribeiro
3
" fallocatenécessite des privilèges root" Pas sur mon système (Linux Mint 17.3, en aval d'Ubuntu, donc Debian). (système de fichiers ext4)
TJ Crowder le
1
+1 bien que l'OP ait explicitement mentionné que son système de fichiers est ext3.
syneticon-dj
1
@RuiFRibeiro, merci! pour sles11sp4, ive a pu créer un fichier, le formater avec ext4, mais s’il n’a pas pu le monter en mode RW. plus tard, j'ai trouvé un message du noyau dans / var / log / messages qui disait, ext4 n'est supporté qu'en lecture seule. : /
Axel Werner
13

D'autres alternatives incluent:

  1. pour modifier les seuils d'alarme à un niveau proche ou inférieur à l'utilisation actuelle, ou
  2. pour créer une très petite partition de test avec un nombre limité d'inodes, de taille ou d'autres attributs.

Il peut également être utile de pouvoir tester des éléments tels que le pourcentage réservé réservé à la racine, le cas échéant.

thrig
la source
le pourcentage réservé de root est normalement de 10% sauf si vous le modifiez - il aboutit à un gaspillage trop important du système dans les grandes partitions / disques modernes. Lors de la définition des alarmes, vous feriez mieux de déjà en tenir compte.
Rui F Ribeiro
+1 pour la première chose. cent fois vrai. pourquoi diable devrais-je créer quelque chose sur un disque machine? Que se passe-t-il si quelque chose (comme coredump, un travail par lots générant de gros fichiers temporaires, ...) se produit au moment de mes tests et que le disque entier est dévoré par accident?
Date
2
@Fisch - Pourquoi? Pour vous assurer que votre seuil d'alerte est correct et que vous ne définissez pas, par inadvertance, le pourcentage sans inode au lieu du pourcentage sans espace disque (comme je l'ai déjà vu auparavant). Si quelque chose échoue parce que vous avez rempli le disque jusqu'au seuil d'alerte, votre seuil d'alerte est trop bas. Le but de l'alerte est qu'il est censé vous alerter avant que les choses ne commencent à casser.
Johnny
Chat, bon point. Mais pas de solution pour moi. Je n'ai pas le contrôle sur la configuration de la machine virtuelle (je ne peux pas modifier les partitions ou les disques virtuels), ni le contrôle sur le serveur NAGIOS.
Axel Werner
2
@AxelWerner Pouvez-vous monter en boucle un fichier en tant que "faux" partition? Cela vous permettrait quand même de tester sans affecter sérieusement quoi que ce soit. Formatez-le avec l'un des systèmes de fichiers pris en charge et vous pourrez également jouer avec 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

Comme ces trois manières peuvent toutes remplir une partition rapidement.

Si vous aimez utiliser dd , vous pouvez généralement l’essayer avec chercher . Juste définir seek=file_size_what_you_needet définir count=0. Cela indique au système il y a un fichier et sa taille est ce que vous définissez, mais le système ne sera pas le créer réellement. Et utilisé de cette façon, vous pouvez créer un fichier plus gros que la taille de la partition.


Exemple, sur une partition ext4 avec moins de 3G disponible. Utilisez dd pour créer un fichier 5T qui existe sous forme de métadonnées, ne nécessitant pratiquement aucun espace en mode bloc.

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

Sortie:

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
Sept
la source
1
pouvez-vous ajouter quelques informations à votre réponse?
Chat
J'ajoute simplement plus de réflexion dans une question finie destinée aux personnes cherchant la même question d'une autre manière. ignorez-le si vous ne l'êtes pas.
Voir ven
Cette count=0méthode est assez intéressante, j'ai ajouté un exemple.
agc
7
Notez que l' ddexemple ci-dessus peut bien allouer un fichier fragmenté. Dans ce cas, la taille du fichier est de 50 Go. En fait, il n’utilise qu’un bloc (ou même pas) et le disque n’est donc pas plein. YMMV.
MAP
2
J'ai testé votre suggestion sur mon système de fichiers ext3. cela n'a pas fonctionné comme prévu. truncate et dd ont créé un fichier de grande taille, mais "df -h" ne l'a pas reconnu. montre toujours le même espace hd gratuit.
Axel Werner
0

Vous pouvez également tirer parti de l’outil stress-ng pris en charge sur un grand nombre de systèmes Linux:

stress-ng --fallocate 4 --fallocate-bytes 70% --timeout 1m --metrics --verify --times
theosophe74
la source