[Linux-Partition] So verkleinern Sie Ihr Zuhause, um Sektoren zu verschieben und dann die Root-Größe zu erhöhen

Was du machen willst

In diesem Artikel ist die Linux-Root-Partition zu klein geworden, daher werden wir die zusätzliche Home-Partition reduzieren und die Root-Partition erweitern.

Insbesondere die Konfiguration, die anfangs so war

Device             Start       End   Sectors  Size Type
/dev/nvme0n1p1      2048    206847    204800  100M EFI System
/dev/nvme0n1p2    206848    239615     32768   16M Microsoft reserved
/dev/nvme0n1p3    239616 168011775 167772160   80G Microsoft basic data
/dev/nvme0n1p4 168011776 170108927   2097152    1G Windows recovery environment
/dev/nvme0n1p5 170108928 274966527 104857600   50G Microsoft basic data
/dev/nvme0n1p6 274966528 370976767  96010240 45.8G Linux root
/dev/nvme0n1p7 370976768 907847679 536870912  256G Linux home

Reduzieren Sie / dev / nvme0n1p7 um 56 GB und erweitern Sie / dev / nvme0n1p6 um 50 GB, um die folgende Konfiguration vorzunehmen.

Device             Start       End   Sectors  Size Type
/dev/nvme0n1p1      2048    206847    204800  100M EFI System
/dev/nvme0n1p2    206848    239615     32768   16M Microsoft reserved
/dev/nvme0n1p3    239616 168011775 167772160   80G Microsoft basic data
/dev/nvme0n1p4 168011776 170108927   2097152    1G Windows recovery environment
/dev/nvme0n1p5 170108928 274966527 104857600   50G Microsoft basic data
/dev/nvme0n1p6 274966528 475834367 200867840 95.8G Linux root
/dev/nvme0n1p7 475834368 895264767 419430400  200G Linux home

Was ich getan habe

Die Operation kann in die folgenden drei Hauptoperationen unterteilt werden

  1. Verkleinern Sie die Home-Partition / dev / nvme0n1p7
  2. Verschieben Sie den Startsektor der Home-Partition "/ dev / nvme0n1p7", um einen nicht zugewiesenen Sektor nach der Root-Partition "/ dev / nvme0n1p6" zu erstellen
  3. Erweitern Sie die Root-Partition / dev / nvme0n1p6

Aus Gründen von Operation 2 befindet sich bei dieser Partitionskonfiguration eine Home-Partition im Sektor unterhalb der Root-Partition. Dies liegt daran, dass es nicht möglich ist, eine Partition sektorübergreifend zu erstellen. Nach dem Verkleinern der Home-Partition muss der Startsektor der Home-Partition um den Betrag zurück verschoben werden, um den Sie die Root-Partition erweitern möchten.

Von nun an werde ich Schritt für Schritt erklären. Starten Sie zunächst Linux von USB und zeigen Sie die Konsole an, da es sich um eine beliebige Distribution handeln kann. Da die Umgebung diesmal Archlinux ist, das Arch-Installationsmedium (archlinux-2019.12.01-x86_64.iso 2019.12.01-x86_64.iso))).

Wenn Sie das Betriebssystem mitten in Ihrer Arbeit starten müssen, fahren Sie mit dem Ende jedes Schritts fort, da dies das Dateisystem beschädigen kann. Tatsächlich haben wir bestätigt, dass das Betriebssystem am Ende jedes Schritts ohne Probleme startet.

SCHRITT 1: Verkleinern Sie die Home-Partition / dev / nvme0n1p7

Überprüfen Sie zunächst das Dateisystem mit dem Befehl e2fsck (der nächste zu verwendende Befehl resize2fs kann ohne diesen Vorgang nicht ausgeführt werden, da er den freien Speicherplatz basierend auf diesem Ergebnis überprüft).

Sie werden gefragt, ob Sie den Erweiterungsbaum unterwegs optimieren möchten, aber es scheint, dass Sie dies nicht tun müssen, solange der Erweiterungsbaum die Obergrenze nicht überschreitet. Ich fuhr mit allen Nein fort. Referenz: https://unix.stackexchange.com/questions/392537/inode-extent-tree-at-level-1-could-be-shorter-ignored

