Jak mogę zwiększyć rozmiar partycji głównej systemu w czasie wykonywania?
Mam partycję, która nie jest przydzielana po partycji głównej (która jest także ext4), jak mogę dodać to nieprzydzielone miejsce do miejsca przydzielonego do partycji głównej bez konieczności wyłączania serwera?
partitioning
ext4
BonboBingo
źródło
źródło
Odpowiedzi:
GUI (Ubuntu 14.04 i nowsze) : GParted v0.17 i nowsze zapewniają przyjemny GUI do tego. (Starsze wersje odmawiają zmiany rozmiaru zamontowanej partycji).
Wiersz poleceń (dowolna wersja Ubuntu): Istnieją trzy kroki do tego.
Krok 1. Najpierw należy zmienić rozmiar partycji. Jeśli korzystasz z LVM, jest to łatwe i prawdopodobnie wiesz, jak postępować. Jeśli używasz klasycznych partycji, jest to nieco bardziej skomplikowane i może wymagać ponownego uruchomienia (chociaż nigdy nie musisz uruchamiać innego systemu lub płyty CD na żywo).
Tak to robię: użyj,
fdisk
aby najpierw usunąć partycję (chodzi o to, że dane na dysku zostaną zachowane), a następnie ostrożnie odtwórz ją z większym rozmiarem w tej samej pozycji.Przykład:
Ponownie ważne jest, aby nowa partycja zaczynała się od tego samego bloku, co stara. Identyfikator powinien również być zgodny (83 dla systemów Linux). Przygotuj się na utratę wszystkich danych przy najmniejszej literówce.
Aby być bezpiecznym, możesz również przywrócić flagę rozruchową (która według Wikipedii jest nadal wymagana na niektórych komputerach), naciskając
a
.Zobacz sekcję komentarzy, aby dowiedzieć się, co zrobić, jeśli twoja partycja wymiany jest przeszkodą.
Do tej pory powinno być oczywiste, dlaczego ludzie zalecają używanie płyty CD na żywo. ;-)
Krok 2. Jak to
fdisk
przypomina, musisz ponownie załadować tablicę partycji przed kontynuowaniem. Najbezpieczniejszym sposobem jest po prostu ponowne uruchomienie; ale możesz także użyćpartprobe
lubkpartx
(więcej informacji) .Krok 3. Po zmianie rozmiaru partycji i ponownym załadowaniu tablicy partycji, wystarczy uruchomić
resize2fs
system plików i możesz to zrobić, nawet jeśli jest on zamontowany jako partycja root.Przykład:
źródło
fdisk
mówi,partprobe
lubkpartx
może działać zamiast restartu; zobacz także to pytanie . Nawet jeśli zrestartujesz komputer, rozwiązaniem jest nadal preferowanie korzystania z płyty CD na żywo, jeśli chodzi o przestoje, w których prosty restart może trwać krócej niż 10 sekund dla maszyny wirtualnej. Jest także szybszy w czasie pracy operatora, dlatego zwykle sam stosuję to podejście. :)free -h
), wyłącz swap (swapoff /dev/sda2
), zmień tablicę partycji (w tym usuwając i ponownie tworząc partycję wymiany) i albo 1) uruchom ponownie lub 2) załaduj ponownie tablicę partycji iswapon
ponownie. (Jeśli pamięć jest zbyt napięta, aby tymczasowo wyłączyć swap, nadal możesz utworzyć i włączyć nową partycję wymiany (/dev/sda3
), a następnie swapoffsda2
; ale wtedy będziesz musiał zaktualizować/etc/fstab
nazwę urządzenia wymiany).Możliwe jest dokonanie zmiany rozmiaru systemu plików ext4 on-line, nawet jeśli jest to twoja partycja root. Użyj
resize2fs
polecenia.EDYCJA: Obkurczanie on-line jest niedozwolone:
źródło
man resize2fs
:The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8).
To pytanie dotyczy zmiany rozmiaru partycji , a nie systemu plików . Rozróżnienie jest subtelne, ale bardzo ważne.The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.).
fdisk
kiedygrowpart
zrobisz to bardzo łatwo dla Ciebie.Łatwiejsze rozwiązanie - użyj
growpart <device> <partition>
:Jak zawsze, na
sfdisk -d /dev/xvda > partition_bak.dmp
wszelki wypadek wykonaj kopię zapasową tablicy partycji ( ).źródło
sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table
gparted
do tego użyć .apt-get install cloud-utils
/dev/nvme0n1
. p5 to partycja 5 na tym dysku. W porównaniu z tradycyjnymi wycinkami dysku BSD używają podobnego schematu numeracji.Tak, możesz zmniejszyć / przenieść / rozwinąć partycję root online bez restartów (ani livecd, ani usbkey): zapoznaj się z tą odpowiedzią . Jest bardzo dobrze napisany i łatwy do naśladowania, choć dość długi i trochę ryzykowny. Więc jeśli chcesz tylko rozbudować partycję ext4, możesz trzymać się konwencjonalnych działających
resize2fs
rozwiązań.Ogólne rozwiązanie, które mam, będzie działało na przykład na dowolnym typie rozwiązania dedykowanego lub VPS.
TLDR; Rozwiązanie to zakłada się
pivot_root
, abytmpfs
więc możnaumount
bezpiecznie twoja partycja żyć i skrzypce z nim. Po zakończeniupivot_root
wrócisz do nowej partycji root.Umożliwia to praktycznie dowolną manipulację w głównym systemie plików (przenieś go, zmień system plików, zmień urządzenie fizyczne ...).
W tym procesie nie jest wymagane ponowne uruchamianie, co pozwala ominąć ograniczenia związane z
resize2fs
niemożnością zmniejszaniaext4
partycji.Ja osobiście tego używałem i działa bardzo dobrze również w systemie debian, więc powinno działać na Ubuntu. Jestem bardzo zaskoczony, że nie widzę tego dogłębnego rozwiązania bardziej powiązanego z wieloma pytaniami w witrynach stosu wymiany, które dotyczą tego samego problemu.
Uwaga: Oczywiście, jeśli chcesz rozbudować partycję, wystarczy proste
resize2fs
, jak podano w wielu miejscach i innych odpowiedziach tutaj.źródło
Możesz także skorzystać z GParted - o ile partycja, której rozmiar zmieniasz, nie jest tą, z której uruchomiłeś system - w przeciwnym razie sugeruję, że opcja CD na żywo jest nieco łatwiejsza dla początkujących.
GParted wykonuje w zasadzie wszystkie kroki - bazując tylko na graficznym interfejsie użytkownika.
źródło
Właśnie skończyłem zmieniać rozmiar partycji root ext4 w systemie na żywo, gdy root był zamontowany.
źródło
Chciałbym rozszerzyć odpowiedź na @ Søren Løvborg: rozszerzenie partycji z obecną partycją wymiany.
Najpierw układ dysku po rozszerzeniu:
Tak więc sda1 musi zostać rozszerzony o wolne miejsce na końcu dysku, ale partycja wymiany jest pomiędzy nimi. Oto jak możesz to zrobić:
Najpierw musimy wyłączyć swap. Sprawdź, ile zużywa i czy możesz to wyłączyć.
swap nie jest tutaj używany, więc możemy go wyłączyć
Teraz zmienimy tablicę partycji:
(uwaga: jeśli zdarzy się, że pierwsza partycja zacznie się od sektora 63 zamiast 2048, musisz dodać opcję
-c=dos
)Uwaga: rozmiar sda1 to całkowita liczba sektorów minus rozmiar sektora partycji wymiany: 14335999-2093058 = 12242941
Jak wspomina fdisk: jądro nadal używa starej tablicy partycji, więc musimy ją ponownie załadować.
Teraz musimy uruchomić resize2fs na sda1 (nie zapomnij tego!)
Teraz jeszcze się nie skończyło. Jak zapewne zauważyłeś, sda2 jest podzielony na partycje jako typ Linux (Ext4). Z jakiegoś powodu fdisk nie ma możliwości wyboru typu. Musimy to na przemian za pomocą
cfdisk
Wybierz sda2 i zmień typ na
82 Linux swap / Solaris
i pamiętaj, aby go napisać (wpisz „tak”, aby potwierdzić)Teraz możemy ponownie aktywować swap
I wreszcie włącz:
Jedyne, co musimy zrobić, to zaktualizować fstab, aby automatycznie instalował partycję wymiany podczas uruchamiania
I zmień UUID partycji wymiany na powyższe dane wyjściowe:
Teraz wszystko jest w porządku i możesz ponownie uruchomić komputer bez problemów.
źródło
mkswap
&swapon
muszą być uruchamiane na sda2.swapoff
Popełniłem błąd na początku mojego postu: musi zostać wykonany na sda5. Komentarze są zawsze mile widziane, trudno było je zanotować.cryptdisks_stop
, następnie zaktualizować / etc / crypttab zamiast/etc/fstab
i ponownie uruchomić cryptdiskscryptdisks_start
.Właśnie zrobił to z powodzeniem bez
umount
,pivot_root
lub tymczasowym usunięciu partycji głównej, korzystając rozstał 3.2 na Ubuntu 16.04, jądra 4.4.0. Aby zachować ostrożność, zrobiłem wszystko, od wirtualnej konsoli z wyłączoną obsługą sieci, i na wszelki wypadek zrobiłem migawkę, ale migawka nie była potrzebna, więc mogłem równie dobrze zrobić to przez SSH i bez zmiany poziomów uruchamiania.Określ rozmiar partycji:
parted /dev/sda1 print | egrep "Disk.*GB"
Opcjonalnie przełącz na tryb wielu użytkowników bez sieci (należy to zrobić z konsoli, a nie SSH):
Opcjonalnie weź migawkę maszyny wirtualnej, aby zachować ostrożność.
Zmień rozmiar partycji:
Zmień rozmiar systemu plików:
resize2fs /dev/sda1
Jeśli coś pójdzie nie tak, możesz przywrócić migawkę tutaj. Jeśli wszystko się dobrze, powrót do normalnego poziomu działania (otrzymanego powyżej) - zwykle 5:
init 5
. W tym momencie może być lepiej wykonać pełne ponowne uruchomienie, aby upewnić się, że wszystko wróci poprawnie (potem miałem problem z datą / ntp).źródło
Wykonaj następujące kroki.
su
parted
p
aby zobaczyć dostępne partycjerm PARTITION NUMBER
do utworzenia wolnego miejsca.resizepart ROOT NUMBER
i w razie potrzeby uruchom ponownie systemparted
przez wpisanieexit
i wpisz typ terminalapartprobe
i naciśnij enter (można to zrobić nawet po ponownym uruchomieniu)resize2fs /dev/sda PARTITION NUMBER
i ciesz się przestronną partycją root.źródło
Jak wspomniano wcześniej:
rozwijanie na żywo z systemu root jest możliwe. (żadnych trudności, ponieważ sekcja rozruchowa nie może zostać przeniesiona)
zmniejszanie partycji root na żywo musi odbywać się z zewnętrznego urządzenia rozruchowego (bootowanie z systemu CD / usb-stick na żywo), jak gdyby była jakaś usterka, niedopasowanie… cokolwiek… twój system zawiesza się, musi zostać zrestartowany i ostatecznie nie będzie w stanie poprawnie uruchomić.
Każde „ale ja to zrobiłem i działa” to szczęście.
źródło