Linux partitionieren & mounten


© Juli 2020, Letzte Änd. 06.08.20

Hinweis: Ich habe erst anhand verschiedener Konfigurationen unterschiedliche Lösungsansätze beschrieben. Wer von der Deb 10 Installations-Seite kommt kann gleich nach unten zum ASRock B450 mit 450 GB SSD & 3 TB HD scrollen.

Mit den Begriffen habe ich ein wenig gehadert. Daher ein paar Definitionen:

Wunsch Partitionierung

Die Reihenfolge der verwendeten Platten ergibt sich aus der Kapazität und Geschwindigkeit.

  1. Platte vorzugsweise SSD (schnell, aber klein)
  2. Platte HD (größer, aber langsamer)

Zurzeit sieht man noch zwei Möglichkeiten der Partitionierung:

Beispiel einer alten SSD-Partitionierung auf einem ASRock AB350:

gparted von ssd

oder als Tabelle...

Partition Dateisystem Einhängepunkt Größe Benutzt Kommentar
/dev/nvme0n1p1 ext4 / 28 GB 9 GB erstes Betriebssystem
/dev/nvme0n1p3 ext4 / 28 GB zweites Betriebssystem
/dev/nvme0n1p2 410 GB ext. Partition
 /dev/nvme0n1p5 swap 16 GB Swap-Partition ca. 2x RAM
 /dev/nvme0n1p6 ext4 /home 395 GB 270 GB für Benutzer & virtualisierte Systeme

Die SSD wurde nach altem Verfahren (mit MBR und max. 4 primären Partitionen) beschrieben. Platz für 2 Betriebssysteme ist vorgesehen.

Die Swap-Partition ist ca. 2x so groß wie der RAM Speicher. Dies folgt einer alten Regel, welche bei so viel RAM eigentlich nicht mehr nötig ist. Siehe archlinux.org Partitioning.
8 GB hätten auch gereicht...

...und der HD-Partitionierung, ebenfalls auf einem ASRock AB350:

Gparted von HD

oder...

Partition Dateisystem Einhängepunkt Größe Benutzt Kommentar
/dev/sda1 ext4 16 GB 4 GB drittes Betriebssystem
/dev/sda3 swap 4 GB
/dev/sda4 ext4 2,7 TB 1,3 TB Daten

Merkmale:

Nun mag sich noch mancher fragen warum ich für die System-Partitionen / 28 GB vorsehe, obwohl davon nur ein Bruchteil (9 GB) vom Betriebssystem verwendet wird. Das hat mit meinen bevorzugten Datei-Verwaltungs-Programm Krusader zu tun. Temporäre Dateien werden Default-mäßig unter /tmp/krusader.tmp abgespeichert. Sollte also eine etwas größere Zip-Datei entpackt werden, ist es nötig dort genügend Platz zu haben.

Umzug von User-Verzeichnissen

Im Verzeichnis /home (auf der SSD) wird normalerweise für jeden Benutzer ein Ordner angelegt. Um einen Benutzer z.B. "a" via 1. Betriebssystem unterscheiden zu können vom Benutzer "a" via 2.System, nenne ich Ihn im ersten Fall "a1", im zweiten Fall "a2" (je nach Name der Parttion des Betriebssystems).

Wenn der Platz es zuläßt, befinden sich auch innerhalb des Ordners "a1" die Daten eines virtuellen Systems (z.B. VirtualBox VMs).

Wenn der Platz für /home zu gering ist, kann man komplett mit /home umziehen wie im Folgenden gezeigt. Neues Ziel soll hier z.B. die Partition /dev/sda6 sein.

Temporäre Einbindung

Eine temporäre Einbindung ist erforderlich um das User-Profil kopieren zu können. Folgende Schritte sind nötig.

su
cd /mnt
mkdir sda6

mount -t auto /dev/sda6 sda6
cp -rf /home/m/ /mnt/sda6/         r=recursiv, f=alles überschreiben

