Ich möchte 1 Terabyte Daten auf einer externen Festplatte sichern.
Ich benutze diesen Befehl: tar cf /media/MYDISK/backup.tar mydata
PROBLEM: Mein schlechter Laptop friert ein und stürzt ab, wenn ich 100% CPU oder 100% Festplatte benutze (wenn Sie darauf reagieren möchten, schreiben Sie bitte hier ) . Ich möchte also bei etwa 50% CPU und 50% Festplatte bleiben.
Meine Frage: Wie man CPU und Scheibe mit dem tar
Befehl drosselt ?
Rsync hat die Option --bwlimit, aber ich möchte ein Archiv, weil 1) es viele kleine Dateien gibt. 2) Ich bevorzuge es, eine einzelne Datei zu verwalten, anstatt einen Baum. Deshalb benutze ich tar
.
nice
100% ige CPU-Auslastung wird nicht verhindertAntworten:
Mit können Sie
pv
die Bandbreite einer Pipe drosseln. Da Ihr Anwendungsfall stark an E / A gebunden ist, sollte der zusätzliche CPU-Overhead beim Durchlaufen einer Pipe nicht spürbar sein, und Sie müssen keine CPU-Drosselung durchführen.quelle
apt-get install pv
. Ich empfehle `-b` nachher hinzuzufügen-L 1m
: Auf diese Weise wird ein inkrementeller Bytezähler ausgegeben, der jede Sekunde aktualisiert wird. Auf diese Weise wissen Sie, wie viele Bytes bis jetzt geschrieben wurdentar czf
statt verwendentar cf
) (sodass beim-L 1m
Schreiben auf Ihrer Festplatte 1 MB / s nicht überschritten werden .... Ihr Lesevorgang auf der Festplatte wird jedoch wahrscheinlich zwischen 1 MB / s liegen und 5 MB / s, abhängig von Ihrem Inhaltstyp)Sie können das Tool cpulimit ausprobieren, das den CPU-Prozentsatz begrenzt. Es ist kein Standard-Tool, daher müssen Sie es installieren. Hier ist ein kurzer Auszug aus der README:
Dann würde ich ionice empfehlen, um die E / A-Nutzung einzuschränken, obwohl der gleichzeitige Zugriff begrenzt ist, nicht der maximale Durchsatz.
quelle
Man kann nicht wirklich einen Prozess dazu bringen, weniger zu laufen . Sie können es verwenden
nice
, um eine niedrigere Priorität zuzuweisen, dies steht jedoch im Verhältnis zu anderen Prozessen. Die Möglichkeit, den CPU-Kühler währendusleep(3)
der Ausführung eines Prozesses zu betreiben, besteht darin , den Prozess für eine bestimmte Zeit aus dem Ausführungsstatus zu zwingen. Dies würde jedoch entweder das Patchentar
oder die Verwendung desLD_PRELOAD
Mechanismus zur Bereitstellung einer gepatchten Funktion erfordern, die viel Zeit in Anspruch nimmttar
(z. B.fopen(3)
).Ich vermute, dass Ihre beste Lösung die Hardware ist, die Sie bei SuperUser erwähnt haben: Halten Sie den Laptop kühl und / oder senken Sie den CPU-Takt.
Eine ärgerliche, aber möglicherweise praktikable Problemumgehung (ein Trick, wirklich) funktioniert auf einer "makroskopischen" Ebene. Anstatt
tar
100 ms alle 200 ms laufen zu lassen, können Sie aus zwei eine Sekunde machen. Hinweis: Dies ist ein schrecklicher, schrecklicher Kludge. Aber hey, es könnte sogar funktionieren!Die erste
sleep
passt die Ruhezeit an, die zweite die Laufzeit. So wie es jetzt ist, hat es ein Tastverhältnis von 50%. Um die Temperatur niedrig zu halten, müssen Sie den Arbeitszyklus wahrscheinlich auf 25% oder weniger reduzieren (1 Sekunde, 3 Sekunden Schlaf = 1 von 4 Sekunden = 25% Arbeitszyklus). Der Shell-Befehlsleep
kann übrigens Bruchzeiten annehmen. So könnte man sogar sagensleep 0.1
. Behalten Sie den Wert über 0,001, um sicherzugehen, und vergessen Sie nicht, dass die Skriptausführung die Zeit verlängert.quelle
Eine allgemeinere Möglichkeit, die CPU zu begrenzen, ist die Verwendung
/sys
. Dies scheint sowieso das zu sein, was Sie wollen, da andere Dinge alstar
die Durchführung rechenintensiver Aufgaben in der Lage sindtar
.Der Weg dazu ist:
/sys/devices/system/cpu/cpuX/cpufreq
für jede Ihrer CPUs zu (ersetzen Sie siecpuX
durch jede CPU).scaling_available_frequencies
nach, welche Frequenzen Ihre CPU unterstützt.echo 1234567 > scaling_max_freq
Dadurch wird verhindert, dass die CPU jemals die angegebene Frequenz überschreitet.
quelle