Wie kann ich die Größe einer Ext4-Partition über die Befehlszeile ändern?

Wie kann ich die Größe einer Ext4-Partition über die Befehlszeile ändern?

Was ist der einfachste Weg, die Größe einer ext4-Partition (oder einer Partition eines beliebigen Typs, je nach Methode) über die Befehlszeile zu ändern (möglicherweise mit den wenigsten Befehlen, aber auch am einfachsten zu verstehen)?

Die Verwendung eines Tools wie Gparted ist in einer GUI offensichtlich einfach, aber wie sieht es in der Befehlszeile aus? Ich denke, textbasierte GUIs können auch als Antwort gelten, da sie technisch gesehen immer noch in der Befehlszeile liegen. Es muss nur einfach sein.

Mit Partition meine ich eine einfache Partition auf einer einzelnen Festplatte eines PCs (z. B. eines Laptops). Ich möchte beispielsweise die Größe ändern /dev/sda4. Es gibt keine RAIDs, es gibt nicht mehr als ein Festplattenlaufwerk, hier gibt es nichts Kompliziertes. Nur eine einfache Partition auf einer einzelnen Festplatte (/dev/sdaX auf /dev/sda).

Antwort1

Sie können fdiskIhre Partitionstabelle während des Betriebs ändern. Weitere Informationen finden Sie unterLive-Größenänderung eines ext4-Dateisystems unter Linux (AnDas Schweigen des CodesBlog):

Haftungsausschluss: Die folgenden Anweisungen können Ihre Daten leicht ruinieren, wenn Sie einen Fehler machen. Ich habe dies auf einer VM gemacht, die ich vor der Durchführung der folgenden Aktionen gesichert habe. Wenn Sie Ihre Daten verlieren, weil Sie kein Backup durchgeführt haben, beschweren Sie sich nicht.

...

Erstens: Erhöhen Sie die Festplattengröße.

In ESXi ist dies ganz einfach: Erhöhen Sie einfach die Größe der virtuellen Festplatte. Jetzt haben Sie eine größere Festplatte, müssen aber dennoch a) die Partitionsgröße erhöhen und b) die Größe des Dateisystems ändern.

Zweitens: Erhöhen Sie die Partitionsgröße.

Sie können fdiskdie Partitionstabelle während des Betriebs ändern. Die Standardinstallation von Ubuntu hat drei Partitionen erstellt: eine primäre (sda1), eine erweiterte (sda2) mit einer einzelnen logischen Partition (sda5). Die erweiterte Partition wird einfach für den Swap-Speicher verwendet, sodass ich sie problemlos verschieben konnte, ohne Daten zu verlieren.

  1. Löschen Sie die primäre Partition

  2. Löschen Sie die erweiterte Partition

  3. Erstellen Sie eine neue primäre Partition, beginnend beim gleichen Sektor wie die ursprüngliche, nur mit einer größeren Größe (lassen Sie etwas für den Swap-Speicher übrig)

  4. Erstellen Sie eine neue erweiterte Partition mit einer logischen Partition darin, um den Swap-Speicherplatz zu speichern

    me@ubuntu:~$ sudo fdisk /dev/sda
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048   192940031    96468992   83  Linux
    /dev/sda2       192942078   209713151     8385537    5  Extended
    /dev/sda5       192942080   209713151     8385536   82  Linux swap / Solaris
    
    Command (m for help): d
    Partition number (1-5): 1
    
    Command (m for help): d
    Partition number (1-5): 2
    
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    Partition number (1-4, default 1):
    Using default value 1
    First sector (2048-524287999, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-524287999, default 524287999): 507516925
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): e
    Partition number (1-4, default 2): 2
    First sector (507516926-524287999, default 507516926):
    Using default value 507516926
    Last sector, +sectors or +size{K,M,G} (507516926-524287999, default 524287999):
    Using default value 524287999
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l
    Adding logical partition 5
    First sector (507518974-524287999, default 507518974):
    Using default value 507518974
    Last sector, +sectors or +size{K,M,G} (507518974-524287999, default 524287999):
    Using default value 524287999
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    /dev/sda5       507518974   524287999     8384513   83  Linux
    
    Command (m for help): t
    Partition number (1-5): 5
    
    Hex code (type L to list codes): 82
    Changed system type of partition 5 to 82 (Linux swap / Solaris)
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    /dev/sda5       507518974   524287999     8384513   82  Linux swap / Solaris
    
    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.
    
    me@ubuntu:~$ sudo reboot 
    

Ich bemerkte später, dass ich das Boot-Flag nicht gesetzt hatte, aber anscheinenddu brauchst es nicht wirklich.

Drittens: Erweitern Sie das Dateisystem.

resize2fsSie können dies online auf einer gemounteten Partition tun .

me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        91G   86G   12M 100% /
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           1.6G  696K  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  144K  3.9G   1% /run/shm
none            100M   16K  100M   1% /run/user

