it-swarm.com.de

Wie kann ich die Größe einer ext-Root-Partition zur Laufzeit ändern?

Wie kann ich die Root-Partition eines Systems zur Laufzeit vergrößern?

Ich habe eine Partition, die nicht nach der Root-Partition zugewiesen ist (die auch ext4 ist). Wie kann ich diesen nicht zugewiesenen Speicherplatz dem Speicherplatz hinzufügen, der der Root-Partition zugewiesen ist, ohne den Server herunterfahren zu müssen?

230
BonboBingo

GUI (Ubuntu 14.04 und höher) : GParted v0.17 und höher bieten hierfür eine nette GUI. (Ältere Versionen lehnen es ab, die Größe einer bereitgestellten Partition zu ändern.).

Befehlszeile (jede Ubuntu-Version): Hierzu sind drei Schritte erforderlich.

Schritt 1 Die Partition muss zuerst in der Größe geändert werden. Wenn Sie LVM verwenden, ist dies einfach und Sie wissen vermutlich, wie Sie vorgehen müssen. Wenn Sie klassische Partitionen verwenden, ist dies etwas komplizierter und erfordert möglicherweise einen Neustart (obwohl Sie nie ein anderes System oder eine Live-CD starten müssen).

So mache ich das: Verwenden Sie fdisk, um zuerst die Partition zu löschen (die Daten auf der Festplatte sollen erhalten bleiben), und erstellen Sie sie dann vorsichtig mit einer größeren Größe an derselben Position neu.

Beispiel:

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

Auch hier ist es wichtig, dass die neue Partition am selben Block wie die alte beginnt. Die ID sollte ebenfalls übereinstimmen (83 für Linux-Systeme). Seien Sie darauf vorbereitet, alle Ihre Daten bei der geringsten Tippfehler zu verlieren.

Um auf der sicheren Seite zu sein, können Sie auch das Boot-Flag (das laut Wikipedia auf einigen Computern noch erforderlich ist) wiederherstellen, indem Sie a drücken.

Im Kommentarbereich erfahren Sie, was zu tun ist, wenn Ihre Swap-Partition im Weg ist.

Inzwischen sollte klar sein, warum die Leute die Verwendung einer Live-CD empfehlen. ;-)

Schritt 2. Wie Sie fdisk hilfreich erinnert, müssen Sie die Partitionstabelle neu laden, bevor Sie fortfahren. Der sicherste Weg ist, einfach neu zu starten. Sie können aber auch partprobe oder kpartx(weitere Informationen) verwenden.

Schritt 3. Sobald die Größe der Partition geändert und die Partitionstabelle neu geladen wurde, müssen Sie resize2fs auf dem Dateisystem ausführen kann dies auch tun, wenn es als Root-Partition gemountet ist.

Beispiel:

$ Sudo resize2fs /dev/sda1
207
Søren Løvborg

Es ist möglich, die Größe eines ext4-Dateisystems online zu ändern, auch wenn es sich um Ihre Root-Partition handelt. Verwenden Sie den Befehl resize2fs.

Sudo resize2fs /dev/sda1

BEARBEITEN: Online-Schrumpfen ist nicht erlaubt:

[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
114
CodeAddict

Eine einfachere Lösung - benutze growpart <device> <partition>:

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

Sichern Sie wie immer Ihre Partitionstabelle (sfdisk -d /dev/xvda > partition_bak.dmp) für alle Fälle.

50
STRML

Ja, Sie können eine Online-Root-Partition verkleinern/verschieben/vergrößern , ohne einen Neustart durchführen zu müssen (weder Live-CD noch USB-Schlüssel): lesen Sie diese Antwort . Es ist sehr gut geschrieben und leicht zu befolgen, obwohl es ziemlich lang und ein wenig riskant ist. Wenn Sie also nur Ihre ext4-Partition erweitern möchten, können Sie sich an die herkömmlichen resize2fs -Lösungen halten.

Die allgemeine Lösung, die ich verwendet habe, funktioniert beispielsweise für alle Arten von dedizierten Lösungen oder VPS-Lösungen.

TLDR; Diese Lösung impliziert, dass pivot_root bis tmpfs, damit Sie umount sicher Ihre Root-Partition leben und damit experimentieren können. Sobald Sie fertig sind, kehren Sie auf Ihrer neuen Root-Partition pivot_root zurück.

Dies ermöglicht so ziemlich jede Manipulation am Root-Dateisystem (Verschieben, Ändern des Dateisystems, Ändern des physischen Geräts ...).

Dabei ist kein Neustart erforderlich, und dies ermöglicht die Umgehung der Einschränkung , dass resize2fs nicht in der Lage ist zu verkleinern ext4 Partitionen.

Ich persönlich habe dies verwendet und es funktioniert sehr gut auf Debian-Systemen, so dass es auf Ubuntu funktionieren sollte. Ich bin sehr überrascht, dass diese tiefgreifende Lösung nicht ein bisschen mehr mit den vielen Fragen auf Stackexchange-Websites zu tun hat, die sich mit dem gleichen Problem befassen.

Hinweis: Wenn Sie Ihre Partition erweitern möchten, ist natürlich ein einfacher resize2fs ausreichend, wie an zahlreichen Stellen und in anderen Antworten hier angegeben .

12
vaab

Sie können auch einfach GParted verwenden - solange die Partition, deren Größe Sie ändern, nicht diejenige ist, von der Sie gebootet haben - ansonsten ist die Option Live-CD für etwas einfacher Neulinge.

GParted führt im Grunde alle Schritte aus - nur basierend auf einer GUI mit Front.

10
leatherjacket

Ich möchte die Antwort von @ Søren Løvborg erweitern: Erweiterung der Partition um eine vorhandene Swap-Partition.

Zuerst das Layout der Festplatte nach dem Erweitern:

$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

Sda1 muss also um den freien Speicherplatz am Ende der Festplatte erweitert werden, aber die Swap-Partition befindet sich dazwischen. So können Sie es machen:

Zuerst müssen wir Swap deaktivieren. Überprüfen Sie, wie viel es verwendet wird und ob Sie es ausschalten können.

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

swap wird hier nicht verwendet, damit wir es ausschalten können

$Sudo swapoff /dev/sda5

Jetzt werden wir die Partitionstabelle ändern:

$Sudo fdisk /dev/sda

(Hinweis: Wenn die erste Partition bei Sektor 63 statt bei 2048 beginnt, müssen Sie die Option -c=dos hinzufügen.)

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): 12242941

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

