web-dev-qa-db-fra.com

Comment remplir / utiliser instantanément beaucoup d'espace disque?

Sur un Linux VM je voudrais TESTER la surveillance NAGIOS plus profondément que simplement éteindre le VM ou déconnecter le NIC virtuel; je voudrais tester ou "appliquer une alarme d'espace disque" en occupant plusieurs% d'espace libre pendant une courte période.

Je sais que je pourrais simplement 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 nécessite 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.

51
Axel Werner

La façon la plus rapide de créer un fichier dans un système Linux est d'utiliser fallocate:

fallocate -l 50G file 

De l'homme:

fallocate est utilisé pour manipuler l'espace disque alloué pour un fichier, soit pour le désallouer, soit pour le préallouer.
Pour les systèmes de fichiers qui prennent en charge l'appel système fallocate, la préallocation se fait rapidement en allouant des blocs et en les marquant comme non initialisés, ne nécessitant pas de 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).

69
Rui F Ribeiro

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 des inodes, une taille ou d'autres attributs limités.

La possibilité de tester des éléments tels que l'exécution du pourcentage réservé racine, le cas échéant, peut également être utile.

13
thrig
  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 façons peuvent toutes remplir rapidement une partition.

Si vous aimez utiliser dd, vous pouvez généralement l'essayer avec chercher. Réglez simplement seek=file_size_what_you_need Et mettre count=0. Cela indiquera au système qu'il existe un fichier , et sa taille est ce que vous définissez, mais le système ne le créera pas réellement. Et utilisé de cette façon, vous pouvez créer un fichier qui est plus grand 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 en tant que métadonnées - ne nécessitant pratiquement aucun espace de bloc.

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

Production:

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
10
Se ven

Vous pouvez également profiter de l'outil de gestion du stress qui est pris en charge sur un grand nombre de systèmes Linux:

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