cd /mnt/sda6/                      da mit root kopiert -> Benutzer root
chown -Rc m:m m                    R=recursiv, c=bei Änd. -> verbose  
chmod 750 m                        Ordner nur von m einsehbar

Nun existiert von dem User-Ordner m (m wie Maintenance) eine Kopie. Aber sämtliche Änderungen werden noch ins alte /home/m Verzeichnis abgelegt und nach dem Neustart ist der kopierte Ordner (unter /mnt/homesda6/m) nicht mehr eingebunden.

Dauerhafte Einbindung des neuen Home-Verzeichnis

Nun kann man den absoluten Pfad mounten. Sollte sich im BIOS die Bootreichenfolge ändern oder die Platten anders verkabelt werden oder durch Partitionierung eine Partition dazu kommen, ändern sich auch die Pfade zur Partition.

Die empfohlene Alternative ist, mit dem sog. Volume-Label zu arbeiten, statt der Pfade. Dieses Volume-Label kann man dann in /etc/fstab eintragen und beim nächsten Start wird das neue Home-Verzeichnis verwendet.

Anbei ein konkretes Beispiel wie ich das bei einem Gigabyte GA-F2 85XN gemacht habe. Die Swap-Partition habe ich auf die SSD verschoben. /home ist verschoben worden.

su
blkid /dev/sda6                   die neue Home Partition
/dev/sda6: UUID="a411a90d-f57a-492d-8b70-d89d3539193a" TYPE="ext4"

blkid /dev/sda5                   eine unerwünschte Swap-Partition auf der langsamen HD 
/dev/sda5: UUID="d3d9be98-7ce5-4495-bb7a-62ad307f208e" TYPE="swap"

blkid /dev/sdc2                   neue Swap-Partition auf der SSD 
/dev/sdc2: UUID="4e41c97b-105c-43ae-a07f-e831f5e8b3be" TYPE="swap"

nano /etc/fstab                   Ergebnis nach dem editieren

# ... 
#           
# / was on /dev/sdc4 during installation
UUID=dc50cc85-722f-47eb-b5b0-a1055c8e64d1 /        ext4    errors=remount-ro 0     1

# swap was on /dev/sdc2 during installation, nun SSD
UUID=4e41c97b-105c-43ae-a07f-e831f5e8b3be none     swap    sw              0       0

# /home on WD20EARS
UUID=a411a90d-f57a-492d-8b70-d89d3539193a /home    ext4    defaults        0       2

# /home/hd2
UUID=2e755ef5-16b9-40ad-b12e-2b1ef3afb526 /home/hd2 ext4   defaults        0       2

# dvd
/dev/sr0                       /media/cdrom0   udf,iso9660 user,noauto     0       0

Die 6 Spalten von fstab:

Bzgl. fstab siehe z.B. ubuntuusers.de oder archlinux.de.

Nach dem Neustart wird /home von der neuen Partition verwendet. Das alte /home-Verzeichnis ist nicht mehr zugreifbar.

su
shutdown -r 0                -r = reboot unter DEB9 nach 0 min = ohne abzuwarten 

oder alternativ kann mit mount -a fstab neu eingelesen werden.

Sollte genug Platz auf dem /home-Verzeichnis der SSD sein, ist der oben genannte Schritt (Umzug von /home) nicht nötig. Stattdessen kann man lediglich einen weiteren Ordner für die User-Daten anlegen, welche nicht auf die SSD sollen, sondern auf der HD verbleiben können (z.B. Musik, Videos, Dokumentation, Datenblätter, eigene Dateien, Programme zur Installation, etc.). Im obigen Beispiel ist es Ordner /home/hd2.

Tatsächliche Partitionierung auf dem ASRock B450

Wie das nun folgende Beispiel zeigt, ist auch hier genügend Platz auf /home ca. 403 GB.

