Jak mogę zmienić rozmiar partycji głównej z dodatkiem w środowisku wykonawczym?

199

Jak mogę zwiększyć rozmiar partycji root systemu w środowisku wykonawczym?

Mam partycję, która nie jest przydzielona po partycji głównej (która jest także ext4), w jaki sposób mogę dodać to nieprzydzielone miejsce do przestrzeni przydzielonej do partycji root bez konieczności zamykania serwera?

    
zadawane BonboBingo 30.01.2011, 18:23
źródło

10 odpowiedzi

175

GUI (Ubuntu 14.04 i nowsze) : GParted v0.17 i nowsze wersje zapewniają dla tego ładny interfejs graficzny. (Starsze wersje odmówą zmiany rozmiaru zamontowanej partycji).

Wiersz poleceń (dowolna wersja Ubuntu): Do tego są trzy kroki.

Krok 1. Partycja musi najpierw zostać przeskalowana. Jeśli używasz 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 Live CD).

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 je z większym rozmiarem na tej samej pozycji.

Przykład:

$ sudo fdisk /dev/sda

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     9437183     4717568   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Ponownie, ważne jest, aby nowa partycja zaczynała się od tego samego bloku, co poprzednia. Identyfikator powinien również pasować (83 dla systemów Linux). Przygotuj się na utratę wszystkich danych przy najmniejszej literce.

Aby być po bezpiecznej stronie, możesz również przywrócić flagę rozruchową (która zgodnie z Wikipedii jest nadal wymagana na niektóre komputery), naciskając a .

Zapoznaj się z sekcją komentarzy, aby dowiedzieć się, co zrobić, gdy twoja partycja swap jest w drodze.

Teraz powinno być jasne, dlaczego ludzie zalecają używanie Live CD. ; -)

Krok 2. Ponieważ fdisk przypomina Ci o tym, musisz przeładować tabelę partycji przed kontynuowaniem. Najbezpieczniejszym sposobem jest po prostu ponowne uruchomienie; ale możesz również użyć partprobe lub kpartx (więcej informacji) .

Krok 3. Po zmianie rozmiaru partycji i ponownym załadowaniu tabeli partycji, jest to prosta sprawa uruchomienia resize2fs w systemie plików, i możesz to zrobić, nawet jeśli jest zamontowana jako główna partycja.

Przykład:

$ sudo resize2fs /dev/sda1
    
odpowiedział Søren Løvborg 06.04.2012, 16:23
źródło
109

Możliwe jest dokonanie zmiany rozmiaru systemu plików ext4, nawet jeśli jest to twoja partycja główna. Użyj polecenia resize2fs .

sudo resize2fs /dev/sda1

EDYCJA: Obcinanie w trybie on-line nie jest dozwolone:

root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported
    
odpowiedział CodeAddict 02.03.2012, 11:50
źródło
23

Łatwiejsze rozwiązanie - użyj growpart <device> <partition> :

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

Jak zawsze, twórz kopię zapasową tabeli partycji ( sfdisk -d /dev/xvda > partition_bak.dmp ) na wszelki wypadek.

    
odpowiedział STRML 18.07.2017, 15:26
źródło
8

Można również po prostu użyć GParted - o ile zmiana rozmiaru partycji nie jest tym, z którego uruchomiłeś system - w przeciwnym wypadku sugeruję opcję Live CD nieco łatwiej dla początkujących.

GParted zasadniczo wykonuje wszystkie czynności - tylko na podstawie GUI z przodu.

    
odpowiedział leatherjacket 30.09.2012, 13:34
źródło
8

Tak, możesz zmniejszyć / przenieść / rozwinąć główną partycję online bez restartów (ani livecd, ani usbkey): sprawdź tę odpowiedź . 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 rozwiązań resize2fs .

Ogólne rozwiązanie, które rozwiązałem, będzie działało na każdym typie dedykowanego lub rozwiązania VPS na przykład.

TLDR; to rozwiązanie implikuje pivot_root do tmpfs , więc możesz umount bezpiecznie zabezpieczyć swoją partycję root i skrzypić się z nią. Po zakończeniu będziesz pivot_root z powrotem na nowej partycji root.

