Wie kann ich die Anzahl der Datenträger während der Sicherung begrenzen?


14

Ich habe einen Cron, der im Grunde genommen in der Nacht ein einfaches "tar zcf" macht.

Der Server hat:

  • 8 Kerne - Intel (R) Xeon (R) CPU E5606 @ 2,13 GHz
  • 25 GB RAM
  • Ubuntu 12.04.2 LTS
  • Hardware-RAID 1 (LSI Logic / Symbios Logic MegaRAID SAS SMC2108) mit zwei 2,728-TB-Festplatten

Wie Sie auf dem Überwachungsbildschirm sehen können:

http://clip2net.com/s/57YRKP

Während fast der gesamten Zeit des Teers geht die Disc-E / A auf> 90% und alle anderen Anwendungen (MySQL, Apache) werden sehr langsam.

2 Fragen:

  • Ist es normal, dass während des Backups so viele Datenträger-I / O-Vorgänge ausgeführt werden?
  • Gibt es eine Möglichkeit, die E / A der Disc zu begrenzen, damit andere Apps weiterhin ordnungsgemäß funktionieren können?

Vielen Dank!

Antworten:


11

Neben dem eher allgemeinen Ansatz ionicegibt es ein schönes Device-Mapper-Target (ioband), mit dem die Bandbreite für ein (DM) -Block-Gerät präzise gesteuert werden kann. Leider ist es nicht Teil des Standard-Kernels.

Außerdem können Sie wahrscheinlich Teer durch beschleunigen

  1. Lesen der Dateinamen in den Festplatten-Cache: find /source/path -printf ""
  2. Einlesen der Inodes in den Disk Cache: find /source/path -perm 777 -printf ""
  3. Damit tar größere Blöcke von und auf die Festplatte liest und schreibt, verwenden Sie z. B. eine Pipe mit mbuffer oder buffer (mit mindestens 100 MiB RAM): tar ... | mbuffer -m 256M -P 100 -p 1 ...

Warum reduziert das Einlesen der Dateinamen / Inodes in den Cache die Festplatten-E / A beim Tarieren? Ich würde erwarten, dass es den durchschnittlichen IO erhöht, während die Gesamtzeit nur geringfügig reduziert wird.
Scai

3
@scai Dies hilft nicht bei SSDs. meine empfehlung bezieht sich nur auf das drehen von festplatten. Was die Leistung bei diesen Geräten beeinträchtigt, ist die Kopfbewegung. Die Dateinamen werden in fortlaufenden Blöcken gespeichert, die Inodes in fortlaufenden Blöcken und der Dateiinhalt in fortlaufenden Blöcken. Wenn Sie es auf die tar-Weise tun, lesen Sie die Dateinamen (und Unterverzeichnisnamen) eines Verzeichnisses, greifen auf den Inode für eine Datei zu, dann auf die Datei selbst, dann auf den Inode für die nächste Datei, dann auf die nächste Datei selbst ... Das Bewirkt mehr Kopfbewegungen, als alle Namen und Inodes nacheinander zu lesen.
Hauke ​​Laging

@scai Die Auswirkungen auf die Leistung hängen davon ab, was Sie tun. Es ist für vollständige Sicherungen eher klein (hängt wahrscheinlich von der Dateigröße ab), aber ich habe einen großen Unterschied für differenzielle Sicherungen festgestellt (allerdings nicht für tar, da ich das nicht verwende, aber dies sollte ein allgemeiner Effekt sein).
Hauke ​​Laging

Nur um sicherzugehen, dass ich es richtig verstanden habe. Für 1. und 2. müssen wir nur den Befehl find aufrufen und Linux speichert ihn automatisch zwischen?
ACEMTP

@acemtp Das ist richtig. findwithout (eg) -permgreift jedoch nicht auf den Datei-Inode zu. Dies ermöglicht jedoch, dass die Optimierung zwei findAufrufe verwendet. Wenn Sie denselben findAnruf zweimal tätigen (mit wenig Zeit dazwischen), wird der zweite Anruf normalerweise innerhalb von Sekunden (oder weniger) beendet. Abhängig von der Größe des freien Speichers und der Datenmenge, die zu einem bestimmten Zeitpunkt zwischengespeichert wurde, werden die Daten aus dem Cache entfernt. Wenn Sie zu viel lesen, kann dies den Vorgang verlangsamen. Wenn Sie das Sicherungsprogramm über stdin mit Dateinamen versorgen können, können Sie dies verhindern, indem Sie Blöcke von zB 100 Dateien lesen.
Hauke ​​Laging

13

Es wird erwartet, dass bei Sicherungen hohe E / A-Werte auftreten, da diese im Allgemeinen über große Dateibäume mit großen Dateien erstellt werden. Unter ioniceLinux können Sie E / A-Jobs mit Klassen und Ebenen priorisieren. IIRC, Klasse 2, Stufe 7 ist die niedrigste, nicht ausgehungerte Stufe, die sie für andere E / A-Lasten und Benutzer praktisch unsichtbar macht. Siehe man ionicefür die Nutzung und Details.


1

Ich würde empfehlen, Teer abzulegen und mit rsync zu arbeiten (wie von Dogsbody erwähnt). Ich verwende BackupPC, um Dateien auf meinen Windows- und Linux-Systemen zu sichern. Es unterstützt sowohl die Verwendung von tar als auch von rsync und kümmert sich automatisch um die harte Verlinkung für Sie und bietet eine schöne Weboberfläche.

http://backuppc.sourceforge.net/


0

Wie andere geantwortet haben, ist dies normal und ioniceeine gute generische Methode, um Ihr System nicht zu beeinträchtigen.

Einige Male habe ich Leute gesehen, tardie etwas zu tun hatten, wenn es nicht nötig war. Wenn sich ein Prozentsatz der Daten, die Sie kopieren, seit der letzten Kopie nicht geändert hat, empfehle ich Ihnen, es zu rsyncversuchen.

Dadurch wird die Anzahl der E / A-Vorgänge verringert, indem nur die Dateien kopiert werden, die seit der letzten Kopie geändert wurden. Sie werden nicht in der Lage sein, die E / A um mehr als die Hälfte zu reduzieren, da alle Daten noch gelesen werden müssten, aber Sie werden die Menge der geschriebenen Daten erheblich reduzieren (was abhängig von Ihrer Hardware auch eine langsamere Operation sein kann).

Wenn Sie bei jeder Ausführung separate Kopien / Sicherungen wünschen, ist die leistungsstärkste Option –link-dest, mit der Sie unveränderte Dateien mit einer vorherigen Sicherung fest verknüpfen können. Dies spart enorm viel Platz auf dem Backup-Server. Ich habe zB eine Maschine (Fred) gesichert, Fred hat eine 20 GB Festplatte und ich kopiere das gesamte Laufwerk mit Ausnahme von / proc und / dev. Ich habe jetzt ein 20-GB-Verzeichnis auf meinem Sicherungsserver. Am nächsten Tag mache ich ein Backup von Fred und –link-dest zum Backup von gestern. Rsync vergleicht die entfernten Dateien mit der lokalen Kopie und wenn genau, werden sie nicht übertragen, sondern die neue Datei wird fest mit der gestrigen Datei verknüpft. Alle Dateien, die geändert wurden, werden neu kopiert (oder, falls möglich, teilweise mit der gestrigen Sicherung kopiert). Wenn sich seit gestern nur 100MB Dateien geändert haben, habe ich jetzt zwei Verzeichnisse mit jeweils 20GB Dateien, die aber nur 20 aufnehmen.

Ich hoffe das hilft und beantwortet noch deine Frage.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.