Jak mohu změnit velikost oddílů root root při běhu?

196

Jak mohu zvýšit velikost kořenového oddílu systému během běhu?

Mám oddíl, který není přidělen po kořenové oblasti (což je také ext4), jak mohu přidělit tento nepřidělený prostor do místa přiděleného kořenovému oddílu bez nutnosti vypnutí serveru?

    
dané BonboBingo 30.01.2011 18:23

10 odpovědí

170

GUI (Ubuntu 14.04 a novější) : GParted v0.17 a později poskytují pěkné grafické rozhraní pro toto. (Starší verze odmítnou změnit velikost namontované oblasti).

Příkazový řádek (libovolná verze Ubuntu): Existují tři kroky.

Krok 1. Oddíl musí být nejprve změněn. Pokud používáte LVM, je to snadné a pravděpodobně víte, jak postupovat. Používáte-li klasické oddíly, je to trochu komplikovanější a může vyžadovat restartování (ačkoli nikdy nemusíte zavádět jiný systém nebo živé CD).

Takto to dělám: Použijtefdisk, chcete-li nejprve odstranit oddíl (myšlenka je, že data na disku budou zachována), pak ji pečlivě zopakujte s větší velikostí ve stejné pozici.

Příklad:

$ 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.

Je opět důležité, aby nový oddíl začínal ve stejném bloku jako starý. Identifikátor by měl také odpovídat (83 pro systémy Linux). Buďte připraveni ztrácet všechna data při nejmenším překlepu.

Chcete-li být na bezpečném místě, můžete také obnovit zaváděcí příznak (který podle Wikipedia stále vyžaduje některé počítače) stisknutím tlačítkaa.

Přečtěte si sekci komentářů, co dělat, pokud je swapový oddíl v cestě.

Nyní by mělo být zřejmé, proč lidé doporučují používat živé CD. ; -)

Krok 2 Protožefdisk vám připomíná, musíte před pokračováním znovu načíst tabulku oddílů. Nejbezpečnějším způsobem je jednoduše restartování počítače; ale můžete také použítpartprobe nebokpartx (další informace) .

Krok 3 Jakmile je oddíl změněn na velikost a tabulka oddílů znovu načtena, je jednoduché spouštětresize2fs v systému souborů a můžete to udělat i když je připojen jako kořenový oddíl.

Příklad:

$ sudo resize2fs /dev/sda1
    
odpověděl Søren Løvborg 06.04.2012 16:23
109

Je možné provést on-line změnu velikosti souborového systému ext4, i když je to váš kořenový oddíl. Použijte příkazresize2fs.

sudo resize2fs /dev/sda1

EDIT: On-line zmenšování není povoleno:

[email protected]:/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
    
odpověděl CodeAddict 02.03.2012 11:50
23

Snadnější řešení - použijtegrowpart <device> <partition>:

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

Jako vždy zálohujte tabulku oddílů (sfdisk -d /dev/xvda > partition_bak.dmp) jen pro případ.

    
odpověděl STRML 18.07.2017 15:26
8

Můžete také použít pouze GParted - pokud oddíl, který měníte, není ten, z něhož jste spuštěni - jinak navrhuji možnost živé CD trochu jednodušší pro začátečníky.

GParted v podstatě provádí všechny kroky - pouze na základě grafického uživatelského rozhraní.

    
odpověděl leatherjacket 30.09.2012 13:34
8

Ano, se můžete zmenšit / přesunout / rozbalit on-line kořenový oddíl bez restartů (ani livecd ani usbkey): přečtěte si tuto odpověď . Je to velmi dobře napsané a snadné sledovat, byť poměrně dlouhé a trochu riskantní. Takže pokud chcete rozšiřovat pouze partition ext4, můžete se držet konvenčních pracovních řešeníresize2fs.

Obecné řešení, které jsem nalezl, bude pracovat na jakémkoli typu vyhrazeného řešení nebo řešení VPS.

TLDR; toto řešení znamenápivot_root totmpfs, takže můžeteumount bezpečně spravovat kořenový oddíl a hýbat s ním. Jakmile budete hotovi, budetepivot_root vrácen do nového kořenového oddílu.

To umožňuje téměř jakoukoli manipulaci v kořenovém souborovém systému (přesunout jej, změnit souborový systém, měnit jeho fyzické zařízení ...).

V tomto procesu se nepožaduje restart a tento umožňuje omezení obejití zresize2fs nesmí se zmenšit ext4 oddílů.

Používal jsem to osobně a funguje to velmi dobře na debianovém systému, takže by měl pracovat na Ubuntu. Jsem velmi překvapen, že nevidím toto hloubkové řešení trochu více spojené s mnoha otázkami na stránkách stackexchange, které se zabývají stejnou záležitostí.

Poznámka: Samozřejmě, pokud chcete rozšiřovat svůj oddíl, bude stačit jednoduchéresize2fs, jak je uvedeno na mnoha místech a v dalších odpovědích.

    
odpověděl vaab 01.02.2016 03:08
5

