Uważam, że muszę zmienić układ partycji systemu, aby przenieść dane wcześniej w głównym systemie plików do dedykowanych punktów montowania. Wszystkie woluminy są w LVM, więc jest to stosunkowo łatwe: utwórz nowe woluminy, przenieś do nich dane, zmniejsz główny system plików, a następnie zamontuj nowe woluminy w odpowiednich punktach.
Problemem jest krok 3, zmniejszanie głównego systemu plików. Dotyczy to systemów plików ext4, dlatego obsługiwana jest zmiana rozmiaru online; jednak po zamontowaniu systemy plików można rozbudowywać. Zmniejszenie partycji wymaga jej odmontowania, co oczywiście nie jest możliwe dla partycji root w normalnej pracy.
Wydaje się, że odpowiedzi w Internecie dotyczą uruchamiania systemu LiveCD lub innego nośnika ratunkowego, wykonywania operacji zmniejszania, a następnie ponownego uruchamiania systemu. Jednak system, o którym mowa, jest zdalny i mam dostęp tylko przez SSH. Mogę zrestartować komputer, ale uruchomienie dysku ratunkowego i wykonywanie operacji z konsoli nie jest możliwe.
Jak mogę odmontować główny system plików, zachowując jednocześnie zdalny dostęp do powłoki?
pivot_root
tam. Przykład tutaj dreamlayers.blogspot.co.uk/2012/10/running-linux-from-ram.html - to trudne, ale jeśli masz pole testowe do wypróbowania, warto to rozważyć.Odpowiedzi:
W rozwiązaniu tego problemu informacje podane na stronie http://www.ivarch.com/blogs/oss/2007/01/resize-a-live-root-fs-a-howto.shtml były kluczowe. Jednak ten przewodnik dotyczy bardzo starej wersji RHEL, a różne informacje były przestarzałe.
Poniższe instrukcje zostały opracowane do pracy z CentOS 7, ale powinny być wystarczająco łatwe do przeniesienia do dowolnej dystrybucji działającej systemd. Wszystkie polecenia są uruchamiane jako root.
Upewnij się, że system jest stabilny
Upewnij się, że nikt inny go nie używa i nic innego się nie dzieje. Prawdopodobnie dobrym pomysłem jest zatrzymanie jednostek świadczących usługi, takich jak httpd lub ftpd, aby upewnić się, że połączenia zewnętrzne nie zakłócają działania w środku.
Odmontuj wszystkie nieużywane systemy plików
Spowoduje to wydrukowanie wielu ostrzeżeń „Docelowy jest zajęty”, dla samego woluminu głównego i dla różnych tymczasowych / systemowych FS. Można je na razie zignorować. Co ważne, żaden system plików na dysku nie pozostaje podłączony, z wyjątkiem samego systemu plików root. Sprawdź to:
Jeśli zauważysz, że jakieś systemy plików na dysku są nadal podłączone, oznacza to, że nadal działa coś, co nie powinno być. Sprawdź, czego używa
fuser
:Zrób tymczasowy root
Tworzy to bardzo minimalny system root, który psuje (między innymi) przeglądanie strony podręcznika (nie
/usr/share
), dostosowywanie na poziomie użytkownika (nie/root
lub/home
) i tak dalej. Jest to celowe, ponieważ stanowi zachętę do nie pozostawania w tak sfałszowanym systemie korzeniowym dłużej niż to konieczne.W tym momencie powinieneś również upewnić się, że całe niezbędne oprogramowanie jest zainstalowane, ponieważ z pewnością spowoduje to również uszkodzenie menedżera pakietów. Przejrzyj wszystkie kroki i upewnij się, że masz niezbędne pliki wykonywalne.
Przenieś się do katalogu głównego
systemd powoduje, że montowania domyślnie zezwalają na współużytkowanie poddrzewa (tak jak w przypadku
mount --make-shared
), co powodujepivot_root
niepowodzenie. Dlatego wyłączamy to globalnie za pomocąmount --make-rprivate /
. Systemowe i tymczasowe systemy plików są hurtowo przenoszone do nowego katalogu głównego. Jest to konieczne, aby w ogóle działało; gniazda do komunikacji z systemd, między innymi, są w/run
nim obecne, więc nie ma sposobu, aby działające procesy je zamknęły .Upewnij się, że dostęp zdalny przetrwał zmianę
Po zrestartowaniu sshd upewnij się, że możesz się dostać, otwierając inny terminal i ponownie łącząc się z maszyną przez ssh. Jeśli nie możesz, napraw problem przed przejściem dalej.
Po sprawdzeniu, że możesz się ponownie połączyć, zamknij aktualnie używaną powłokę i połącz się ponownie. Pozwala
sshd
to wyjść z pozostałych wideł i upewnić się, że nowy nie trzyma/oldroot
.Zamknij wszystko, wciąż używając starego katalogu głównego
Spowoduje to wydrukowanie listy procesów wciąż trzymających się w starym katalogu głównym. W moim systemie wyglądało to tak:
Przed odmontowaniem musisz poradzić sobie z każdym z tych procesów
/oldroot
. Podejście brutalnej siły jest po prostukill $PID
dla każdego, ale może to popsuć. Aby zrobić to bardziej miękko:Spowoduje to utworzenie listy uruchomionych usług. Powinieneś być w stanie skorelować to z listą utrzymywanych procesów
/oldroot
, a następnie wydawaćsystemctl restart
dla każdego z nich. Niektóre usługi odmawiają pojawienia się w tymczasowym katalogu głównym i przechodzą w stan awarii; nie ma to obecnie znaczenia.Jeśli dysk główny, którego rozmiar chcesz zmienić, jest dyskiem LVM, może być również konieczne ponowne uruchomienie niektórych innych uruchomionych usług, nawet jeśli nie są wyświetlane na liście utworzonej przez
fuser -vm /oldroot
. Jeśli okaże się, że nie można zmienić rozmiaru dysku LVM w kroku 7, spróbujsystemctl restart systemd-udevd
.Niektórych procesów nie da się rozwiązać za pomocą prostych
systemctl restart
. Dla mnie to wliczoneauditd
(które nie lubią być zabijanesystemctl
, a więc po prostu chciałemkill -15
). Można sobie z tym poradzić indywidualnie.Ostatnim procesem, który zwykle znajdziesz, jest
systemd
sam. W tym celu uruchomsystemctl daemon-reexec
.Po zakończeniu tabela powinna wyglądać następująco:
Odmontuj stary root
W tym momencie możesz wykonywać dowolne manipulacje, których potrzebujesz. Pierwotne pytanie wymagało prostego
resize2fs
wywołania, ale możesz tutaj zrobić, co chcesz; Innym przypadkiem użycia jest przeniesienie głównego systemu plików z prostej partycji na LVM / RAID / cokolwiek.Odwróć korzeń z powrotem
Jest to proste odwrócenie kroku 4.
Usuń tymczasowy root
Powtórz kroki 5 i 6, z wyjątkiem użycia
/tmp/tmproot
zamiast/oldroot
. Następnie:Ponieważ jest to tmpfs, w tym momencie tymczasowy korzeń rozpuszcza się w eterze, którego już nigdy nie można zobaczyć.
Odłóż rzeczy na swoje miejsce
Ponownie podłącz systemy plików:
W tym momencie powinieneś również zaktualizować
/etc/fstab
igrub.cfg
zgodnie z wszelkimi korektami dokonanymi podczas kroku 7.Uruchom ponownie wszystkie nieudane usługi:
Zezwól ponownie na wspólne poddrzewa:
Uruchom zatrzymane jednostki usługowe - możesz użyć tego pojedynczego polecenia:
I jesteś skończony.
Wielkie podziękowania dla Andrew Wooda, który opracował tę ewolucję na RHEL4, i Steve'a, który dostarczył mi link do tego pierwszego.
źródło
umount /oldroot/boot
oczywiście na etapie 6). Łączę twoją odpowiedź z innymi pytaniami SE, na które nie udzielono odpowiedzi lub odpowiedzi przeczącej.umount /oldroot/boot
przed sobąumount /oldroot
mount --move
tmpfs, ale to nie jest obsługiwane.telinit u
może zrobić to, co chcesz./oldroot/tmp
, który uniemożliwił mi odmontowanie/oldroot
, ale nie pojawia sięfuser
ani nie jestlsof
wyświetlany. Trochę wpatrywałem się w systemd, żeby to wypracować ...Jeśli jesteś pewien, co robisz - a więc nie eksperymentujesz, możesz podłączyć się do initrd, który jest nieinteraktywnym i szybkim sposobem.
W systemie opartym na Debianie jest tutaj jak.
Zobacz kod: https://github.com/szepeviktor/debian-server-tools/blob/master/debian-resizefs.sh
Istnieje inny przykład: https://github.com/szepeviktor/debian-server-tools/blob/master/debian-convert-ext3-ext4.sh
źródło