Jak połączyć dwa woluminy logiczne znajdujące się na jednym woluminie fizycznym w LVM?

14

Mam dwa logiczne woluminy, jeden jest zamontowany jako /, a drugi jako / home.

Chcę je połączyć, ponieważ w /woluminie ciągle brakuje miejsca. (Tak, wiem, co zajmuje całą tę przestrzeń; nie, nie mogę jej usunąć.)

Jestem gotów zdjąć maszynę na dzień lub dwa, aby to zrobić.

System operacyjny: Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)

Nick ODell
źródło
1
Dlaczego nie zwiększyć /głośności, czy nie o to chodzi w korzystaniu z LVM?
jasonwryan
2
@ jasonwryan Dlaczego powinienem ręcznie dostosować sposób przydzielania miejsca na dysku? Czy nie o to chodzi w systemie plików?
Nick ODell
@NickODell Nie. Jeśli jeden wolumin jest zbyt mały, aby pomieścić dane, jest on po prostu zbyt mały. Całkowita pojemność jest czynnikiem wielkości woluminu, a nie rozmiaru systemu plików. Woluminy logiczne ułatwiają jednak zmianę rozmiaru zamontowanych woluminów i scalanie różnych zasobów pamięci masowej w jeden wolumin. Z LVM powinieneś być w stanie zrobić to, co sugeruje jasonwryan, nawet bez ponownego uruchamiania: upewnij się, że zwykli użytkownicy są wylogowani (do darmowego / domowego) umount / home lvreduce it (nie zapomnij -r) zamontuj go ponownie, a następnie wykonaj lvextend w głównym systemie plików i gotowe. Jeśli chcesz się połączyć, musisz wykonać rsync.
Bratchley,
@JoelDavis Jeśli wymagam, aby wszyscy użytkownicy się wylogowali, czy istotne jest, czy muszę ponownie uruchomić komputer?
Nick ODell
@NickODell Um ... tak? Większość systemów linuksowych to serwery, powinieneś zdawać sobie sprawę, że będzie to założenie ludzi, chyba że powiesz inaczej.
Bratchley,

Odpowiedzi:

10

Skończyłem i ponowna partycja działała. Ponieważ jednak w obu przewodnikach brakuje obszarów, podsumuję to, co zrobiłem. Pamiętaj, że zamieniłem swoją nazwę użytkownika na zzzzi nazwę mojego komputera na xxxxxxx. Ponadto wszystkie polecenia powinny być uruchamiane jako root, chyba że zaznaczono inaczej.

Najpierw utworzyłem kopię zapasową:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

Spowoduje to utworzenie skompresowanej kopii zapasowej katalogu / home i umieszczenie jej na moim dysku zewnętrznym. (Pamiętaj, że twój dysk zewnętrzny będzie miał inną ścieżkę).

Teraz musisz ponownie uruchomić komputer w trybie pojedynczego użytkownika.

reboot

Gdy komputer ponownie się włączy, musisz poszukać takiego ekranu:

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

Naciśnij dowolny klawisz, aby to przerwać. Powinieneś zobaczyć taki ekran:

grub boot centos Naciśnij a, następnie spację, a następnie wpisz single. Wciśnij Enter.

Powinieneś zobaczyć następujący monit:

 [root@xxxxxxx /] # 

Wprowadź następujące polecenia:

df -h

Powinien to pokazać Size, Usedi Avail. Jesteśmy zainteresowani Used.
Zapisz, ile miejsca zajmuje wolumen domowy. Będziemy tego potrzebować później.

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

Pamiętasz, ile miejsca zajmował Twój domowy wolumin? Podwój to i podaj to polecenie. Na przykład miałem 15 gigabajtów używanych w moim katalogu domowym, więc zmieniłem rozmiar na 30 gigabajtów.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Ostrzeżenie : następnym krokiem może być utrata danych. Upewnij się , że masz rozmiar większy niż poprzednie polecenie. Dodaj 5 gigabajtów, aby się upewnić.