su
fdisk -l
bash: fdisk: command not found                   unter DEB 10 ist der Befehl versteckt
whereis fdisk
fdisk: /usr/sbin/fdisk /usr/share/man/man8/fdisk.8.gz
usr/sbin/fdisk -l
Disk /dev/nvme0n1: 447.1 GiB, 480103981056 bytes, 937703088 sectors
Disk model: Force MP510                             
...
Device         Boot    Start       End   Sectors   Size Id Type
/dev/nvme0n1p1          2048  58593279  58591232    28G 83 Linux      / = System
/dev/nvme0n1p2      58595326 937701375 879106050 419.2G  5 Extended
/dev/nvme0n1p5      58595328  92008447  33413120    16G 82 Linux      swap
/dev/nvme0n1p6      92010496 937701375 845690880 403.3G 83 Linux      /home

Disk /dev/sda: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: ST3000VN000-1HJ1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: BD64DA0B-0088-441C-9B59-DC9CC6611431

Device          Start        End    Sectors  Size Type
/dev/sda1        2048 5818589183 5818587136  2.7T Microsoft basic data
/dev/sda3  5818589184 5826977791    8388608    4G Linux swap
/dev/sda2  5826977792 5860532223   33554432   16G EFI System


cat /sys/block/sda/queue/physical_block_size 
4096
cat /sys/block/sda/queue/logical_block_size 
512

Wie man sieht, müsste man auf der SSD mit gparted (gebootet von z.B. einem USB-Stick) von der Partition /dev/nvme0n1p6 28 GB abzwacken, um auf der extended Partition /dev/nvme0n1p2 Platz für eine weitere Installation zu haben.

Die HD wurde bereits verwendet und Partitioniert. Zudem fällt auf dass die Sektoren aus 512 Byte großen logischen Blöcken bestehen, obwohl 4096 Byte große Blöcke für die HD optimaler wären...

Dass galculator 2.1.4 nicht rechnen kann, hat mich überrascht...
3000592982016 bytes / 5860533168 sectors = 51,2 Bytes/Sector
qalculate & speedcrunch kommen zumindest korrekt auf 512 Bytes/Sektor.

Die Reihenfolge der Partitionen habe ich geändert um besser den Aufbau zu sehen. Die Grenzen (Anfang & Ende einer Partition) gehen bereits konform mit einer 4k-Block-Aufteilung.

Beispiel: Das Ende der 1. Partition ist beispielsweise durch 8 teilbar.
z.B. (5818589183 + 1) / (4096/512) = 727.323.648
Entsprechend thomas-krenn.com Partition Alignment detailed explanation, gibt es folgende Empfehlung:

Entsprechend ist zu überprüfen ob durch 216 / 29 = 27 = 128 teilbar ist, was in diesem Beispiel immer geklappt hat.

Vor irgendwelchen Änderungen an einer Platte sollte man sicherstellen dass das Betriebssystem nicht darauf zugreift. Z.B. mit mount gucken und evtl. unmounten.

su
mount | grep -e "/dev/" 
...
/dev/nvme0n1p1 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/nvme0n1p6 on /home type ext4 (rw,relatime)
/dev/sda1 on /mnt/sda1 type ext4 (rw,relatime,stripe=32752)

nano /etc/fstab   keine Einträge gefunden (wären auch angezeigt...)

umount /mnt/sda1

Verschiedene Möglichkeiten zu Partitionieren

In diesem Fall ist es zwar nicht nötig, da die Grenzen selbst durch 128 teilbar sind, aber man kann den Fall ja trotzdem durchspielen...

Da remote das graphische Gparted nicht zur Verfügung steht, greife ich stattdessen auf die etwas unbequemere parted zu, welches Gparted im Hintergrund ebenso nutzt. Anleitungen findet man z.B. unter
tecmint.com   (parted to create resize partitions) oder
linuxhint.com   (parted, lshw)

Partitionieren mit parted

su
whereis parted                       ab DEB 10 nicht mehr direkt erreichbar
parted: /usr/sbin/parted /usr/share/man/man8/parted.8.gz
/usr/sbin/parted /dev/sda
... Using /dev/sda