Po dokončení úpravy velikosti kořenového oddílu ext4 na živém systému, když byl root připojen.

[[email protected] 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.

[[email protected] i686]# 
    
odpověděl CDR 04.12.2012 23:40
1

Prostě jsem to úspěšně provedl bezumount,pivot_root nebo dočasného odstranění hlavního oddílů pomocí jádra 3.2 v jádře Ubuntu 16.04, 4.4.0. Abych byl opatrný, udělal jsem všechno z virtuální konzoly se sítí, která byla vypnuta, a předběhla snapshot předem jen pro případ, ale snímek nebyl zapotřebí, takže jsem mohl stejně dobře udělat přes SSH a bez změny úrovní runlevel. >

Určuje velikost oddílu:parted /dev/sda1 print | egrep "Disk.*GB"

Volitelně přepněte do režimu pro více uživatelů bez vytváření sítí (musí být provedeno z konzoly, nikoliv SSH):

runlevel     # remember the original runlevel
init 2

Chcete-li si být opatrný, musíte si být opatrní.

Změna velikosti oddílu:

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

Změnit souborový systém:resize2fs /dev/sda1

Pokud se něco pokazí, můžete zde obnovit svůj snímek. Pokud vše proběhlo v pořádku, vrátíte se na normální úroveň (získané výše) - obvykle 5:init 5. Možná by bylo lepší provést v tomto okamžiku úplné restartování a ujistit se, že se všechno vrátí správně. (Poté jsem dostal datum / problém ntp).

    
odpověděl Roger Dueck 14.07.2017 02:09
0

Jak bylo uvedeno výše:

  • Rozbalit živě z kořenového systému je možný (žádné potíže, protože zaváděcí sekce nesmí být přesunuta)

  • zmenšování živého kořenového oddílu musí být provedeno z externího bootovacího zařízení (boot z živého systému cd / usb-stick), jako by byla nějaká chyba, nesoulad .. ačkoliv váš systém visí, musí být restartovat a nakonec nebude možné správně spustit.

Jakýkoli druh ", ale já jsem to udělal a funguje" je čistá štěstí.

    
odpověděl ascervera 10.01.2014 22:58
0

Postupujte podle následujících pokynů.

  1. otevřít terminál jako superuživatelsu
  2. spustitparted
  3. Typp pro zobrazení dostupných oblastí
  4. identifikujte číslo vašeho kořenového oddílu (např. 'sda 3' znamená číslo 3) a odstraňte sousední oddíl pomocírm PARTITION NUMBER pro vytvoření volného místa.
  5. nyní zvětšete velikost kořenu zadánímresizepart ROOT NUMBER a případně restartujte systém
  6. ukončeteparted zadánímexit av typu terminálupartprobe a stiskněte enter (to lze provést i po restartu)
  7. nakonec spusťteresize2fs /dev/sda PARTITION NUMBER a užívejte si prostorného kořenového oddílu.
odpověděl Gurunadha Reddy 13.09.2017 22:22
0

Chtěl bych rozšířit odpověď na @ Søren Løvborg: rozšíření oddílů s odkládacím oddílem.

Nejdříve rozložení disku po jeho rozšíření:

$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

Takže sda1 je třeba rozšířit volným prostorem na konci disku, ale oddíl pro swap je mezi nimi. Takto můžete:

Nejprve musíme zakázat výměnu. Zkontrolujte, kolik je použito a zda je můžete vypnout.

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

swap se zde nepoužívá, abychom jej mohli vypnout

$sudo swapoff /dev/sda2

Nyní změníme tabulku oddílů:

$sudo fdisk /dev/sda

(poznámka: Pokud máte první oddíl začínat v sektoru 63 místo 2048, musíte přidat možnost-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).

Poznámka: Velikost sda1 je celkové množství sektorů minus velikost sektoru oddílu swap: 14335999-2093058 = 12242941

Jak uvádí fdisk: jádro stále používá starou tabulku oddílů, takže je musíme znovu načíst.

$partprobe

Nyní musíme spustit resize2fs na sda1 (nezapomeňte na to!)

$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.

Nyní se věci ještě neskončily. Jak jste si pravděpodobně všimli, že sda2 je rozdělen jako typ Linux (Ext4). Z nějakého důvodu neexistuje žádný způsob, jak fdisk zvolit typ. Takže musíme jej střídat pomocícfdisk

$ sudo cfdisk

Zvolte sda2 a změňte typ na82 Linux swap / Solaris a ujistěte se, že jej zapíšete (zadejte ano pro potvrzení)

Nyní můžeme znovu aktivovat swap

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

A nakonec jej zapněte:

$swapon /dev/sda2

Jediná věc, kterou potřebujeme, je aktualizovat fstab automaticky připojit odkládací oddíl při spuštění

$sudo nano /etc/fstab

Změňte UUID swapového oddílu na výše uvedený výstup:

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

Nyní je vše v pořádku a můžete bez problémů restartovat.

    
odpověděl wouter205 07.09.2018 08:58