lvresize -L 35G vg_xxxxxxx/lv_home

Powiedz partycji root, aby wykorzystała całą przestrzeń, którą właśnie zwolniliśmy.

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Skopiuj dane na partycję root

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(Nawiasem mówiąc, -ajest to ważne, ponieważ w przeciwnym razie wszystko będzie własnością roota, a ty tego nie chcesz).
Szybko sprawdź, czy dane zostały poprawnie skopiowane:

ls -lR /home

Teraz usuwamy partycję domową i mówimy rootowi, aby ponownie zajął nową przestrzeń.

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

W tym momencie popełniłem wielki błąd, z którego można się nauczyć. Uruchomiłem się ponownie, a kiedy system wrócił, odmówił zamontowania partycji root jako do odczytu i zapisu, ponieważ nie mógł zamontować partycji / home. Przed ponownym uruchomieniem piszemy

nano /etc/fstab

Jedna z tych linii powie systemowi, aby zamontował partycję / home. Umieść #przed nim. Naciśnij Ctrl-O, Enter, Ctrl-X. Teraz możesz zrestartować komputer.

(Hipotetycznie, jeśli zapomniałbyś edytować fstab tak jak ja, polecenie zamontowania partycji root to mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)

Nick ODell
źródło
uwielbiam szczegóły!
nmr
Mam podobny problem, ale nie mam fizycznego dostępu do komputera. Czy istnieje sposób na zrobienie tego, który nie wymaga rozruchu w trybie pojedynczego użytkownika?
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Teoretycznie tak. Jeśli masz dostęp do ssh, możesz wykonać kopię zapasową /home. Następnie, o ile możesz odmontować /home, możesz go usunąć. Jednak nie mam wystarczających kwalifikacji, aby przeprowadzić Cię przez ten proces. To jest coś, o co powinieneś zadać nowe pytanie.
Nick ODell
1
@NickODell: ja nie zadać nowe pytanie: askubuntu.com/questions/1115913/...
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner To o wiele lepsza rada, niż mógłbym ci udzielić.
Nick ODell,
3

OSTRZEŻENIE: Przed zrobieniem czegokolwiek wykonaj kopię zapasową wszystkich ważnych danych!

Należy przenieść wszystkie dane z partycji / home na inną partycję, partycję lokalną lub dysk zewnętrzny lub w inne miejsce, w którym jest wystarczająco dużo miejsca.

Usuń / home lv, a następnie rozwiń lv / (root)

Skopiuj dane z powrotem do katalogu / home

Edytuj 1

Powyższa odpowiedź zakłada, że ​​nie masz wystarczającej ilości miejsca na partycji głównej, aby umieścić dane na partycji domowej.

Jeśli tak nie jest, po prostu zamontuj partycję domową w innym miejscu i skopiuj dane, na przykład:

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

Następnie wystarczy usunąć partycję domową i rozwinąć partycję główną

ghm1014
źródło
3

Możesz to zrobić bez zewnętrznego magazynu, uruchamiając z /, ale będziesz musiał odmontować /home.

Nie jest to szczególnie ryzykowna procedura, jeśli jesteś ostrożny, ale mimo to obowiązuje standardowa rada: najpierw wykonaj kopie zapasowe i przetestuj je.

Użyję foonazwy grupy woluminów rooti homejako logicznych nazw woluminów. To sprawia, że logiczne ścieżki objętości foo/rooti foo/homei drogi urządzenia /dev/mapper/foo-rooti /dev/mapper/foo-home. Zakładam, że należą do tej samej grupy woluminów, w przeciwnym razie staje się to bardziej skomplikowane i zależy od fizycznego układu woluminów dwóch grup woluminów.

