Zeigen Sie den freien Speicherplatz des Dateisystems an, der dem Root-Benutzer zur Verfügung steht

12

Standardmäßig reserviert Linux einen Teil eines Dateisystems für den Root-Benutzer, zumindest für ext4 (um zu verhindern, dass normale Benutzer das Laufwerk vollständig füllen und das System zum Absturz bringen, und um die Fragmentierung zu verringern). Zeigt jedoch dfnur den freien Speicherplatz an, der für normale Benutzer sichtbar ist (auch wenn er als Root ausgeführt wird). Wie zeigt man den "echten" freien Speicherplatz an, auf den root zugreifen kann?

Mechanische Schnecke
quelle

Antworten:

6

Ich bin nicht sicher, ob ein Tool integriert ist, aber wenn Sie das reservierte Tool auf den Standardwert von 5% belassen haben, werden Sie Folgendes erfahren:

df / | grep dev | cut -f 3,6 -d\  | awk '{print ($1*.05)+$2}'

dfDas Stammverzeichnis grepfür die Zeile mit dev (um den Header zu entfernen), cutdie Größe und die verfügbaren Felder. Verwenden Sie dann ein awkSkript, um 5% der Festplattengröße zu berechnen, die zu den verfügbaren hinzugefügt wurde.

Sie können die eigentliche Reservierung abrufen tune2fs -l <device>und diese mit der obigen in einem Skript kombinieren.

Paul
quelle
2
Richtig, der folgende Befehl gibt an, wie viel Partitionsspeicher für privilegierte Benutzer reserviert ist : tune2fs -l /dev/DEVICE | egrep "Block count|Reserved block count". ZB für meine "Multimedia Buffer" -Partition: Block count: 2621440und Reserved block count: 128449: 4,9% der verfügbaren Blöcke (konservative Einstellung, um eine Fragmentierung zu verhindern).
Tuk0z
Der cutBefehl muss nicht verwendet werden: Sie können die Felder awkdirekt auswählen . Tatsächlich cutfunktionierte der Befehl bei mir nicht wie erwartet. Wie auch immer, ich gab eine andere Antwort, die eine genauere Antwort geben sollte.
Jarno
1
Ausführen tune2fs -m <percentage> <device-name>, um den Speicherplatz zu ändern, der nur für die Root-Verwendung reserviert ist.
luka5z
1
Inspiriert von dem oben sudo tune2fs -l $(df | grep -E '/$' | cut -d\ -f 1) | egrep "Reserved block count|Block size" | paste -sd\ | awk '{print ($4 * $7 / ( 1024 * 1024 ) ), "MB"}'
Gesagten habe
Dies ist keine tragbare Antwort. Überprüfen Sie unten für die Antwort, die Sie benötigen (Spoiler: tune2fs /dev/sda1oder noch besserstat -f -c '%a blocks free and %f blocks free for root (%S bytes per block)' /
trs
17

Mit dem Befehl Tune2fs (in / sbin / Tune2fs ) können Sie den reservierten Speicherplatz leicht bestimmen : (und mehr!)

tune2fs -l /dev/sda1

Ich werde die Informationen meines Systems als Referenz bereitstellen. Ich werde überflüssige Zeilen entfernen, die für diese Frage nicht wichtig sind:

Der Header ... und der Datenträgername, mit dem ich alle meine Laufwerke beschrifte , erleichtern die Identifizierung bei Bedarf.

tune2fs 1.42.4 (12-Jun-2012)
Filesystem volume name:   xenon
Last mounted on:          /
...

WIRKLICH wollen, dass dies "sauber" sagt, während das System läuft. Ehrlich!

Filesystem state:         clean

Hier beginnen die Informationen zur Datenspeicherkapazität:

Hier können Sie sehen, dass ich insgesamt 121.179.648 Blöcke habe ... mit einer Blockgröße von 4 KB (4096), die sich zu einer großen Zahl (462 GB) multipliziert. (Die Blockgröße ist unten angegeben.)

Block count:              121179648

Und die reservierten Blöcke ... wenn Sie sich die Nummer oben und die Nummer unten ansehen ... sollten Sie relativ schnell herausfinden können, dass ich 1% reserviert habe. In diesem Fall (4,62 GB)

Reserved block count:     1211796

Wie viel freier Speicherplatz ist derzeit verfügbar? Genau hier!

Free blocks:              104090586
...

Und die alles entscheidende Blockgröße. Nützlich zum Multiplizieren.

Block size:               4096
...

Diese Zeilen sagen, WER die Blöcke für ... Benutzer 0, root, in diesem Fall reserviert sind

Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
...

Hier sind viel mehr Informationen verfügbar, aber dies sollte Ihnen die Möglichkeit geben, schnell festzustellen, wie viel verfügbar ist und wie viel mehr für root reserviert ist. Einfache Mathematik.

Hoffe das hilft. Denken Sie daran ... Manpages sind Ihre Freunde.

lornix
quelle
2

Dies zeigt freien Speicherplatz in Bytes in der Partition an, die sich auf "/ path" bezieht.

printf '%s' $(($(stat -f --format='%f*%S' /path)))

Sie müssen kein Superuser sein, um es auszuführen.

Übrigens verstehe ich nicht ganz, was der Unterschied zwischen ist

% s Blockgröße (für schnellere Übertragungen)

% S Grundblockgröße (für Blockzählungen)

in Verwendung von stat.

jarno
quelle
Cool - berücksichtigt dies den für root reservierten Speicherplatz?
Paul
@ Paul ja, es ist enthalten
jarno
Ihre Ausgabe ist effektiv eine Summe - Sie können die Ausgabe also weiterleiten bc, um die Anzahl der Bytes zu ermitteln, oder sogar --format='%f*%S/1024/1024/1024' | bcKilobyte / Megabyte / Gigabyte abrufen, je nachdem, wie viele Abteilungen Sie auswählen.
Paul
@ Paul Nun, ich würde es ein Produkt nennen. Die binären Präfixe werden als Kibibyte, Mebibyte bzw. Gibibyte bezeichnet. Die umgebende arithmetische Erweiterung $(( ... )) führt die Berechnung durch, ergibt jedoch nur den ganzzahligen Teil des Quotienten (wenn Sie Division hinzufügen). Oder meinst du, deine Shell unterstützt keine arithmetische Erweiterung?
Jarno
@Paul Aber wenn Sie bcstattdessen verwenden, können Sie den Quotienten mit beliebiger Genauigkeit erhalten, wenn Sie das brauchen.
jarno