it-swarm.com.de

Kann mir der Speicherplatz ausgehen, indem ich eine sehr große Anzahl leerer Dateien erstelle?

Es ist bekannt, dass leere Textdateien null Bytes haben:

(enter image description here

Jeder von ihnen enthält jedoch Metadaten , die nach meinen Recherchen in Inodes und verwenden Sie Leerzeichen gespeichert sind.

Vor diesem Hintergrund erscheint es mir logisch, dass es möglich ist, eine Festplatte zu füllen, indem lediglich leere Textdateien erstellt werden. Ist das richtig? Wenn ja, wie viele leere Textdateien würde ich benötigen, um eine Festplatte mit beispielsweise 1 GB auszufüllen?


Um einige Überprüfungen durchzuführen, führe ich df -i aber dies zeigt anscheinend den Prozentsatz der verwendeten Inodes (?) und nicht wie viel sie wiegen.

Filesystem             Inodes  IUsed    IFree IUse% Mounted on
udev                   947470    556   946914    1% /dev
tmpfs                  952593    805   951788    1% /run
/dev/sda2            28786688 667980 28118708    3% /
tmpfs                  952593     25   952568    1% /dev/shm
tmpfs                  952593      5   952588    1% /run/lock
tmpfs                  952593     16   952577    1% /sys/fs/cgroup
/dev/sda1                   0      0        0     - /boot/efi
tmpfs                  952593     25   952568    1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708    3% /home/lucho
35
luchonacho

Diese Ausgabe schlägt 28786688 inodes insgesamt, danach der nächste Versuch, eine Datei im Root-Dateisystem (Gerät /dev/sda2) gibt ENOSPC zurück ("Kein Platz mehr auf dem Gerät").

Erläuterung: Beim ursprünglichen * nix-Dateisystemdesign wird die maximale Anzahl von Inodes zum Zeitpunkt der Erstellung des Dateisystems festgelegt. Ihnen wird dedizierter Speicherplatz zugewiesen. Ihnen können die Inodes ausgehen, bevor Ihnen der Speicherplatz für Daten ausgeht, oder umgekehrt. Das am häufigsten verwendete Standard-Linux-Dateisystem ext4 hat immer noch diese Einschränkung. Informationen zu Inode-Größen in ext4 finden Sie in der Manpage zu mkfs.ext4.

Linux unterstützt andere Dateisysteme ohne diese Einschränkung. Auf btrfs wird Speicherplatz dynamisch zugewiesen. "Die Inode-Struktur ist relativ klein und enthält keine eingebetteten Dateidaten oder erweiterten Attributdaten." (ext3/4 reserviert Platz in Inodes für erweiterte Attribute ). Natürlich kann Ihnen immer noch der Speicherplatz ausgehen, indem Sie zu viele Metadaten/Verzeichniseinträge erstellen.

Tmpfs ist ein weiteres Beispiel, bei dem Inodes dynamisch zugewiesen werden. Es ist schwer zu wissen, wie viele Inodes maximal von df -i würde in der Praxis tatsächlich für diese Dateisysteme bedeuten. Ich würde dem angezeigten Wert keine Bedeutung beimessen.


"XFS ordnet Inodes auch dynamisch zu. JFS auch. Reiserfs. F2FS. Traditionelle Unix-Dateisysteme weisen Inodes statisch zur mkfs-Zeit zu, ebenso wie moderne FSes wie ext4, die ihr Erbe darauf zurückführen, aber heutzutage ist das so." die Ausnahme, nicht die Regel.

"Übrigens, mit XFS können Sie den maximalen Prozentsatz des von Inodes verwendeten Speicherplatzes begrenzen, sodass Ihnen die Inodes ausgehen können, bevor Sie den Punkt erreichen, an dem Sie keine vorhandenen Dateien mehr anhängen können. (Die Standardeinstellung beträgt 25% für FSes unter 1 TB 5% für Dateisysteme bis zu 50 TB, 1% für größere Systeme.) Wie auch immer, diese Speicherplatznutzung in Metadaten (Inodes und Extent-Maps) wird in regulären df -h "- Peter Cordes in einem Kommentar zu dieser Antwort

40
sourcejedi

Das Erstellen leerer Dateien umfasst Folgendes:

  • inodes, einer pro Datei;
  • zusätzliche Verzeichniseinträge, ebenfalls einer pro Datei, jedoch aggregiert.

Die Anzahl der verfügbaren Inodes wird häufig beim Erstellen eines Dateisystems festgelegt und kann nicht geändert werden (einige Dateisysteme wie Btrfs oder XFS weisen Inodes dynamisch zu). Das wird gemessen an df -i. Wenn Ihnen die Inodes ausgehen, können Sie keine neuen Dateien oder Verzeichnisse erstellen, selbst wenn Speicherplatz verfügbar ist.

Verzeichniseinträge belegen ebenfalls Speicherplatz vom verfügbaren Speicherplatz. Sie können dies anhand der Größe eines Verzeichnisses erkennen: Es ist immer ein Vielfaches der Blockgröße. Wenn ein Verzeichnis viele Dateien enthält, nimmt seine Größe zu. Wenn Ihnen der Speicherplatz ausgeht, können Sie möglicherweise keine neuen Dateien oder Verzeichnisse in einem Verzeichnis erstellen, das "voll" ist (dh, wobei beim Hinzufügen einer neuen Datei ein neuer Block zugewiesen werden muss). auch wenn Sie Inodes zur Verfügung haben.

Ja, es ist möglich, dass nur leere Dateien nicht mehr über genügend Speicherplatz verfügen.

26
Stephen Kitt

Reines logisches Argument:

Ein Dateiname besteht aus einer Anzahl von Bytes ungleich Null. Selbst bei theoretischer maximaler Komprimierung in einem hypothetischen Dateisystem, das die absolut maximale Anzahl von Dateinamen zulässt, verbraucht jeder Dateiname mindestens ein Bit irgendwo auf Ihrer physischen Festplatte. Wahrscheinlich mehr, aber "1 Bit pro Datei" ist das triviale Minimum.

Berechnen Sie die Anzahl der Bits, die möglicherweise auf Ihre Platten passen, und das ist eine theoretische maximale Anzahl von (leeren oder nicht leeren) Dateien, die Sie darauf speichern können.

Die Antwort lautet also ja. Schließlich wird Ihnen der Speicherplatz ausgehen, unabhängig davon, welchen Speicher Sie verwenden, wenn Sie weiterhin leere Dateien hinzufügen. Offensichtlich werden Sie viel früher als das auf diese Weise berechnete Maximum ausgehen, aber Sie werden es tun.

7
AnoE

Einfach nein, aber unter Linux können Ihnen die Inodes ausgehen. Dies entspricht dem Auslaufen des Speicherplatzes.

sie können so etwas in Ihrer Shell versuchen n=0; while :; do touch $n; let n=n+1; done

Stellen Sie einfach sicher, dass Sie es in der virtuellen Maschine ausführen, da Sie sonst sehr schnell keine Inodes mehr haben.

0
MarkoShiva

Sie können die Festplatte nicht füllen, indem Sie leere Dateien erstellen. Die Festplatte bietet weiterhin ausreichend Platz für neue Dateien. Aber ja, Sie können den begrenzten Vorrat an freien Inodes des Dateisystems ausschöpfen - zu diesem Zeitpunkt können Sie keine neuen Dateien erstellen (obwohl Ihre Festplatte - soweit der Speicherplatz belegt ist - praktisch leer ist). Es ist nur die Liste der Inodes des Dateisystems, die alle verwendet wurden, nicht die Festplatte. Das Dateisystem ist also voll, während die Festplatte praktisch leer ist. Die Inode-Tabelle belegt Speicherplatz auf der Festplatte, aber die Tabelle wächst nicht, wenn Sie Dateien hinzufügen - genau wie ein Blatt Papier nicht wächst, wenn Sie in seine Zeilen schreiben.

(eine Antwort in einem Kommentar von Baard Kopperud)

0
luchonacho