print                             gibt eine Übersicht der gewählten Platte
Model: ATA ST3000VN000-1HJ1 (scsi)       - ist es die Richtige?
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name     Flags
 1      1049kB  2979GB  2979GB  ext4            primary  msftdata
 3      2979GB  2983GB  4295MB  linux-swap(v1)
 2      2983GB  3001GB  17.2GB  ext4                     boot, esp

unit mib                          Default ist völlig schwachsinnig...
                                  1 MB := 10002 Bytes -> 1 MiB = 220
rm 1                              löscht alle 3 Partitionen
rm 2
rm 3                              oder GPT-label erzeugen löscht auch alles

mklabel gpt                       um eine Platte mit GPT-Bootsektor zu erzeugen...                                                       
Warning: The existing disk label on /dev/sda will be destroyed and all data...
Do you want to continue?   Yes/No? Y 

mkpart                            1. Partition per Dialog erzeugen                                             
Partition name?  []? bootsys                                                    
File system type?  [ext2]? ext4                                           
Start? 1                          1 MB = 2048 x 512 Bytes                                           
End? 20481                        20 GB = 20 x 1024 +1   

set                               setzt boot-flag                                          
Partition number? 1                                                       
Flag to Invert? boot                                                      
New state?  [on]/off? on 

Nun ist die erste Partition erzeugt. Die Bezeichnung ext4 ist nur ein Merker. Später ist diese Partition noch mit mkfs.ext4 /dev/sda3 zu formatieren.

mkpart swap linux-swap 20482 36866    2. Partition (swap) erzeugen                     
                                         16 GB = 16 x 1024 + 20482

mkpart home ext4 36867 2861588        erzeugt 3. Partition
                                
print                                    Ergebnis der Anstrengungen                                                            
Model: ATA ST3000VN000-1HJ1 (scsi)
Disk /dev/sda: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start     End         Size        File system     Name     Flags
 1      1.00MiB   20481MiB    20480MiB    ext4            bootsys     boot, esp
 2      20482MiB  36866MiB    16384MiB    linux-swap(v1)  swap
 3      36867MiB  2861588MiB  2824721MiB  ext4            home

quit                                     parted beenden

/usr/sbin/mkfs.ext4 /dev/sda3            ab DEB 10 versteckt
...
Creating filesystem with 723128576 4k blocks and 180789248 inodes
...

Siehe:
archlinux.org   beschreibt gut das Thema (EFI Partition, Alignment, dual boot, etc.)
linuxhint.com   (reicht für die meisten Probleme...)
computerhope.com   parted Befehlsübersicht welche mit der heutigen parted Version 3.2 nicht mehr so ganz übereinstimmt...
man7.org   man parted Kopie... nur wofür?

>Partitionieren mit fdisk

Auf ähnliche Art und Weise kann ich mit fdisk partitionieren.

/usr/sbin/fdisk /dev/sda                 ab DEB 10 versteckt

p                                        überprüfen ob es die richtige Platte ist
Disk /dev/sda: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Sector size (logical/physical): 512 bytes / 4096 bytes
Disklabel type: gpt
...
Device        Start        End    Sectors  Size Type
/dev/sda1      2048   41945087   41943040   20G EFI System
/dev/sda2  41947136   75501567   33554432   16G Linux swap
/dev/sda3  75503616 5860532223 5785028608  2.7T Linux filesystem

d                                        delete partition 
Partition number (1-3, default 3): 3
Partition 3 has been deleted.

g                                        oder löscht komplette Platte 
Created a new GPT disklabel (GUID: AD8284F8-1E28-7F45-B543-74827C455DAD).

n
Partition number (1-128, default 1): Return 
First sector (2048-5860533134, default 2048): Return  
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-5860533134, default 5860533134): +20G       

Created a new partition 1 of type 'Linux filesystem' and of size 20 GiB.
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: Y
The signature will be removed by a write command.

n
Partition number (2-128, default 2): Return 
First sector (41945088-5860533134, default 41945088): Return 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (41945088-5860533134, default 5860533134): +16G
Created a new partition 2 of type 'Linux filesystem' and of size 16 GiB.

