Möglichkeit, sofort viel Speicherplatz zu belegen / zu verbrauchen?

45

Auf einer Linux-VM möchte ich die NAGIOS-Überwachung ausführlicher testen, als nur die VM auszuschalten oder die virtuelle Netzwerkkarte zu trennen. Ich möchte einen Speicherplatzalarm testen oder "erzwingen", indem ich für einen kurzen Zeitraum mehrere Prozent des freien Speicherplatzes belege.

Ich weiß, dass ich einfach eine verwenden könnte

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

oder so ähnlich ... aber das braucht Zeit und lädt das System und benötigt wieder Zeit, wenn die Testdateien mit rm entfernt werden.

Gibt es eine schnelle (fast sofortige) Möglichkeit, eine Partition zu füllen, die das System nicht herunterlädt und viel Zeit in Anspruch nimmt? Ich denke über etwas nach, das Raum zuweist, ihn aber nicht "ausfüllt".

Axel Werner
quelle
Entschuldigung, ich habe vergessen zu erwähnen, dass es sich um ein >> ext3-Dateisystem handelt.
Axel Werner
Sie müssen es auf ext4 aktualisieren, um fallocate zu unterstützen.
Rui F Ribeiro
1
Zip-Bombe funktioniert immer
Galois
1
@jaska Mach daraus eine Antwort. Es war die allererste Idee, die ich beim Lesen des Titels hatte ...
Crowley,
Warum benutzt du nicht /dev/full? (Vorausgesetzt, es existiert). Versuchen Sie es echo 'test' > /dev/fullmit Debian.
Ismael Miguel

Antworten:

63

Der schnellste Weg, eine Datei in einem Linux-System zu erstellen, ist fallocate:

fallocate -l 50G file 

Vom Menschen:

fallocate wird verwendet, um den zugewiesenen Speicherplatz für eine Datei zu bearbeiten, entweder um die Zuordnung aufzuheben oder um sie vorab zuzuweisen.
Bei Dateisystemen, die den Systemaufruf fallocate unterstützen, erfolgt die Vorbelegung schnell, indem Blöcke zugewiesen und als nicht initialisiert markiert werden, ohne dass eine E / A für die Datenblöcke erforderlich ist. Dies ist viel schneller als das Erstellen einer Datei durch Füllen mit Nullen.
Unterstützt für XFS (seit Linux 2.6.38), ext4 (seit Linux 3.0), Btrfs (seit Linux 3.7) und tmpfs (seit Linux 3.5).

Rui F Ribeiro
quelle
1
Warum läufst du es durch sudo?
Gerrit
1
@gerrit Diesen Punkt zur Antwort hinzugefügt.
Rui F Ribeiro
3
" fallocatebenötigt root-Rechte" Nicht auf meinem System (Linux Mint 17.3, stromabwärts von Ubuntu, also Debian). (ext4-Dateisystem)
TJ Crowder
1
+1 obwohl das OP ausdrücklich erwähnte, dass sein Dateisystem ext3 ist.
syneticon-dj
1
@RuiFRibeiro, danke! für sles11sp4 konnte ich eine Datei erstellen, sie mit ext4 formatieren, aber im RW-Modus nicht mounten. Später fand ich eine Kernelmeldung in / var / log / messages, die besagte, dass ext4 nur als schreibgeschützt unterstützt wird. : /
Axel Werner
13

Andere Alternativen umfassen:

  1. die Alarmschwellen auf einen Wert in der Nähe oder unterhalb der aktuellen Verwendung zu ändern, oder
  2. Erstellen einer sehr kleinen Testpartition mit eingeschränkten Inodes, Größen oder anderen Attributen.

Es kann auch nützlich sein, Dinge zu testen, z. B. den Prozentsatz der Root-Reservierung zu testen, falls vorhanden.

