Come spostare / usr in una nuova partizione?


26

La mia /usrcartella deve essere spostata in una nuova partizione. Come posso farlo senza cancellare il contenuto?

Questo può essere fatto mentre Ubuntu è in esecuzione o devo usare LiveCD per questo?

Risposte:


27

Sarebbe più sicuro usare un Live CD, ma potresti fare:

  • copia tutti i file in una nuova partizione, assicurandoti che il contenuto di /usrnon cambi mentre lo stai facendo.
  • modifica in /etc/fstabmodo che /usrverrà montato al prossimo riavvio
  • riavvio
  • elimina i vecchi file

Vedi sotto per i dettagli su ogni passaggio.

Si noti che non è possibile montare la nuova partizione /usrdurante l'esecuzione poiché ci saranno molti file /usrche saranno aperti.

Copia dei file

Vorrei usare cp -a. -aè l'opzione di archiviazione. Dalla pagina man :

-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

Modifica / etc / fstab

Devi conoscere l'UUID della tua nuova partizione. Puoi vedere la mappatura facendo:

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

E quindi aggiungi questa riga a /etc/fstab:

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

Cambia l'UUID nel tuo UUID e cambia ext4in modo che sia il tipo di file system che stai usando - dovresti saperlo se hai impostato la partizione.

Elimina i vecchi file

Dopo il riavvio, i vecchi file nella /usrpartizione radice verranno nascosti dalla nuova partizione montata /usr. Ma possiamo usare alcuni stratagemmi di bind mount per arrivare ai vecchi file e poi eliminarli.

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

Ma alcuni lievi errori di digitazione (diciamo, premendo Invio quando hai digitato solo sudo rm -rf /mnt) potrebbero causare disastri, quindi utilizzerei questo metodo solo se fossi molto fiducioso in quello che stavi facendo, davvero non potresti affrontare eventuali tempi di inattività o non avessi accesso fisico alla macchina e quindi impossibile avviare un CD live o una chiavetta USB live.


4
rsyncè molto più adatto a questo dicp
Marco Ceppi

1
@MarcoCeppi Potresti approfondire su questo? Forse dare una risposta variante che utilizza rsyncinvece?
Kazark,

6
Sostituisci comando cp con rsync -avz. Rsync ti consente di riavviare le copie e generalmente dovrebbe essere usato quando ti sposti tra partizioni, blocchi di dispositivi o macchine.
Marco Ceppi

2
NON usare cp. Non preserva HARD LINKS. Ciò interromperà gli aggiornamenti dei pacchetti in futuro. Ad esempio /usr/bin/s2ped /usr/bin/psedè lo stesso file. Spostarsi con cpcreerà 2 versioni indipendenti di quel file. Fare rsync -aHinvece.
o

1
Prima di tutto, salta il flag -z - abilita la compressione, il che dato che non stai inviando i file su una rete è un sovraccarico inutile (tranne che rsync è di solito abbastanza intelligente da ignorarlo, ma comunque, potrebbe anche lasciarlo cadere) . @ AleksandarStefanović vuoi sicuramente il contenuto lì, non la cartella, e il motivo per cui è successo in quel modo è dovuto ad alcune stranezze rsync: tratta in modo rsync -avH a/ bdiverso da rsync -avH a b, copiando il contenuto della cartella a(cioè, a/*) nel primo caso e la cartella stessa nel secondo. Assicurati di usare la barra qui.
Darael,

7

Poiché la maggior parte delle librerie utilizzate sono in / usr, non consiglierei di spostare questa directory durante l'esecuzione di Ubuntu. In effetti, probabilmente ricevi messaggi di errore quando provi a farlo. Quindi, il migliore è usare il LiveCD.

È possibile utilizzare diverse possibilità per spostare / copiare i file cp, rsync ecc. Si desidera assicurarsi che tutti i collegamenti simbolici vengano creati e non solo copiati. cp e rsync hanno entrambi opzioni per questo.

Dopo aver spostato i file nell'altra partizione è necessario aggiungere un altro mount in / etc / fstab per montare la nuova partizione su / usr.


2

Attenzione: non ho idea di cosa sto facendo, sto solo copiando i comandi e facendo come suggerito dagli altri. Questo potrebbe essere il modo sbagliato di farlo, ma funziona per me (almeno per ora).

È così che l'ho fatto (seguendo la risposta di Hamish e i commenti):

  1. Copia tutti i file della partizione appena creata (sostituisci con la posizione della tua partizione, dovrebbe essere simile alla mia):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. A questo punto mi sono reso conto che ha copiato tutto nella /usrcartella della partizione, il che non funzionerà , quindi ho copiato tutto (con il file manager) da quella cartella nella radice della partizione, e cancellato quello vuoto cartella dopo.

  3. Modifica /etc/fstab(come nella risposta di Hamish, ovviamente, sostituisci con il tuo UUID)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Un passaggio che non si è rivelato molto saggio: ho cambiato il nome della /usrpartizione attualmente montata in /usrBACKUP, solo per sapere che, quando riavvio il sistema, in realtà si riavvia nella partizione appena creata e non in quella vecchia . Dopodiché, tutto si è bloccato sullo schermo e ho dovuto spegnerlo premendo a lungo il tasto di accensione (geniale come sono) . Saltare questo passaggio se non si desidera bloccare il sistema.

  5. Riavvia il sistema

  6. Dopo il riavvio, apri System Monitor o un'applicazione simile per vedere se la tua nuova /usrpartizione è montata e per verificare se tutto è andato come previsto.

  7. Dopo aver verificato che tutto sia a posto, puoi eliminare la tua vecchia /usrpartizione. Terrò il mio nel caso in cui qualcosa vada storto.


Perché rispondere a una domanda di 5 anni se ha già una risposta accettata e non sai di cosa stai parlando?
cmks

2
@cmks perché mi sentivo come se le altre risposte fossero incomplete - non ho ottenuto la soluzione completa da una risposta e nessuna delle risposte non aveva abbastanza dettagli per loro. Ho sentito che gli utenti che sarebbero venuti a questa domanda avrebbero bisogno di aiuto. Non importa se ha cinque anni se qualcuno ha ancora bisogno delle informazioni di questa domanda.
Aleksandar Stefanović,

1
Perché tutti stanno riavviando il loro sistema? Non dovrebbe sudo mount -apermettergli di continuare a funzionare?
Hagen von Eitzen,

@Hagen Immagino sia solo per una buona misura
Aleksandar Stefanović il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.