Ich suche ein Terminal-Kommando, welches den gesamten freien Speicher auf der SD-Karte eines Raspberry als einzige Zahl anzeigt. Das immerzu mir empfohlene "df -h" liefert statt dessen eine Liste, mit der ich im konkreten fall nichts anfangen kann.
Natürlich könnte ich mir die Info auch zusammen-parsen, aber das geht doch bestimmt auch gleich als EINE Zahl, oder?
Was bringt das eigentlich? Üblicherweise sind die Karten partitioniert, wenn da ein Linux drauf läuft, und man kann nur den Platz einzelner Partitionen, nicht aber partitionsübergreifend nutzen.
Auf jeden Fall gibt es eine FAT32-Partition, und eine oder mehrere meist mit Exfts(nummer) formatierte Partitionen.
Die FAT32-Partition ist nötig, damit die GPU-Hardware davon booten kann, dort liegt auch die berühmte "config.txt".
Den freien Platz auf dem Root-FS. Auf welcher Partition auch immer es liegen mag. Das ergab die Exegese seiner Frage. Mit der Summe aller freien Plätze auf sämtlichen Filesystemen kann man meist nicht sonderlich viel anfangen.
Den freien Platz auf dem Root-FS. Auf welcher Partition auch immer es
liegen mag. Das ergab die Exegese seiner Frage. Mit der Summe aller
freien Plätze auf sämtlichen Filesystemen kann man meist nicht
sonderlich viel anfangen.
Der folgende Satz könnte darauf hindeuten, dass der TE genau das möchte:
Das immerzu mir empfohlene "df -h" liefert statt dessen eine Liste,
mit der ich im konkreten fall nichts anfangen kann.
Bei der Bestimmung des /gesamten/ freien Speichers auf der SD-Karte
müssten zusätzlich auch nicht gemountete Filesysteme, unformatierte
Partitionen und unpartitionierte Bereiche berücksichtigt werden.
Oder dass er den Schritt von
df -h
zu
df -h /
nicht schaffte. So hatte ich das in Erinnerung an frühere Fragen interpretiert.
Da der von ihm favorisierte Vorschlag von Ernst die Grösse in Blöcken oder Bytes angibt, will er eigentlich nicht einmal das -h von "df", sondern eher -B aka --block-size.
Oder dass er den Schritt von
df -h
zu
df -h /
nicht schaffte. So hatte ich das in Erinnerung an frühere Fragen
interpretiert.
Ich wollte gerne EINE Zahl (ja, vom root system), was auch df -h / nicht leistet, sondern noch überflüssige Prosa anheftet, siehe Bild.
"df -h ." ist auch nicht besser.
Der Vorschlag von Ernst B. liefert tastsächlich nur eine nackte Zahl, sonst nix, genau richtig. Auch wenn ich zur Sicherheit wegen der Blockgröße zwei mal abfrage. Passt perfekt.
Den bc müsste er allerdings nachinstallieren. Heftige Aufgabe. :)stat -f -c
"echo $((%a*%S))" / | bash
Nö, nur ziemlich unpraktisch bei dutzenden laufenden Raspis. Es genügt vollkommen, das Shell-Kommando in die ohnehin laufende (und regelmäßig aktualisierte) App zu integrieren.
Nö, nur ziemlich unpraktisch bei dutzenden laufenden Raspis. Es genügt
vollkommen, das Shell-Kommando in die ohnehin laufende (und regelmäßig
aktualisierte) App zu integrieren.
Unnötig trifft es besser. Ein paar posts weiter oben habe ich eine maximal einfache Variante gezeigt.
Nö, nur ziemlich unpraktisch bei dutzenden laufenden Raspis.
Im Übrigen, was hat den die Anzahl der RaspPis damit zu tun, wenn auf jedem einzelnen immer nur eine Instanz läuft? Irgendetwas stimmt doch hier nicht…
Im Übrigen, was hat den die Anzahl der RaspPis damit zu tun, wenn auf
jedem einzelnen immer nur eine Instanz läuft? Irgendetwas stimmt doch
hier nicht…
Bei 25+ Raspis müsste ich das doch wohl 25+ mal, z.B. per SSH-Session machen, oder etwa nicht?
Entweder reihum abfragen oder per cron an einen zentralen Server senden
lassen.
Du meinst natürlich einen systemd.timer(5)... ;-) aber wie auch immer, hast Du vollkommen Recht: dazu bedarf es je einer Software auf den 25+ RasPis, im Monitoring-Sprech einen Agent, welche periodisch aufgerufen wird und die Daten irgendwo einliefert -- oder, wenn der Einlieferungspunkt gerade einmal nicht verfügbar sein sollte, die Daten puffert, bis er wieder da ist. So etwas wird häufig als Push-Technologie bezeichnet und bedarf eines höheren initialen Aufwandes, damit einerseits ein zentraler Einlieferungspunkt geschaffen (mit entsprechenden Verarbeitungskapazitäten) wird. Außerdem muß auf den Clients die entsprechende Software ausgerollt und gepflegt werden.
Andererseits gibt es natürlich auch Pull-Technologien, die je nach konkretem Anwendungsfall große Vorzüge haben. Wenn es nun nur darum ginge, vereinzelte Meßdaten zu sammeln, würde sich wohl eher eine Pull-Technologie empfehlen, die also nacheinander oder womöglich parallel (da das Netzwerk hier im Zweifel der Flaschenhals ist, böte sich das für Parallelisierung per Multithreading, Async oder Green Threads geradezu an) die Daten ausliest und sie weiterverarbeitet. Ein Nachteil einer Pull-Technologie ist aber, daß die zentrale Sammelinstanz Zugang zu den Maschinen haben muß, was sich heutzutage aber mit einem relativ hohen Sicherheitsniveau über SSH machen läßt.
Eine weitere Option wäre eine Mischung aus Push- und Pull-Technologie. Zum Beispiel könnte man das Paket sysstat installieren und konfigurieren, das periodisch die Performance-Counter des Linux-Kernels ausliest und speichert, darunter auch die Daten für alle vorhandenen Dateisysteme. Mit dem Programm sar(1) lassen sich diese standardmäßig unter /var/log/sysstat/ komprimiert gespeicherten Daten in einem tabellarischen Format ausgeben, oder mit dem Hilfsprogramm sadf(1) auch in CSV, JSON, XML, oder dem passenden Format für den Performance Co-Pilot (PCP). Während der System Activity Reporter (sar) dann als Datensammelagent arbeiten würde, würde andererseits nur noch eine zentrale Software benötigt, die die Daten der Hosts holt und verarbeitet.
Nebenbei bemerkt gibt es in dem vom TO gewünschten Umfald eine ganze Reihe etablierter Software, vom klassischen Monitoring mit zum Beispiel Nagios oder Icinga bis hin zu modernen Observability-Lösungen, die außer Performancedaten auch noch andere Datenquellen wie System- und Applikationslogs einsammeln und zusammenführen, um den gesamten Systemzustand abzubilden. Solche Systeme sind allerdings meist nicht ganz trivial aufzusetzen und zu nutzen.