Thrig
quelle
Der Prozentsatz der Root-Reservierung beträgt normalerweise 10%, es sei denn, Sie optimieren ihn - dies führt zu einer zu großen Verschwendung des Systems in großen Partitionen / modernen Festplatten. Wenn Sie Alarme definieren, sollten Sie dies bereits berücksichtigen.
Rui F Ribeiro
+1 für die erste Sache. hundertmal wahr. warum zum Teufel sollte ich eigentlich etwas auf einer Maschinenfestplatte erstellen? Was passiert, wenn etwas (z. B. Coredump, Batch-Job, der große temporäre Dateien generiert, ...) zum Zeitpunkt meines Tests passiert und versehentlich die gesamte Festplatte aufgebraucht wird?
Fiisch
2
@ Fisch - Warum? Stellen Sie sicher, dass Ihr Warnschwellenwert korrekt ist und dass Sie nicht versehentlich den Prozentsatz für den freien Inode anstelle des Prozentsatzes für den freien Festplattenspeicher festlegen (was ich zuvor gesehen habe). Wenn etwas fehlschlägt, weil Sie einen Datenträger bis zum Alarmschwellenwert gefüllt haben, ist der Alarmschwellenwert zu niedrig. Der eigentliche Grund für den Alarm ist, dass Sie gewarnt werden sollen, bevor etwas kaputt geht.
Johnny
Katze, guter Punkt. Aber keine Lösung für mich. Ich habe keine Kontrolle über die VM-Konfiguration (Partitionen oder virtuelle Laufwerke können nicht geändert werden) und auch keine Kontrolle über den NAGIOS-Server.
Axel Werner
2
@AxelWerner Kann man eine Datei als "gefälschte" Partition per Loopback mounten? Dann können Sie immer noch testen, ohne ernsthafte Auswirkungen zu haben. Formatieren Sie es mit einem der unterstützten Dateisysteme, und Sie können auch mit fallocate herumspielen.
Tonny
9
  1. fallocate -l 50G big_file

  2. truncate -s 50G big_file

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

Da diese drei Möglichkeiten alle eine Partition schnell füllen können.

Wenn Sie gerne dd benutzen , können Sie es normalerweise mit seek versuchen . Einfach einstellen seek=file_size_what_you_needund einstellen count=0. Dadurch wird dem System mitgeteilt, dass es eine Datei gibt , und die Größe entspricht der von Ihnen festgelegten, das System erstellt sie jedoch nicht. Auf diese Weise können Sie eine Datei erstellen, die größer als die Partitionsgröße ist.


Beispiel: Auf einer ext4- Partition mit weniger als 3G verfügbar. Verwenden Sie dd , um eine 5T-Datei zu erstellen, die als Metadaten vorhanden ist und praktisch keinen Blockspeicherplatz benötigt.

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

Ausgabe:

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
Sieben
quelle
1
Können Sie Ihrer Antwort weitere Informationen hinzufügen?
Katze
Ich füge nur mehr Gedanken in eine fertige Frage für Leute ein, die die gleiche Frage auf andere Weise suchen. ignoriere es was wenn du nicht bist.
Siehe
Diese count=0Methode ist sehr interessant, ich habe ein Beispiel hinzugefügt.
Agc
7
Beachten Sie, dass im ddobigen Beispiel möglicherweise eine Sparse-Datei zugewiesen wird. In diesem Fall beträgt die Dateigröße 50 GB, es wird nur ein Block (oder nicht einmal) verwendet, und die Festplatte wird nicht voll. YMMV.
KARTE
2
Ich habe Ihren Vorschlag auf meinem ext3-Dateisystem getestet. es hat nicht wie erwartet funktioniert. truncate und dd haben eine Datei mit einer großen Dateigröße erstellt, aber "df -h" hat sie nicht erkannt. zeigt immer noch den gleichen freien Festplattenspeicher.
Axel Werner
0

Sie können auch das Stresstool nutzen, das auf einer Vielzahl von Linux-basierten Systemen unterstützt wird:

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