Hinweis: Die Größe von sda1 ist die Gesamtanzahl der Sektoren abzüglich der Sektorgröße Ihrer Swap-Partition: 14335999-2093058 = 12242941

Als fdisk erwähnt: Der Kernel verwendet immer noch die alte Partitionstabelle, daher müssen wir sie neu laden.

$partprobe

Jetzt müssen wir resize2fs auf sda1 ausführen (vergiss das nicht!)

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

Nun sind die Dinge noch nicht vorbei. Wie Sie wahrscheinlich bemerkt haben, ist sda2 als Typ Linux (Ext4) partitioniert. Aus irgendeinem Grund gibt es in fdisk keine Möglichkeit, den Typ auszuwählen. Also müssen wir es mit cfdisk abwechseln

$ Sudo cfdisk

Wählen Sie sda2 und ändern Sie den Typ in 82 Linux swap / Solaris und stellen Sie sicher, dass Sie ihn schreiben (geben Sie yes zur Bestätigung ein).

Jetzt können wir den Swap wieder aktivieren

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

Und zum Schluss schalten Sie es ein:

$swapon /dev/sda2

Das Einzige, was wir tun müssen, ist, fstab zu aktualisieren, damit die Swap-Partition beim Booten automatisch eingehängt wird

$Sudo nano /etc/fstab

Und ändern Sie die UUID der Swap-Partition in die Ausgabe oben:

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

Jetzt ist alles in Ordnung und Sie können ohne Probleme neu starten.

5
wouter205

Wir haben gerade die Größenänderung einer ext4-Root-Partition auf einem Live-System abgeschlossen, während der Root eingehängt war.

[[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]# 
5
CDR

Ich habe dies erfolgreich ohne umount, pivot_root oder vorübergehende Entfernung der Hauptpartition mit Parted 3.2 unter Ubuntu 16.04, 4.4.0 Kernel gemacht. Um vorsichtig zu sein, habe ich alles von einer virtuellen Konsole mit deaktiviertem Netzwerk aus gemacht und zuvor für alle Fälle einen Schnappschuss erstellt, der jedoch nicht benötigt wurde. Daher hätte ich dies auch über SSH und ohne Änderung der Runlevel tun können.

Bestimmen Sie die Partitionsgröße: parted /dev/sda1 print | egrep "Disk.*GB"

Optional können Sie in den Mehrbenutzermodus ohne Netzwerk wechseln (muss über eine Konsole und nicht über SSH erfolgen):

runlevel     # remember the original runlevel
init 2

Optional können Sie einen VM Snapshot erstellen, um vorsichtig zu sein.

Partitionsgröße ändern:

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

Dateisystemgröße ändern: resize2fs /dev/sda1

Wenn etwas schief geht, können Sie Ihren Schnappschuss hier wiederherstellen. Wenn alles gut gegangen ist, kehren Sie zum normalen Runlevel (siehe oben) zurück - normalerweise 5: init 5. Es ist möglicherweise besser, an diesem Punkt einen vollständigen Neustart durchzuführen, um sicherzustellen, dass alles wieder ordnungsgemäß funktioniert (ich hatte danach ein Datums-/NTP-Problem).

1
Roger Dueck

Folge diesen Schritten.

  1. terminal als Superuser öffnen su
  2. parted ausführen
  3. geben Sie p ein, um die verfügbaren Partitionen anzuzeigen
  4. identifizieren Sie Ihre Root-Partitionsnummer (Beispiel: "sda 3" bedeutet Nummer 3) und löschen Sie eine benachbarte Partition, indem Sie rm PARTITION NUMBER verwenden, um freien Speicherplatz zu erstellen.
  5. erhöhen Sie nun die Root-Größe, indem Sie resizepart ROOT NUMBER eingeben, und starten Sie das System bei Bedarf neu
  6. beenden Sie parted, indem Sie exit eingeben und im Terminal partprobe eingeben, und drücken Sie die Eingabetaste (dies ist auch nach dem Neustart möglich).
  7. führen Sie schließlich resize2fs /dev/sda PARTITION NUMBER aus und genießen Sie die geräumige Root-Partition.
1
Gurunadha Reddy

Wie bereits erwähnt:

  • eine Live-Erweiterung von einem Root-System aus ist möglich (keine Schwierigkeiten, da der Boot-Bereich nicht verschoben werden muss).

  • das Verkleinern einer Live-Root-Partition muss über ein externes Startgerät erfolgen (Start von einer Live-System-CD/einem USB-Stick), als ob ein Fehler oder eine Nichtübereinstimmung vorliegen würde in der Lage, richtig zu booten.

Jede Art von "aber ich habe es getan und es funktioniert" ist reines Glück.

0
ascervera