n   
Partition number (3-128, default 3): Return 
First sector (75499520-5860533134, default 75499520): Return 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (75499520-5860533134, default 5860533134): Return 
Created a new partition 3 of type 'Linux filesystem' and of size 2.7 TiB.

p                                        Konfiguration überprüfen   
Disk /dev/sda: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Sector size (logical/physical): 512 bytes / 4096 bytes
Disklabel type: gpt
...
Device        Start        End    Sectors  Size Type
/dev/sda1      2048   41945087   41943040   20G Linux filesystem
/dev/sda2  41945088   75499519   33554432   16G Linux filesystem
/dev/sda3  75499520 5860533134 5785033615  2.7T Linux filesystem

Im Vergleich zu parted war die Partitionierung einfacher und ist noch nicht in den Bootsektor geschrieben.
D.h. Sollte ich nun mit q das Programm beenden, war das nur eine Fingerübung und hätte keine Konsequenzen.

w                                        Schreibt neue Konfiguration  
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

/usr/sbin/fdisk /dev/sda                 erneuter Aufruf, da ich noch etwas vergaß...

Welcome to fdisk (util-linux 2.33.1).
...
t
Partition number (1-3, default 3): 2
Partition type (type L to list all types): L
 1 EFI System                     C12A7328-F81F-11D2-BA4B-00A0C93EC93B
19 Linux swap                     0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
20 Linux filesystem               0FC63DAF-8483-4772-8E79-3D69D8477DE4
28 Linux home                     933AC7E1-2EB4-4F13-B844-0E14E2AEF915
...
19                                      für swap (über 80 Typen stehen zur Verfügung...)

p                                       kleine Überprüfung
...
Device        Start        End    Sectors  Size Type
/dev/sda1      2048   41945087   41943040   20G Linux filesystem
/dev/sda2  41945088   75499519   33554432   16G Linux swap
/dev/sda3  75499520 5860533134 5785033615  2.7T Linux filesystem

w                                       fdisk Änderung schreiben

/usr/sbin/mkfs.ext4 /dev/sda3           letzte Partition formatieren
...
Found a atari partition table in /dev/sda3 ist kurios und ist letzte Chance abzubrechen...
Proceed anyway? (y,N) y
...
/usr/sbin/mkfs.ext4 /dev/sda1           nicht nötig, da während Installation überschrieben  

Siehe:
geekpeek.net   Partitionen verändern mit fdisk & resize2fs von 2013
pcwelt.de   Richtig partitionieren unter Linux

Die oben genannten 512 Byte Sektor-Grenzen sind alle durch 128 Teilbar -> 64 kB-Grenzen,
bis auf die letzte Zahl 5785033615 / 128 = 45195575,1...

Das Thema mind. 260 MB fat 32 EFI Partition habe ich ignoriert, da ich kein Windows auf einer System-Partition habe, sondern nur virtuell.

fdisk hat im Gegensatz zu parted weniger Platz zwischen den Partitionen gelassen.

Richtige Blockgröße einstellen

Egal welches Tool ich verwende, immer scheinen die logischen Sektoren 512 Bytes groß zu sein und die physikalischen 4096 Bytes. Es gibt auch etliche Befehle, die scheinbar ein/kein Problem aufweisen...