Pozwala to na praktycznie dowolne manipulowanie w systemie plików root (przeniesienie go, zmiana systemu plików, zmiana urządzenia fizycznego ...).

W procesie nie jest wymagane ponowne uruchomienie, a to pozwala ominąć ograniczenie z resize2fs nie można zmniejszyć ext4 partycji.

Osobiście skorzystałem z tego i działa bardzo dobrze również na systemie debian, więc powinien działać na Ubuntu. Jestem bardzo zaskoczony, że nie widzę tego dogłębnego rozwiązania, które byłoby bardziej powiązane z wieloma pytaniami w stosach stron internetowych, które dotyczą tego samego problemu.

Uwaga: Oczywiście, jeśli chcesz rozbudować partycję, wystarczy% resize2fs , jak podano w wielu miejscach i innych odpowiedziach tutaj.

    
odpowiedział vaab 01.02.2016, 03:08
źródło
5

Właśnie zakończyłem zmianę rozmiaru partycji root systemu ext4 w systemie Live, podczas gdy root był montowany.

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 
    
odpowiedział CDR 04.12.2012, 23:40
źródło
1

Zrobiłem to z powodzeniem bez umount , pivot_root lub tymczasowego usunięcia głównej partycji, używając partycji 3.2 na jądrze Ubuntu 16.04, 4.4.0. Aby zachować ostrożność, zrobiłem wszystko, od wirtualnej konsoli z wyłączoną obsługą sieci i na wszelki wypadek wziąłem migawkę, ale migawka nie była potrzebna, więc mogłem równie dobrze zrobić to przez SSH i bez zmiany poziomów działania.

Określ rozmiar partycji: parted /dev/sda1 print | egrep "Disk.*GB"

Opcjonalnie można przełączyć się w tryb dla wielu użytkowników bez połączenia sieciowego (musi to być zrobione z poziomu konsoli, a nie z SSH):

runlevel     # remember the original runlevel
init 2

Opcjonalnie zrób migawkę VM, aby zachować ostrożność.

Zmień rozmiar partycji:

parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q

Zmień rozmiar systemu plików: resize2fs /dev/sda1

Jeśli coś pójdzie nie tak, możesz tutaj przywrócić migawkę. Jeśli wszystko poszło dobrze, wróć do normalnego poziomu działania (uzyskanego powyżej) - zwykle 5: init 5 . Lepszym rozwiązaniem może być pełne ponowne uruchomienie komputera, aby upewnić się, że wszystko wróci poprawnie (później miałem problem z datą / ntp).

    
odpowiedział Roger Dueck 14.07.2017, 02:09
źródło
0

Chciałbym rozszerzyć odpowiedź @ Sørena Løvborga: rozszerzenie partycji z obecną partycją wymiany.

Najpierw układ dysku po jego rozszerzeniu:

$sudo parted /dev/sda 'unit s print' free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 14336000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start      End        Size       Type      File system     Flags
        63s        2047s      1985s                Free Space
 1      2048s      10485759s  10483712s  primary   ext4            boot
        10485760s  10487805s  2046s                Free Space
 2      10487806s  12580863s  2093058s   extended
 5      10487808s  12580863s  2093056s   logical   linux-swap(v1)
        12580864s  14335999s  1755136s             Free Space

Więc sda1 musi zostać rozszerzony o wolne miejsce na końcu dysku, ale partycja wymiany znajduje się pomiędzy nimi. Oto, jak możesz to zrobić:

Najpierw musimy wyłączyć swap. Sprawdź, ile jest używana i czy możesz ją wyłączyć.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           992M         52M        464M        3.2M        475M        784M
Swap:          1.0G          0B        1.0G

swap nie jest tu używany, więc możemy go wyłączyć

$sudo swapoff /dev/sda2

Teraz zmienimy tabelę partycji:

$sudo fdisk /dev/sda

(uwaga: jeśli masz pierwszą partycję startową w sektorze 63 zamiast 2048, musisz dodać opcję -c=dos )

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sda: 6.9 GiB, 7340032000 bytes, 14336000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9e11c6df

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 10485759 10483712    5G 83 Linux
/dev/sda2       10487806 12580863  2093058 1022M  5 Extended
/dev/sda5       10487808 12580863  2093056 1022M 82 Linux swap / Solaris

