La mia /usr
cartella 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?
La mia /usr
cartella 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:
Sarebbe più sicuro usare un Live CD, ma potresti fare:
/usr
non cambi mentre lo stai facendo./etc/fstab
modo che /usr
verrà montato al prossimo riavvioVedi sotto per i dettagli su ogni passaggio.
Si noti che non è possibile montare la nuova partizione /usr
durante l'esecuzione poiché ci saranno molti file /usr
che saranno aperti.
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
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 ext4
in modo che sia il tipo di file system che stai usando - dovresti saperlo se hai impostato la partizione.
Dopo il riavvio, i vecchi file nella /usr
partizione 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.
rsync
invece?
rsync -avz
. Rsync ti consente di riavviare le copie e generalmente dovrebbe essere usato quando ti sposti tra partizioni, blocchi di dispositivi o macchine.
cp
. Non preserva HARD LINKS. Ciò interromperà gli aggiornamenti dei pacchetti in futuro. Ad esempio /usr/bin/s2p
ed /usr/bin/psed
è lo stesso file. Spostarsi con cp
creerà 2 versioni indipendenti di quel file. Fare rsync -aH
invece.
rsync -avH a/ b
diverso 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.
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.
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):
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
A questo punto mi sono reso conto che ha copiato tutto nella /usr
cartella 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.
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
Un passaggio che non si è rivelato molto saggio: ho cambiato il nome della /usr
partizione 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.
Riavvia il sistema
Dopo il riavvio, apri System Monitor o un'applicazione simile per vedere se la tua nuova /usr
partizione è montata e per verificare se tutto è andato come previsto.
Dopo aver verificato che tutto sia a posto, puoi eliminare la tua vecchia /usr
partizione. Terrò il mio nel caso in cui qualcosa vada storto.
sudo mount -a
permettergli di continuare a funzionare?
rsync
è molto più adatto a questo dicp