Jak przenieść / usr na nową partycję?

26

Mój /usrfolder musi zostać przeniesiony na nową partycję. Jak mogę to zrobić bez usuwania zawartości?

Czy można to zrobić, gdy Ubuntu jest uruchomione, czy muszę do tego użyć LiveCD?

Nathan Osman
źródło

Odpowiedzi:

27

Najbezpieczniej byłoby użyć Live CD, ale możesz zrobić:

  • skopiuj wszystkie pliki na nową partycję, upewniając się, że zawartość /usrnie zmienia się podczas wykonywania tej czynności.
  • edytuj, /etc/fstababy /usrzostał zamontowany przy następnym restarcie
  • restart
  • usuń stare pliki

Zobacz poniżej szczegółowe informacje na temat każdego kroku.

Pamiętaj, że nie możesz zamontować nowej partycji /usrpodczas działania, ponieważ będzie wiele plików, /usrktóre będą otwarte.

Kopiowanie plików

Chciałbym użyć cp -a. -ajest opcją archiwizacji. Od strony 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

Edycja / etc / fstab

Musisz znać identyfikator UUID nowej partycji. Możesz zobaczyć mapowanie, wykonując:

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

A następnie dodaj ten wiersz do /etc/fstab:

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

Zmień UUID na UUID i zmień ext4na typ używanego systemu plików - powinieneś o tym wiedzieć, jeśli skonfigurowałeś partycję.

Usuń stare pliki

Po ponownym uruchomieniu stare pliki /usrna partycji głównej zostaną ukryte przez nową zamontowaną partycję /usr. Ale możemy użyć pewnych sztuczek montowania wiązania, aby dostać się do starych plików, a następnie je usunąć.

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

Ale niewielkie pomyłki (np. Naciśnięcie Enter, gdy pisałeś tylko na klawiaturze sudo rm -rf /mnt) mogą spowodować katastrofę, więc skorzystałbym z tej metody tylko wtedy, gdy byłbyś bardzo pewny tego, co robisz, naprawdę nie mógł poradzić sobie z żadnymi przestojami lub nie miał fizyczny dostęp do maszyny i dlatego nie można było uruchomić Live CD lub Live USB.

Hamish Downer
źródło
4
rsyncjest o wiele bardziej odpowiedni do tego niżcp
Marco Ceppi
1
@MarcoCeppi Czy możesz to rozwinąć? Może rsynczamiast tego podać wariantową odpowiedź ?
Kazark,
6
Zamień polecenie cp na rsync -avz. Rsync pozwala na ponowne uruchomienie kopii i powinien być ogólnie używany podczas przenoszenia między partycjami, blokowaniem urządzeń lub maszyn.
Marco Ceppi
2
NIE używaj cp. Nie zachowuje TWARDYCH LINKÓW. W przyszłości spowoduje to uszkodzenie aktualizacji pakietów. Na przykład /usr/bin/s2pi /usr/bin/psedjest tym samym plikiem. Przeniesienie za pomocą cpspowoduje utworzenie 2 niezależnych wersji tego pliku. Rób rsync -aHzamiast tego.
o
1
Przede wszystkim pomiń flagę -z - włącza kompresję, która, biorąc pod uwagę, że nie wysyłasz plików przez sieć, jest bezużytecznym kosztem (z wyjątkiem tego, że rsync jest zwykle wystarczająco inteligentny, aby go zignorować, ale mimo to równie dobrze może go upuścić) . @ AleksandarStefanović na pewno chcesz mieć tam zawartość, a nie folder, a przyczyną tego jest to, że niektóre dziwactwa rsync: traktuje rsync -avH a/ binaczej niż rsync -avH a bkopiowanie zawartości folderu a(to znaczy a/*) w pierwszym przypadku i samego folderu w sekundę. Upewnij się, że używasz ukośnika tutaj.
Darael,
7

Ponieważ większość używanych bibliotek znajduje się w / usr, nie polecałbym przenoszenia tego katalogu podczas uruchamiania Ubuntu. W rzeczywistości prawdopodobnie pojawia się komunikat o błędzie, gdy próbujesz to zrobić. Dlatego najlepiej jest użyć LiveCD.

Możesz użyć kilku możliwości przenoszenia / kopiowania plików cp, rsync itp. Chcesz mieć pewność, że wszelkie dowiązania symboliczne są tworzone, a nie tylko kopiowane. Zarówno cp, jak i rsync mają takie opcje.

Po przeniesieniu plików na inną partycję należy dodać kolejne podłączenie w / etc / fstab, aby zamontować nową partycję na / usr.

txwikinger
źródło
2

Uwaga: Nie mam pojęcia, co robię, po prostu kopiuję polecenia i postępuję zgodnie z sugestiami innych. Może to być niewłaściwy sposób, ale działa dla mnie (przynajmniej na razie).

Tak to zrobiłem (zgodnie z odpowiedzią Hamisha i komentarzami):

  1. Skopiuj wszystkie pliki nowo utworzonej partycji (zastąp ją lokalizacją partycji, powinna ona wyglądać podobnie do mojej):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. W tym momencie zdałem sobie sprawę, że skopiował wszystko do /usrfolderu na partycji, co nie będzie działać , więc skopiowałem wszystko (z menedżerem plików) z tego folderu do katalogu głównego partycji i usunąłem to puste folder później.

  3. Edycja /etc/fstab(to samo, co w odpowiedzi Hamisha, oczywiście zamień na swój UUID)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Krok, który okazał się niezbyt mądry: zmieniłem nazwę aktualnie zamontowanej /usrpartycji na /usrBACKUP, tak, aby wiedzieć, że po ponownym uruchomieniu systemu w rzeczywistości uruchamia się ponownie na nowo utworzonej partycji, a nie na starej . Potem wszystko zatrzęsło się na ekranie i musiałem go wyłączyć, naciskając długo klawisz zasilania (genialny jak jestem) . Pomiń ten krok, jeśli nie chcesz poprawiać swojego systemu.

  5. Uruchom ponownie system

  6. Po ponownym uruchomieniu komputera otwórz Monitor systemu lub podobną aplikację, aby sprawdzić, czy jest nowy /usr partycja jest zamontowana, i sprawdź, czy wszystko poszło zgodnie z planem.

  7. Po sprawdzeniu, czy wszystko jest w porządku, możesz usunąć starą /usrpartycję. Zatrzymam moje na wypadek, gdyby coś poszło nie tak.

Aleksandar Stefanović
źródło
Po co odpowiadać na pytanie, które ma 5 lat, jeśli ma już zaakceptowaną odpowiedź, a nie wiesz o czym mówisz?
cmks,
2
@cmks, ponieważ czułem, że inne odpowiedzi są niekompletne - nie otrzymałem kompletnego rozwiązania z jednej odpowiedzi i żadna z odpowiedzi nie zawierała wystarczająco szczegółowych informacji. Czułem, że użytkownicy, którzy odpowiedzą na to pytanie, będą potrzebować pomocy. Nie ma znaczenia, czy ma pięć lat, czy ktoś nadal potrzebuje informacji z tego pytania.
Aleksandar Stefanović
1
Dlaczego wszyscy ponownie uruchamiają system? Czy nie powinno sudo mount -apozwolić, by nadal działało?
Hagen von Eitzen,
@Hagen Wydaje mi się, że to na wszelki wypadek
Aleksandar Stefanović,