Command (m for help): d
Partition number (1,2,5, default 5): 2

Partition 2 has been deleted.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-14335999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-14335999, default 14335999): 122                                                                  42941

Created a new partition 1 of type 'Linux' and of size 5.9 GiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (12242942-14335999, default 12242944):
Last sector, +sectors or +size{K,M,G,T,P} (12242944-14335999, default 14335999):

Created a new partition 2 of type 'Linux' and of size 1022 MiB.

Command (m for help): a
Partition number (1,2, default 2): 1

The bootable flag on partition 1 is enabled now.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

Uwaga: rozmiar sda1 to całkowita liczba sektorów pomniejszona o rozmiar sektora partycji swap: 14335999-2093058 = 12242941

Jak wspomina fdisk: jądro wciąż używa starej tabeli partycji, więc musimy ją przeładować.

$partprobe

Teraz musimy uruchomić resize2fs na sda1 (nie zapomnij tego!)

$resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 10
The filesystem on /dev/sda1 is now 38833617 (4k) blocks long.

Teraz sprawy się jeszcze nie skończyły. Jak zapewne zauważyłeś, sda2 jest podzielona na partycje jako typ Linux (Ext4). Z jakiegoś powodu nie ma sposobu, aby w fdisk wybrać typ. Musimy więc zmienić to za pomocą cfdisk

$ sudo cfdisk

Wybierz sda2 i zmień typ na 82 Linux swap / Solaris i upewnij się, że go wpisałeś (wpisz yes, aby potwierdzić)

Teraz możemy ponownie aktywować zamianę

$mkswap /dev/sda2
/dev/sda2
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0

I wreszcie włącz go:

$swapon /dev/sda2

Jedyne, co musimy zrobić, to zaktualizować fstab, aby automatycznie zamontować partycję wymiany po uruchomieniu

$sudo nano /etc/fstab

I zmień UUID partycji wymiany na wyjście powyżej:

# swap was on /dev/sda5 during installation
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none            swap    sw              0       0

Teraz wszystko jest dobrze i możesz ponownie uruchomić system bez problemów.

    
odpowiedział wouter205 07.09.2018, 08:58
źródło
0

Jak stwierdzono wcześniej:

  • rozwijanie na żywo z systemu głównego jest możliwe (nie ma trudności, ponieważ sekcja startowa nie jest przenoszona)

  • Zmniejszenie partycji Live root musi być wykonane z zewnętrznego urządzenia rozruchowego (rozruch z systemu live cd / usb-stick), tak jakby wystąpił jakikolwiek błąd, niedopasowanie ... cokolwiek ... Twój system się zawiesza, musi być zrestartowany i ostatecznie nie będzie można poprawnie uruchomić.

Jakikolwiek rodzaj "ale zrobiłem to i działa" jest czystym szczęściem.

    
odpowiedział ascervera 10.01.2014, 22:58
źródło
0

Wykonaj następujące kroki.

  1. otwórz terminal jako superużytkownik su
  2. uruchom parted
  3. wpisz p , aby wyświetlić dostępne partycje
  4. identyfikuj swój numer partycji głównej (np. "sda 3" oznacza numer 3) i usuń sąsiednią partycję, używając rm PARTITION NUMBER do utworzenia wolnego miejsca.
  5. teraz zwiększ rozmiar root, wpisując resizepart ROOT NUMBER i jeśli to konieczne, zrestartuj system
  6. zakończ parted wpisując exit i typ terminala partprobe i naciśnij enter (można to zrobić nawet po ponownym uruchomieniu)
  7. wreszcie uruchom resize2fs /dev/sda PARTITION NUMBER i ciesz się przestronną partycją root.
odpowiedział Gurunadha Reddy 13.09.2017, 22:22
źródło
-6

Jak wspomniano wcześniej działa dobrze wystarczy zresetować flagę rozruchową

uruchom 'parted'

parted /dev/sda

sprawdź numer partycji

(parted) print

zresetuj flagę startową na numer partycji "1" w tym przypadku

(parted) set 1 boot on
(parted) quit
    
odpowiedział benko 16.05.2013, 15:39
źródło

Przeczytaj inne pytania na temat tagów