e2fsck -f <Der Pfad des Dateisystems, das Sie überprüfen möchten>
root@archiso ~ # e2fsck -f /dev/nvme0n1p7
e2fsck 1.45.4 (23-Sep-2019)
Pass 1: Checking inodes, blocks, and sizes
Inode 8404395 extent tree (at level 1) could be shorter. Optimize<y>? no
Inode 8404481 extent tree (at level 2) could be narrower. Optimize<y>? no
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/nvme0n1p7:2498456/16777216 files (0.9% non-contiguous), 32640354/67108864 blocks
e2fsck -f /dev/nvme0n1p7 7.08s user 0.82s system 6% cpu 2:07.42 total

Führen Sie als Nächstes den Reduktionsprozess mit resize2fs aus.

resize2fs <Der Pfad des Dateisystems, das Sie verkleinern möchten> <Partitionsgröße nach Reduzierung(K,M,Kann mit G usw. angegeben werden.)> 
root@archiso ~ # resize2fs /dev/nvme0n1p7 200G
resize2fs 1.45.4 (23-Sep-2019)
Resizing the filesystem on /dev/nvme0n1p7 to 52428800 (4k) blocks.
The filesystem on /dev/nvme0n1p7 is now 52428800 (4k) blocks long.

resize2fs /dev/nvme0n1p7 200G 6.41s user 14.03s system 36% cpu 55.878 total

Bisher wurde die eigentliche Schrumpfung des Dateisystems abgeschlossen, diese Informationen werden jedoch nicht im LVM (der Ebene, auf der die Partitionsgröße jeder Partition aufgezeichnet wird) wiedergegeben. Verwenden Sie daher fdisk, um das LVM zu aktualisieren.

root@archiso ~ # fdisk <Volume mit verkleinerten Partitionen>

Löschen Sie die Informationen der reduzierten Partition mit dem Befehl d.
Erstellen Sie die Informationen neu, indem Sie die Partitionsinformationen eingeben, die nach dem Reduzieren mit dem Befehl n auf die Größe geändert wurden.
Mit dem Befehl w in LVM speichern
root@archiso ~ # fdisk /dev/nvme0n1
Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-7, default 7): 7

Partition 7 has been deleted.

Command (m for help): n
Partition number (7-128, default 7): 
First sector (370976768-1000215182, default 370976768): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (370976768-1000215182, default 1000215182): +200G

Created a new partition 7 of type 'Linux filesystem' and of size 200 GiB.
Partition #7 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Zu diesem Zeitpunkt ist die Reduzierung von / dev / nvme0n1p7 abgeschlossen.

SCHRITT 2: Verschieben Sie den Startsektor der Home-Partition "/ dev / nvme0n1p7" und erstellen Sie einen nicht zugewiesenen Sektor nach der Root-Partition "/ dev / nvme0n1p6"

Verwenden Sie sfdisk, um die Partition zu verschieben. Dieser Befehl aktualisiert auch das LVM, sodass Sie nur diesen Schritt ausführen müssen.

Bitte beachten Sie, dass dieser Vorgang einige Zeit dauert. In diesem Fall war es SSD und ich dachte, es würde einige zehn Minuten dauern, aber es dauerte tatsächlich ungefähr 6 Stunden.

echo '+<Die Größe, die Sie verschieben möchten(=Erweiterte Größe der Root-Partition)>' | sfdisk --move-data <Volume mit der Partition, die Sie verschieben möchten> -N <Anzahl der zu verschiebenden Versionen>
root@archiso ~ # echo '+50G' | sfdisk --move-data /dev/nvme0n1 -N 7
Checking that no-one is using this disk right now ... OK

Disk /dev/nvme0n1: 476.96 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: KXG50ZNV512G TOSHIBA                    
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: gpt
Disk identifier: 80F7A56F-2E69-49B5-8A44-09E9998615AE

Old situation:

Device             Start       End   Sectors  Size Type
/dev/nvme0n1p1      2048    206847    204800  100M EFI System
/dev/nvme0n1p2    206848    239615     32768   16M Microsoft reserved
/dev/nvme0n1p3    239616 168011775 167772160   80G Microsoft basic data
/dev/nvme0n1p4 168011776 170108927   2097152    1G Windows recovery environment
/dev/nvme0n1p5 170108928 274966527 104857600   50G Microsoft basic data
/dev/nvme0n1p6 274966528 370976767  96010240 45.8G Linux filesystem
/dev/nvme0n1p7 370976768 790407167 419430400  200G Linux home

/dev/nvme0n1p7:
New situation:
Disklabel type: gpt
Disk identifier: 80F7A56F-2E69-49B5-8A44-09E9998615AE

Device             Start       End   Sectors  Size Type
/dev/nvme0n1p1      2048    206847    204800  100M EFI System
/dev/nvme0n1p2    206848    239615     32768   16M Microsoft reserved
/dev/nvme0n1p3    239616 168011775 167772160   80G Microsoft basic data
/dev/nvme0n1p4 168011776 170108927   2097152    1G Windows recovery environment
/dev/nvme0n1p5 170108928 274966527 104857600   50G Microsoft basic data
/dev/nvme0n1p6 274966528 370976767  96010240 45.8G Linux filesystem
/dev/nvme0n1p7 475834368 895264767 419430400  200G Linux home

Data move:
 typescript file : /root/sfdisk-nvme0n1p7.move
 old start: 370976768, new start: 475834368 (move 419430400 sectors)

SCHRITT 3: Erweitern Sie die Root-Partition / dev / nvme0n1p6

resize2fs hat eine Funktion zum Ändern der Partitionsgröße gemäß den Informationen von fdisk. Aktualisieren Sie daher zuerst die Informationen auf dem LVM mit fdisk und führen Sie die eigentliche Erweiterung mit resize2fs durch.

Verwenden Sie für fdisk den folgenden Befehl wie in STEP1.

root@archiso ~ # fdisk <Volume mit der Partition, die Sie vergrößern möchten>

Löschen Sie die Informationen der Partition, die Sie mit dem Befehl d erweitern möchten.
Geben Sie die Größe der Partitionsinformationen mit dem Befehl n ein, um die Informationen neu zu erstellen.
Mit dem Befehl w in LVM speichern
root@archiso ~ # fdisk /dev/nvme0n1
Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-7, default 7): 6

Partition 6 has been deleted.

Command (m for help): n
Partition number (6,8-128, default 6): 6
First sector (274966528-1000215182, default 274966528): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (274966528-475834367, default 475834367): 

Created a new partition 6 of type 'Linux filesystem' and of size 95.8 GiB.
Partition #6 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Nachdem Sie dasselbe e2fsck wie STEP1 ausgeführt haben, führen Sie resize2fs aus, ohne die Partitionsgröße anzugeben. Im Gegensatz zum Zeitpunkt der Reduzierung war die Erweiterung sofort abgeschlossen.

root@archiso ~ # e2fsck -f /dev/nvme0n1p6
(Unterlassung:Das Ausführungsergebnis ähnelt dem von STEP1)

root@archiso ~ # resize2fs /dev/nvme0n1p6
resize2fs 1.45.4 (23-Sep-2019)
Resizing the filesystem on /dev/nvme0n1p6 to 25108480 (4k) blocks.
The filesystem on /dev/nvme0n1p6 is now 25108480 (4k) blocks long.

Damit ist der Vorgang abgeschlossen.

Zusammenfassung

Resize2fs ist praktisch zum Skalieren von Partitionen und --move-data von sfdisk ist praktisch zum Verschieben von Sektoren!

Als ich zu einem Sektor wechselte, dachte ich, ich müsste dd verwenden, um ihn loszuwerden, aber mit sfdisk konnte ich ihn auf einmal lösen! !!

Recommended Posts

[Linux-Partition] So verkleinern Sie Ihr Zuhause, um Sektoren zu verschieben und dann die Root-Größe zu erhöhen
[Linux] Unterteilen von Dateien und Ordnern
So wechseln Sie zwischen Linux- und Mac-Shells
Schritte zum Ändern von Partitionen, einschließlich Linux-Systembereich und Startbereich
[Google Colab] So unterbrechen Sie das Lernen und setzen es dann fort