Möglichkeit zum Beschleunigen von cp -a (die Verwendung von cp -a auf einem USB-Stick ist sehr langsam)

Möglichkeit zum Beschleunigen von cp -a (die Verwendung von cp -a auf einem USB-Stick ist sehr langsam)

Bei der Verwendung eines USB-Sticks mit einem persistenten Betriebssystem kommt es vor, dass die persistente Partition casper-rwbeschädigt wird, wenn der USB-Stick nach dem Herunterfahren des Betriebssystems zu früh herausgezogen wird.

Leider habe ich bei Ubuntustudio-20.04.2 nach dem Klicken auf die Schaltfläche „Herunterfahren“ Zeiträume von bis zu einer Minute erlebt, in denen der Bildschirm schwarz ist, aber große Schreibvorgänge auf der casper-rwPartition stattfinden. Es kann also sehr leicht passieren, dass man es zerstört, wenn man den Stick zu früh herauszieht.

Um mich nach einem solchen Missgeschick zu erholen, erstelle ich eine Sicherungspartition casper-rwund verwende (nachdem ich Superuser geworden bin) die folgenden Befehle, nachdem ich die Variablen QUELLE und ZIEL richtig gesetzt habe:

time cp -a "${QUELLE}/upper" "${ZIEL}"

time cp -a "${QUELLE}/work" "${ZIEL}"

time cp -a "${QUELLE}/lost+found" "${ZIEL}"

Wenn mein Skript ausgeführt wird, sehe ich

  • sehr geringe CPU-Aktivität
  • sehr geringer RAM-Verbrauch
  • htopzeigt mir, dass sich der cp -aVorgang sehr viel Zeit im Zustand D befindet.

Wenn ich das richtig verstanden habe (bitte korrigieren Sie mich), bedeutet dies, dass der Computer sehr oft warten muss, weil der Controller des USB-Sticks diese vielen Lese- und Schreibvorgänge nicht effektiv bewältigen kann (obwohl es sich um ein USB3-Gerät in einer USB3-Buchse handelt!).

Gibt es eine Möglichkeit, cp -a größere Puffer verwenden, um die Dinge zu beschleunigen, idealerweise ganze Dateien sequenziell schreiben?

Antwort1

Es sieht so aus, als ob man das Kopieren erheblich beschleunigen kann, indem man zuerst die Verzeichnisse und (sofern vorhanden) in der Partition in ein Verzeichnis auf einer SSD kopiert upper. workDieser lost+foundSchritt casper-rwdauert etwas mehr als 2 Minuten. Man kann cp -afür diesen Zweck verwenden.

Wenn Sie das Backup auf demselben Stick in einer separaten Partition haben möchten, cp -adauerte das Kopieren von der SSD auf den USB-Stick etwa 31 Minuten (für 4,1 GiB Daten in etwa 66500 Dateien, USB3-Stick in einer USB3-Buchse). Der vorherige Inhalt der Partition wurde gelöscht, rm -rf "${ZIEL}/upper"; rm -rf "${ZIEL}/work"; rm -rf "${ZIEL}/lost+foundbevor der aktuelle Inhalt auf die Backup-Partition kopiert wurde.

Weiß jemand, ob es einen Unterschied macht, ob eine Partition vor der Wiederverwendung auf diese Weise gelöscht wurde oder ob es noch schneller geht, wenn man sie überformatiert, bevor man den Nettoinhalt dort ablegt? Im Falle einer beschädigten Partition casper-rwmuss man sie formatieren, bevor man ihren Inhalt aus dem Backup wiederherstellt.

Natürlich könnte man das noch verbessern, indem man ein Backup als macht backup.tar.gz. Das reduziert die zu schreibende Datenmenge und vor allem der zweite Schritt würde davon profitieren.

Antwort2

Verwenden Sie syncdiese Option, um das sofortige Schreiben in das Ziel zu erzwingen.

Wenn Sie cpeine Datei haben und diese im Zieldateisystem erscheint, ist nicht garantiert, dass sich die Datei tatsächlich schon auf dem Speichermedium befindet.

Der Grund dafür ist, dass die Daten zunächst zwischen verschiedenen internen Puffern abgerufen werden, was schneller und benutzerfreundlicher ist, bis sie tatsächlich auf dem Zielspeichergerät sind. Das Schreiben der Daten auf das Zielgerät erfolgt tatsächlich im Hintergrund und verbraucht nicht viele CPU-Zyklen. Deshalb kann es schwierig sein, es in den Aktivitätsmonitoren anzuzeigen.

Sie können immer versuchen, einen sofortigen Schreibvorgang aus den Puffern auf das Zielspeichergerät zu erzwingen, indem Sie syncnach dem Kopieren beispielsweisecp ${QUELLE} ${ZIEL} && sync

Erwägen Sie außerdem, rsyncnur geänderte oder neue Dateien an das Ziel zu kopieren.

verwandte Informationen