it-swarm-eu.dev

Wie verschiebe ich / usr auf eine neue Partition?

Mein Ordner /usr muss auf eine neue Partition verschoben werden. Wie kann ich das tun, ohne den Inhalt zu löschen?

Kann das gemacht werden, während Ubuntu läuft, oder muss ich dafür die LiveCD verwenden?

24
Nathan Osman

Es wäre am sichersten, eine Live-CD zu verwenden, aber Sie könnten Folgendes tun:

  • kopieren Sie alle Dateien auf eine neue Partition, und stellen Sie dabei sicher, dass sich der Inhalt von /usr nicht ändert.
  • bearbeiten Sie /etc/fstab, damit /usr beim nächsten Neustart geladen wird
  • neustarten
  • lösche die alten Dateien

Einzelheiten zu den einzelnen Schritten finden Sie weiter unten.

Beachten Sie, dass Sie die neue Partition nicht in /usr mounten können, während sie ausgeführt wird, da in /usr viele Dateien geöffnet sind.

Kopieren der Dateien

Ich würde cp -a verwenden. -a ist die Archivierungsoption. Aus der Manpage :

-a, --archive
          same as -dR --preserve=all
...
-d     same as --no-dereference --preserve=links
...
-P, --no-dereference
          never follow symbolic links in SOURCE
...
--preserve[=ATTR_LIST]
          preserve      the      specified      attributes       (default:
          mode,ownership,timestamps),  if  possible additional attributes:
          context, links, xattr, all
...
-R, -r, --recursive
          copy directories recursively

Bearbeiten von/etc/fstab

Sie müssen die UUID Ihrer neuen Partition kennen. Sie können das Mapping folgendermaßen anzeigen:

$ ls -l /dev/disk/by-uuid/

Und dann füge diese Zeile zu /etc/fstab hinzu:

UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2

Ändern Sie die UUID in Ihre UUID und ändern Sie ext4 in den Dateisystemtyp, den Sie verwenden. Dies sollten Sie wissen, wenn Sie die Partition eingerichtet haben.

Löschen Sie die alten Dateien

Nach dem Neustart werden die alten Dateien in /usr auf der Root-Partition von der neuen Partition verborgen, die auf /usr eingehängt ist. Aber wir können einige mount bind trickery benutzen, um zu den alten Dateien zu gelangen und sie dann zu löschen.

$ Sudo mount --bind / /mnt
$ Sudo rm -rf /mnt/usr/*
$ Sudo umount /mnt

Ein kleiner Tippfehler (z. B. die Eingabetaste drücken, wenn Sie nur Sudo rm -rf /mnt eingegeben haben) kann jedoch zu einer Katastrophe führen. Daher würde ich diese Methode nur verwenden, wenn Sie sehr sicher sind, was Sie tun, und mit keiner wirklich fertig werden können Ausfallzeiten oder kein physischer Zugriff auf die Maschine und daher kein Booten von einer Live-CD oder einem Live-USB-Stick möglich.

25
Hamish Downer

Da sich die meisten verwendeten Bibliotheken in/usr befinden, würde ich nicht empfehlen, dieses Verzeichnis zu verschieben, während Ubuntu ausgeführt wird. In der Tat erhalten Sie wahrscheinlich Fehlermeldungen, wenn Sie versuchen, dies zu tun. Verwenden Sie daher am besten die LiveCD.

Sie können verschiedene Möglichkeiten nutzen, um die Dateien cp, rsync usw. zu verschieben/kopieren. Sie möchten sicherstellen, dass Symlinks erstellt und nicht nur kopiert werden. cp und rsync haben beide Optionen dafür.

Nachdem Sie die Dateien auf die andere Partition verschoben haben, müssen Sie einen weiteren Mount in/etc/fstab hinzufügen, um die neue Partition in/usr zu mounten.

7
txwikinger

Achtung: Ich habe keine Ahnung, was ich tue, ich kopiere nur Befehle und tue, wie von den anderen vorgeschlagen. Dies ist möglicherweise die falsche Methode, funktioniert aber für mich (zumindest für den Moment).

So habe ich es gemacht (gemäß der Antwort von Hamish und den Kommentaren):

  1. Kopieren Sie alle Dateien der neu erstellten Partition (ersetzen Sie sie durch den Speicherort Ihrer Partition, sie sollte ähnlich wie meine aussehen):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. Zu diesem Zeitpunkt habe ich festgestellt, dass es alles in den Ordner /usr auf der Partition kopiert hat, was nicht funktioniert, also habe ich alles (mit Dateimanager) aus diesem Ordner kopiert in das Stammverzeichnis der Partition und löschte den leeren Ordner danach.

  3. Bearbeite /etc/fstab (wie in Hamishs Antwort, ersetze es natürlich durch deine UUID)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Ein Schritt, der sich als nicht sehr klug herausstellte: Ich habe den Namen der aktuell gemounteten /usr -Partition in /usrBACKUP geändert, damit ich weiß, dass das System beim Neustart tatsächlich neu gestartet wird die neu erstellte Partition und nicht die alte. Danach lief alles auf dem Bildschirm schief und ich musste es ausschalten, indem ich die Ein-/Aus-Taste lang drückte (so genial ich bin). Überspringen Sie diesen Schritt, wenn Sie kein Problem mit Ihrem System haben möchten.

  5. Starten Sie das System neu

  6. Öffnen Sie nach dem Neustart den Systemmonitor oder eine ähnliche Anwendung, um festzustellen, ob Ihre neue /usr -Partition aktiviert ist, und um zu überprüfen, ob alles wie geplant gelaufen ist.

  7. Nachdem Sie überprüft haben, ob alles in Ordnung ist, können Sie Ihre alte /usr -Partition löschen. Ich werde meine behalten, falls etwas schief geht.