Najpierw odmontuj /homei uruchom e2fsck -f /dev/mapper/foo-home. Następnie najpierw zmniejsz system plików i odpowiednio wolumin logiczny. Uruchom resize2fs /dev/mapper/foo-home NNNNgdzie nnnn jest liczbą bloków, które chcesz zachować wewnątrz objętości (można użyć KB lub MB lub GB zamiast z przyrostkiem K, Mlub G). Po obkurczeniu systemu plików, zmniejszyć wolumin logiczny z lvresize -L MMMM foo/homektórym MMMM jest liczba megabajtów (uwaga, że domyślna jednostka jest inna resize2fs, ale można korzystać z tych samych przyrostków K, M, G). Uważaj, aby nie zmniejszyć woluminu logicznego dalej niż system plików - jest to jeden niebezpieczny krok w tej procedurze.

W grupie woluminów jest teraz nieużywany pokój. Uruchom, lvresize -l +100%FREE foo/rootaby wolumin główny przechwycił całe wolne miejsce w grupie woluminów. Następnie uruchom resize2fs /dev/mapper/foo-root(bez parametru rozmiaru), aby powiększyć system plików i objąć cały wolumin logiczny; powiększenia można dokonać, gdy wolumin jest zamontowany.

Masz teraz miejsce na skopiowanie niektórych plików. Jeśli nie masz wystarczająco dużo miejsca na wszystko, przesuń się jak najwięcej, a następnie powtórz procedurę.

Po skopiowaniu wszystkich plików /homemożesz je zniszczyć. Sprawdź, czy /homejest pusty (jeśli pliki zostały przeniesione) lub czy wszystkie pliki /homezostały skopiowane /root(jeśli pliki zostały skopiowane ). Aby zniszczyć niepotrzebny wolumin logiczny, uruchom lvremove foo/home. Na koniec powiększ wolumin główny za pomocą lvresize -l 0%FREE foo/rooti jego systemu plików za pomocą resize2fs /dev/mapper/foo-home.

Gilles „SO- przestań być zły”
źródło
Uwaga: / home odmówił odmontowania, dopóki nie zrestartowałem się w trybie pojedynczego użytkownika.
Nick ODell
Uwaga: Jest to określane jako vg_ (nazwa maszyny) i lv_home
Nick ODell
Ok, działam. W tym przewodniku brakowało jednak kilku szczegółów, więc wkrótce opublikuję pełną historię poleceń.
Nick ODell
2

OK, znalazłem się w dokładnie tej samej pozycji. Wygląda na to, że CentOS domyślnie tworzy mały wolumin główny i wypełnia resztę przestrzeni /home. Nawet najpierw przetestowałem moją konfigurację na maszynie wirtualnej, ale z mniejszym dyskiem CentOS nie utworzył woluminu domowego. Podjąłem ten problem, zanim zostałem ograniczony przestrzenią, a także wymyśliłem, jak nie wchodzić w tryb pojedynczego użytkownika. Następująco:

Uzyskaj dostęp do komputera, ssh jest w porządku (przy założeniu, że użytkownik nie jest rootem).

  1. cd / więc nie ma cię w katalogu domowym
  2. sudo -s będziemy rootem tego wszystkiego
  3. lsof /home sprawdź, czy nikt nie korzysta z domowego tomu, nie powinno
  4. mv, tarlub podobną zawartość domu do innego miejsca
  5. lvremove centos/home
  6. Edytuj /etc/fstabi komentuj lub usuń wiersz dla/home
  7. Przenieś zawartość domu, którego kopię zapasową wykonałeś przed powrotem do /home- jesteś teraz w bezpiecznej pozycji, restart tutaj powinien być OK
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root na CentOS 7 inni mogą korzystać resize2fs
  10. df -h czy ci się udało?

Mam nadzieję, że to komuś ułatwi. To naprawdę niesamowite, co można obecnie robić na systemach plików.

Damon Maria
źródło
Jest to zdecydowanie łatwiejsze, jeśli nie trzeba migrować żadnych danych. :)
Nick ODell