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 fdisk
Ihre 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
fdisk
die 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.
Löschen Sie die primäre Partition
Löschen Sie die erweiterte Partition
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)
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.
resize2fs
Sie 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/fstab
und 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 ersetzenmkswap
.
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 fdisk
war 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: 2
Der 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, fdisk
um die Größe der Partition zu erhöhen, und führen Sie dann aus, resize2fs
um die Größe des Dateisystems zu erhöhen.
Wenn Sie die Größe beider verkleinern möchten, führen Sie resize2fs
zuerst 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: -N
bedeutet , sfdisk
dass auf einer einzelnen Partition gearbeitet wird. Wenn es so gestartet wird, sfdisk
ist 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 print
und 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 sda1
und 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
, swapon
und die fstab
Datei. 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