me@ubuntu:~$ sudo resize2fs /dev/sda1
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 6, new_desc_blocks = 16
The filesystem on /dev/sda1 is now 63439359 blocks long.

me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       239G   86G  142G  38% /
udev            3.9G   12K  3.9G   1% /dev
tmpfs           1.6G  696K  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  152K  3.9G   1% /run/shm
none            100M   36K  100M   1% /run/user

Kleines Problem: Nach dem Neustart war der Swap-Speicher nicht aktiv. Es stellte sich heraus, dass Sie ausführen müssen mkswap, die neue UUID anpassen /etc/fstabund den Swap aktivieren müssen.

me@ubuntu:~$ sudo mkswap /dev/sda5 
Setting up swapspace version 1, size = 8384508 KiB
no label, UUID=141d401a-b49d-4a96-9b85-c130cb0de40a

me@ubuntu:~$ sudo swapon --all --verbose
swapon on /dev/sda5
swapon: /dev/sda5: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/sda5: pagesize=4096, swapsize=8585740288, devsize=8585741312

Bearbeiten Sie /etc/fstab, um die UUID für die alte Swap-Partition durch die neue von zu ersetzen mkswap.

Antwort2

Ich beantworte dies für den Fall, dass Sie in einer ähnlichen Situation sind wie ich. Ich musste die Größe des Dateisystems (Ext4) auf einer dynamischen Festplatte ändern, auf der Ubuntu 18.0.4 LTS als Gast ausgeführt wird. Es gelang mir, die Größe der Festplatte vom Host aus zu ändern und dann die Größe des Dateisystems zu ändern.

Das Ausführen der üblichen Befehle war nicht möglich. Zum Beispiel:

$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
The filesystem is already 13180160 (4k) blocks long.  Nothing to do!

und fdiskwar ziemlich kompliziert, außerdem musste ich wahrscheinlich eine LiveCD ausführen, um an der nicht gemounteten Festplatte arbeiten zu können.

Diese beiden Befehle haben mein Problem einfach und schnell gelöst:

$ growpart /dev/sda 2
CHANGED: partition=2 start=4096 old: size=105441280 end=105445376 new: size=409595871,end=409599967

$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 25
The filesystem on /dev/sda2 is now 51199483 (4k) blocks long.

Hinweis: 2Der erste Befehl gibt die Partitionsnummer auf dem Gerät an /dev/sda.

Antwort3

Wenn Sie sowohl die Größe der Partition als auch des Dateisystems erhöhen möchten, führen Sie zuerst aus, fdiskum die Größe der Partition zu erhöhen, und führen Sie dann aus, resize2fsum die Größe des Dateisystems zu erhöhen.

Wenn Sie die Größe beider verkleinern möchten, führen Sie resize2fszuerst und dann aus fdisk.

Antwort4

Die Lösung von Noaloist offensichtlich das Beste von allen; so viel einfacher als die anderen:

echo "- +" | sfdisk -N<Teilenummer>/Entwickler/sdX

Kurze Erklärung zur Funktionsweise: -Nbedeutet , sfdiskdass auf einer einzelnen Partition gearbeitet wird. Wenn es so gestartet wird, sfdiskist es interaktiv und wartet auf eine Startposition, eine Größe und optional einen Partitionstyp. " -" bedeutet, dass die Startposition nicht geändert wird, " +" bedeutet, dass die Endposition so viel Platz wie möglich einnimmt. Danach müssten Sie die Befehle printund verwenden write. Der führende Befehl echo "- +" |erledigt das in einer Zeile.

Die Einschränkung besteht darin, dass freier Speicherplatz vorhanden sein mussdirekt nach. Wenn sich hinter der zu ändernden Partition eine Swap-Partition befindet (die also keine echten Daten enthält), kann das Problem genauso einfach gelöst werden, indem Sie sfdisk. Nehmen wir mit der obigen Syntax an, dass sich die zu ändernde Partition auf sda1und der Swap auf befindet sda2. Wir haben eine 128-GB-Festplatte und möchten 6 GB Swap: Der erste Schritt besteht darin, die Swap-Partition ans Ende zu verschieben:

echo "122G +" | sfdisk -N2 /dev/sda

Erweitern Sie nun die erste Partition:

echo "- +"    | sfdisk -N1 /dev/sda

und ändern Sie die Größe mit resize2fs. Möglicherweise müssen Sie sicherstellen, dass Ihr neuer Swap erkannt wird. Siehe swapoff, mkswap, swaponund die fstabDatei. Dies fällt nicht in den Rahmen dieser Frage.

Über den Befehl für sda2: Verschieben Sie auf diese Weise KEINE Partition mit Daten!!!  Sie würden alle Ihre Daten verlieren. Dieser Befehl verschiebt die Daten nicht, sondern nur die Partitionsgrenzen. Der für sda1 ( - +) verwendete Befehl birgt keine Gefahr, da die Startposition der Partition nicht geändert wird; dies ist die Bedeutung von " -", wenn es für eine einzelne Partition verwendet wird.

Vielen Dank @noalo

verwandte Informationen