cat /sys/block/sda/queue/*_block_size
512
4096
lsblk -rbno SIZE /dev/sda1                Print device size in bytes
21474836480
su
/usr/sbin/blockdev --getbsz /dev/sda1     Print blocksize in bytes
4096                                      4096 für /dev/sda3
/usr/sbin/blockdev --getpbsz /dev/sda1    Get physical block (sector) size.
4096                                      4096 für /dev/sda3
/usr/sbin/blockdev --getss /dev/sda1      Print logical sector size in bytes – usually 512.
512                                       512  für /dev/sda3
/usr/sbin/blockdev --getsize64 /dev/sda1  Print device size in bytes  
21474836480                               21474836480/2^30 = 20 GB
/usr/sbin/tune2fs -l /dev/sda3 | grep -e "Block size"
Block size:               4096            4096 auch für /dev/sda1

mount -t auto /dev/sda3 /mnt/sda3
cd /mnt/sda3
stat -f .
  File: "."
    ID: 99e6a5d078a06a1 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 711515979  Free: 711493444  Available: 675332888
Inodes: Total: 180789248  Free: 180789237

...aber glücklicherweise fand ich folgenden Befehl der Unterschiede aufzeigt.

su
/usr/sbin/blockdev --report
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0    480103981056   /dev/nvme0n1
rw   256   512  4096       2048     29998710784   /dev/nvme0n1p1
rw   256   512  1024   58595326            1024   /dev/nvme0n1p2
rw   256   512  4096   58595328     17107517440   /dev/nvme0n1p5
rw   256   512  4096   92010496    432993730560   /dev/nvme0n1p6
rw   256   512  4096          0   3000592982016   /dev/sda
rw   256   512  4096       2048     21474836480   /dev/sda1
rw   256   512  4096   41945088     17179869184   /dev/sda2
rw   256   512   512   75499520   2961937210880   /dev/sda3

Also Partitionen erneut ausgeworfen umount;
mit fdisk Platte überprüft (p); 3. Partition gelöscht (d),
3. Partition neu erstellt (n 5860533119 statt default = 5860533134);
und zurück geschrieben (w);
und danach via mkfs.ext4 formatiert.

Nun kommt auch mit blockdev ein vernünftiges Ergebnis heraus.

Siehe:
stackexchange.com   determine size of block device
stackexchange.com   how to set blocksize
linuxintro.org   block device basics
fibrevillage.com   block device basics

HD Einbindung beim ASRock B450

Beim ASRock B450 habe ich eine genügend große SSD eingebaut, sodaß das /home-Verzeichnis auf der SSD verbleiben kann. Lediglich die übrigen Daten (Musik, etc.) landen auf der HD, welche noch eingebunden werden muss.

su
cd /mnt/
mkdir sda3                         temporären Ordner anlegen
/usr/sbin/blkid /dev/sda3
/dev/sda3: UUID="cff61545-fb65-48ff-b7c6-c9d41e0badb2" TYPE="ext4" PARTUUID="c1b663b8-5da3-bd4a-842a-62de969f2c11"

nano /etc/fstab                 und folgende Zeile angefügt

# sda3 einbinden
UUID=cff61545-fb65-48ff-b7c6-c9d41e0badb2 /mnt/sda3       ext4    rw              2       2

systemctl reboot

Nach dem Neustart steht unter /mnt/sda3 die 2,6 TB große Partition zur Verfügung. Damit nicht nur root diese Partition nutzen kann, sind noch Ordner für die jeweiligen Benutzer erforderlich.

df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/nvme0n1p1   28G  8.1G   18G  32% /
/dev/nvme0n1p6  396G   24G  353G   7% /home
/dev/sda3       2.7T   89M  2.6T   1% /mnt/sda3

su
mkdir /mnt/sda3/a0
chown a1:a a0                       Ordner für Benutzer a1, a2, ...
mkdir /mnt/sda3/b0
chown b1:b b0                       Ordner für Benutzer b1, b2, ...
chmod o-rwx *                       damit jeder nur in seine Ordner gucken kann

ls -la                              Überprüfung
total 32
drwxr-xr-x 5 root root  4096 Aug  6 18:54 .
drwxr-xr-x 4 root root  4096 Aug  4 23:03 ..
drwxr-x--- 2 a1   a     4096 Aug  6 18:53 a0
drwxr-x--- 2 b1   b     4096 Aug  6 18:54 b0
drwx------ 2 root root 16384 Aug  4 23:49 lost+found

Nun sollte das Thema Partitionierung und Einbindung weiterer Platten, um sie den Benutzern zugänglich zu machen, abgeschlossen sein...

Die Befehle chown und chmod sind in der Benutzerverwaltung ein wenig mehr erklärt.