Wenn man mal ein angelegtes Image seines Raspi-Systems auf ein größeres Medium, SDCard, USB-Stick oder SSD wiederherstellt, kann es sein, dass die System-Partition noch die alte Größe hat. Um nun die volle Größe nutzen zu können, muss die Partition vergrößert werden. Das kann im laufenden Betrieb geschehen. Allerdings sollte man unbedingt vorher ein aktuelles Image (Backup) gezogen haben, falls doch mal was passiert (Stromausfall, Wackelkontakt, oder einfach nur passiert etwas nach Murphys Gesetzt). Die Anleitung ist ohne Gewähr, hat bei meinen Versuchen bisher aber immer funktioniert (mit Raspbian Stretch und Buster).

Zunächst mal schauen, wie die Speicherumgebung aussieht (wir starten in /home/pi):

sudo fdisk -l

Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

....
Hier kommen alle RAM-Disks, uns interessiert hier die letzte Platte (in dem Fall eine SSD):
....

Disk /dev/sda: 29,8 GiB, 32017047552 bytes, 62533296 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: 0xd3a82480

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1        8192    97889    89698 43,8M  c W95 FAT32 (LBA)
/dev/sda2       98304 15564799 15466496  7,4G 83 Linux

Diese Platte wählen wir mit fdisk aus um die Partition zu vergrößern, in dem Fall zunächst die Partitionstabelle zu löschen und dann neu zu schreiben.

sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Jetzt noch einmal die Daten anzeigen lassen:

Command (m for help): p

Disk /dev/sda: 29,8 GiB, 32017047552 bytes, 62533296 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: 0xd3a82480

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1        8192    97889    89698 43,8M  c W95 FAT32 (LBA)
/dev/sda2       98304 15564799 15466496  7,4G 83 Linux

So können wir zunächst sehen, ob die Platte die richtige ist (Größe vergleichen). Dann wollen wir sda2 vergrößern, da dise nur 7,4GB groß ist. Dazu müssen wir uns unbedingt den Startsektor (fett markiert) merken. Dann möchten wir zunächst eine Partition löschen:

Command (m for help): d

Wir wählen dann also die zweite Partition der Platte:

Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Keine Angst, die Daten sind noch vorhanden, es wurde nur die Partitionstabelle gelöscht.
Jetzt legen wir eine neue Partitionstabelle an, die genau bei dem gemerkten Sektor beginnt:

Command (m for help): n

 Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)

Wir müssen die System-Partition als primäre Partition angeben:

Select (default p): p

Nun geben wir noch die Partitionsnummer ein:

Partition number (2-4, default 2): 2

Und dann noch den gemerkten ersten Sektor:

First sector (2048-62533295, default 2048): 98304

Es wird noch der Letzte Sektor benötigt. Wir wollen die ganze Platte nutzen, da benötigen wir den letzten Sektor, welcher uns auch gleich dazu in der Kommandozeile angezeigt wird.

Last sector, +sectors or +size{K,M,G,T,P} (98304-62533295, default 62533295): 62533295

Created a new partition 2 of type 'Linux' and of size 29,8 GiB.
Partition #2 contains a ext4 signature.

Normalerweise bleibt die Partition signiert, das können wir so lassen:

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

Jetzt die gemachten Einstellungen auf die Platte schreiben (Jetzt passiert es wirklich).

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Das Ger¦t oder die Ressource ist belegt

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

Nach einem Reboot des Systems sollte nun die Partition wie gewünscht groß sein:

sudo fdisk -l

Disk /dev/sda: 29,8 GiB, 32017047552 bytes, 62533296 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: 0xd3a82480

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1        8192    97889    89698 43,8M  c W95 FAT32 (LBA)
/dev/sda2       98304 62533295 62434992 29,8G 83 Linux