Wie verschiebe ich / usr auf eine neue Partition?

26

Mein /usrOrdner 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?

Nathan Osman
quelle

Antworten:

27

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 /usrnicht ändert.
  • bearbeiten, /etc/fstabdamit /usrbeim nächsten Neustart gemountet wird
  • neustarten
  • lösche die alten Dateien

Einzelheiten zu den einzelnen Schritten finden Sie weiter unten.

Beachten Sie, dass Sie die neue Partition nicht mounten können, /usrwährend sie ausgeführt wird, da viele Dateien /usrdarin geöffnet sein werden.

Kopieren der Dateien

Ich würde verwenden cp -a. -aist die Archivierungsoption. Von 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 hinzu zu /etc/fstab:

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

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

Löschen Sie die alten Dateien

Nach dem Neustart werden die alten Dateien in /usrder Root-Partition von der neuen Partition verborgen, auf der sie eingehängt sind /usr. Wir können jedoch einige Mount-Bind-Tricks verwenden , um zu den alten Dateien zu gelangen und diese dann zu löschen.

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

Ein geringfügiger Tippfehler (z. B. bei der Eingabe die Eingabetaste drücken sudo rm -rf /mnt) kann jedoch zu einer Katastrophe führen. Daher würde ich diese Methode nur dann verwenden, wenn Sie sehr zuversichtlich sind, wirklich keine Ausfallzeiten bewältigen können oder keine hatten physischer Zugriff auf die Maschine und daher kein Booten von einer Live-CD oder einem Live-USB-Stick möglich.

Hamish Downer
quelle
4
rsyncist dafür so viel besser geeignet alscp
Marco Ceppi
1
@MarcoCeppi Könnten Sie das näher erläutern? Vielleicht eine abweichende Antwort geben, die rsyncstattdessen verwendet?
Kazark
6
Ersetzen Sie den Befehl cp durch rsync -avz. Rsync ermöglicht den Neustart von Kopien und sollte im Allgemeinen beim Wechseln zwischen Partitionen, Blockgeräten oder Computern verwendet werden.
Marco Ceppi
2
NICHT verwenden cp. HARD LINKS bleiben nicht erhalten. Dies wird in Zukunft die Paket-Upgrades stören. Zum Beispiel /usr/bin/s2pund /usr/bin/psedist die gleiche Datei. Wenn Sie mit verschieben, cpwerden 2 unabhängige Versionen dieser Datei erstellt. Mach rsync -aHstattdessen.
4.
1
Zuallererst, überspringe das -z Flag - es aktiviert die Komprimierung, vorausgesetzt, du sendest die Dateien nicht über ein Netzwerk, ist der Overhead nutzlos (außer, dass rsync normalerweise klug genug ist, sie zu ignorieren, aber es könnte genauso gut sein, es fallen zu lassen). . @ AleksandarStefanović Sie möchten auf jeden Fall den Inhalt dort, nicht den Ordner, und der Grund, warum dies so ist, liegt an einigen Rsync-Macken: Es wird rsync -avH a/ banders behandelt als beim rsync -avH a bKopieren des Inhalts des Ordners a(d. H. a/*) Im ersten Fall und des Ordners selbst in dieser Sekunde. Stellen Sie sicher, dass Sie hier den Schrägstrich verwenden.
Darael
7

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.

txwikinger
quelle
2

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. An diesem Punkt habe ich festgestellt, dass es alles in den /usrOrdner auf der Partition kopiert hat , was nicht funktionieren wird , also habe ich alles (mit dem Dateimanager) von diesem Ordner in das Stammverzeichnis der Partition kopiert und das leere gelöscht Ordner danach.

  3. Bearbeiten /etc/fstab(wie in Hamishs Antwort, natürlich durch Ihre UUID ersetzen)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Ein Schritt, der sich als wenig sinnvoll herausstellte: Ich habe den Namen der aktuell gemounteten /usrPartition in geändert /usrBACKUP, damit ich weiß, dass beim Neustart des Systems tatsächlich die neu erstellte und nicht die alte Partition neu gestartet wird . Danach ging alles schief auf dem Bildschirm, und ich musste es durch langes Drücken der Ein- / Aus-Taste ausschalten (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 /usrPartition gemountet 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 /usrPartition löschen . Ich behalte meine für den Fall, dass etwas schief geht.

Aleksandar Stefanović
quelle
Warum eine 5 Jahre alte Frage beantworten, wenn sie bereits beantwortet wurde und Sie nicht wissen, wovon Sie sprechen?
cmks
2
@cmks, weil ich das Gefühl hatte, andere Antworten seien unvollständig - ich habe keine vollständige Lösung aus einer Antwort erhalten, und keine der Antworten enthielt zu wenig Details. Ich hatte das Gefühl, dass Benutzer, die zu dieser Frage kommen würden, Hilfe benötigen würden. Es ist egal, ob es fünf Jahre alt ist, wenn jemand die Informationen aus dieser Frage noch benötigt.
Aleksandar Stefanović
1
Warum bootet jeder sein System neu? Sollte ein nicht sudo mount -azulassen, dass es weiterläuft?
Hagen von Eitzen
@Hagen Ich denke, es ist nur eine gute Maßnahme
Aleksandar Stefanović