linux:partitionierung

Partitionierung

Wenn man einen neuen Datenträger zu seinem (Linux-)System hinzufügen möchte (z. B. eine 2 Festplatte oder eine externe USB-Festplatte) muß dieser Datenträger zuerst partitioniert und formatiert werden.

Die Einteilung des verfügbaren Festplattenplatzes hängt von der Verwendung des Systems ab. Hierzu sollten Sie einige Dinge beachten:

Für den Start des Einzelbenutzermodus (single-user) müssen /root, /bin, /sbin, /etc, /lib und /dev auf der root (/)-Partition vorhanden sein.

:!: Jede Partition, auf die die Benutzer des Systems Schreibzugriff haben, sollte auf einer eigenen Partition liegen. Die Problematik wird in dem Artikel The mysteriously persistently exploitable program explained aus der Sicherheitsperspektive beleuchtet.

Mindestens die Bereiche /home und /tmp bzw. /var/tmp sollten eine extra Partition darstellen. Dies verhindert einerseits, dass ein Benutzer das Root-Dateisystem (/) unbenutzbar macht und das gesamte System in einen instabilen Zustand bringt und andererseits die oben im Artikel genannten Hardlink-Angriffe. Es bleibt natürlich ein gewisser Platz (meist fünf Prozent, dieser Wert kann mit tune2fs, Parameter -m [Zahl] Prozent oder Anz. reserv. Blöcke mit -r [zahl] angepasst werden) für den Administrator (root) reserviert, doch kann so anderen Benutzern das Arbeiten mit dem System unmöglich gemacht werden. Zudem schreiben manche Dienste als root, z.B. das Paketlogging der Firewall. Mit der Einrichtung von Disk-Quotas (Platzbeschränkungen) für die Benutzer kann man die Sicherheit erhöhen.

Es sollte auch für jeden Bereich, der automatisch mit Daten gefüllt wird (beispielsweise /var und hier insbesondere das Verzeichnis /var/log), eine eigene Partition vorgesehen werden. Auf Debian-Systemen sollte /var großzügiger bemessen werden, da unter /var/cache/apt/archives Pakete temporär abgelegt werden, wenn die Installation über das Netz erfolgt. Weiterhin finden sich unter /var/lib/dpkg viele Dateien, die für das Paketmanagement benötigt werden.

Wenn Software installiert werden soll, die nicht in der Debian-Distribution enthalten ist, sollten auch diese Bereiche auf eigenen Partitionen liegen; diese werden dann bei einer Neuinstallation des Systems nicht überschrieben. Nach dem „Filesystem Hierarchy Standard“ (FHS) sind dies /opt oder /usr/local.

Mountpoint minimale Größe
/ je nach System: bei minimal Servern kann wenig reichen bei Desktops sind 5 GB meist minimum
/usr 2000 MB, wird manchmal auch schreibgeschützt eingehangen
/var hier schreiben viele Dienste z.B. eMail- oder Fax-Server Daten rein, also genug Platz lassen
/home
/tmp > 500 MB, hier landen bei Desktops auch mal DVD-Images von Brennprogrammen, also genug Platz lassen

Zusätzlich wird dann noch die SWAP-Partition angelegt.

Zum Partitionieren gibt es unter Linux viele Programme. Auch das altbekannte fdisk (nicht so leicht zu bedienen, dafür immer vorhanden) steht zur Verfügung, auch wenn es nicht mit GPT-Partionierungen funktioniert).

cfdisk ist menugeführt und kann ohne Kenntnis spezieller Befehle bedient werden, kann allerding nicht mit GPT-Partionierung benutzt werden (also nicht bei Festplatten/Volumes über 2 TB), dafür muss z. B. gparted/parted benutzt werden.

cfdisk wird mit dem Gerätenamen der entsprechenden Festplatte, die partitioniert werden soll, als Argument aufgerufen. Wird kein Gerätename angegeben wird /dev/hda angenommen.

Hat man cfdisk aufgerufen, wird das momentane Partitionierungsschema angezeigt. Im unteren Bereich habe ich eine Auswahl an möglichen Befehlen. Besteht noch unpartitionierter Platz, kann ich darin durch auswählen des unpartitionierten Platzes per Pfeil-auf/Pfeil-ab-Taste den unpartitionierten Bereich erst auswählen und dann über die Pfeil-links/Pfeil-rechts-Tasten auf „new“ gehen um eine neue Partition zu erstellen.

Sofern noch nicht alle primären Partitionen vergeben sind, werde ich dann gefragt, ob ich eine primäre oder eine logische Partition anlegen möchte (auswahl mit Pfeiltasten) und werde dann nach der Größe der Partition gefragt. Steht das hinterlegte Feld oben auf einer bereits angelegten Partition, verändern sich unten die möglichen Kommandos. Hier kann ich eine Partition löschen, ein Boot-Flag setzen oder den Typ der Partition verändern. Den Typ muß ich beispielsweise dann verändern, wenn ich statt einer normalen Linuxpartition eine Swap-Partition oder eine Partition mit einem Fat-Dateisystem erstellen möchte. Wenn ich „Type“ auswähle, bekomme ich eine Liste mit zahlreichen Dateisystemtypen. Die 82 steht dabei beispielsweise für ein Swap-Dateisystem. Nachdem ich den Typ durch die angegebene Zahl ausgewählt habe, gelange ich wieder in meine Partitionsübersicht zurück.

Die Änderungen werden übrigens nicht sofort auf die Festplatte geschrieben. Dies erledigt erst der Befehl „Write“ der ebenfalls per Pfeiltaste erreichbar ist. Mit „Quit“ wird cfdisk wieder verlassen.

parted /dev/sda

Hier eine Befehlsfolge um auf /dev/sda eine primäre Partition (vom Anfang bis zum letzten Sektor) incl. LVM-Typ und Boot-Flag zu erzeugen.

mklabel gpt
mkpart primary ext4 2048s -1s
set 1 lvm on
set 1 boot on
print
quit

Hier eine Befehlsfolge um auf /dev/sda eine primäre Partition (vom Anfang bis zum letzten Sektor) incl. Partition für Software-RAID zu erzeugen.

parted --align optimal /dev/sda
(parted) mklabel gpt                                                      
(parted) mkpart primary ext4 2048s -1s                                       
Warning: You requested a partition from 1049kB to 3001GB.                 
The closest location we can manage is 1049kB to 3001GB.
Is this still acceptable to you?
Yes/No? Y                                                                 
(parted) set 1 raid on                                                   
(parted) quit                                    

partition alignment

Wenn die Partitionen nicht aber den Grenzen ausgerichtet ist, die das darunter liegende Speichersystem (z.B. eine Festplatte oder ein RAID-Array) hat dann kommt es zu zusätzlichen Schreib-/Lesevorgängen die die Geschwindigkeit mindern. Besonders bei Raid5/6 wo die Partitätsinformationen gelesen werden müssen führt das zu Einbußen.

der einfachste Weg

Einfach mit optimalem alignment starten:
parted --align optimal /dev/sda

oder/und mit Prozentwerten arbeiten (parted ermittelt dann selbst die besten Werte):

mkpart primary ext4 0% 100%

Es geht aber auch per Hand:

parted /dev/DEVICE
(parted) align-check                                                      
alignment type(min/opt)  [optimal]/minimal?                               
Partition number? 1                                                       
1 aligned

Beim Anlegen von Partitionen warnt parted davor Partitionen ohne korrektes alignment anzulegen:

Warning: The resulting partition is not properly aligned for best performance.

Wie legt man also eine korrekt ausgerichtete Partition an?

Zuerst einmal sollte die erste Partition bei einer durch 8 teilbaren Sektorzahl anfangen, in der Praxis hat sich 1MiB bzw. 2048 Sektoren durchgesetzt 1).

(parted) mkpart primary ext4 2048s -1s

Bei diesem Befehl kommt immer die Warnung, weil der letzte Sektor nicht korrekt ausgerichtet ist (-1s bedeutet der letzte verfügbare Sektor). Allerdings ist das nicht wirklich ein Problem, da es sich nur um den letzten Sektor handelt.

Wenn man wirklich den letzten Sektor auch noch ausrichten möchte dann muss ein Taschenrechner her:

  1. Gesamtanzahl der Sektoren anzeigen (wir legen eine nicht ordentlich ausgerichtete Partition mit maximaler Größe an, wird später gelöscht):
    (parted) mkpart primary ext4 1s -1s
    Warning: You requested a partition from 512B to 4993GB.                   
    The closest location we can manage is 17,4kB to 4993GB.
    Is this still acceptable to you?
    Yes/No? Yes                                                               
    Warning: The resulting partition is not properly aligned for best performance.
    Ignore/Cancel? Ignore
    (parted) unit s
    (parted) print
    Model: Adaptec DAS (scsi)
    Disk /dev/sdd: 9751715840s
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    
    Number  Start  End          Size         File system  Name     Flags
     1      34s    9751715806s  9751715773s               primary

    Es sind also ingesamt 9751715773 nutzbare Sektoren verfügbar.

  2. Rechenaufgabe:
    1. Gesamtgröße (9751715773) - Anfang (2048) = 9751713725 verbleibende Sektoren (wenn der freie Anfangsbereich abgezogen wird)
    2. Vielfaches von 2048 suchen (Ergebnis ist 17165950): verbleibende Sektoren (9751713725) / 2048 = Vielfaches (4761578,967285156)
    3. Gesamtgröße der Partition abzüglich des „krummen“ Restes: 4761578 * 2048 = 9751711744 Sektoren
    4. Ende berechnen: Größe der Partition (9751711744) + freie Anfangssektoren (2048) = vorläufiger End-Sektor (9751713792) Sektoren
    5. von den 9751713792 Sektoren ziehen wir noch einen Sektor ab, da der erste Sektor 0 schon mitzählt: Also muss eine korrekt ausgerichtete Partition genau bei Sektor 9751713791 enden (Schreibweise: 9751713791s)
  3. Erstellen wir die korrekte Partition 2):
    (parted) mkpart primary ext4 2048s 9751713791s
    (parted) unit s                                                           
    (parted) print free                                                       
    Model: Adaptec DAS (scsi)
    Disk /dev/sdd: 9751715840s
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    
    Number  Start        End          Size         File system  Name     Flags
            34s          2047s        2014s        Free Space
     1      2048s        9751713791s  9751711744s  ext4         primary
            9751713792s  9751715806s  2015s        Free Space
Sonderfall RAID-Array

Raid bei Partition 1 aktivieren:

set 1 raid on
  • Partionen sollten bei einem Vielfachen der stripe-Größe anfangen
  • stride-size/chunk size

partition erweitern

Partition (hier Nr. 1) auf 100% erweitern:

parted /dev/xvdf resizepart 1 100%

Die grafischen Oberflächen gparted und qtparted basieren auf parted und sind sehr brauchbare Programme.

:!: TIP: GParted (Partitionierungs-) LiveCD)

Siehe auch: Swap @ubuntuusers.

Eine beliebige Partition (Beispielangabe /dev/SWAP) kann mit

sudo mkswap /dev/SWAP 

zur Auslagerungspartition markiert werden.

Anschließend kann die Auslagerungsdatei

  • sofort aktiviert werden (gilt bis zum Neustart):
    sudo swapon /dev/SWAP
  • oder für die dauerhafte Nutzung in der Datei /etc/fstab aktiviert werden:
    /dev/SWAP none swap sw 0 0
  1. Image erzeugen (hier: Größe 1G):
    sudo dd if=/dev/zero of=/swapfile.img bs=1024000 count=1024
  2. Signatur für die Auslagerungsdatei erzeugen:
    mkswap /swapfile.img
  3. Dateirechte setzen:
    sudo chown root /swapfile.img
    sudo chmod 600 /swapfile.img
  4. Beispielausgabe:
    mkswap: /swapfile.img: warning: don't erase bootbits sectors
            on whole disk. Use -f to force.
    Setting up swapspace version 1, size = 1048576 KiB
    no label, UUID=eeafde5c-477e-4a63-b656-83cc94abfadd
  5. Anschließend kann die Auslagerungsdatei
    • sofort aktiviert werden (gilt bis zum Neustart):
      sudo swapon /swapfile.img
    • oder für die dauerhafte Nutzung in der Datei /etc/fstab aktiviert werden:
      /swapfile.img none swap sw 0 0

Fehler: Der Zugriff auf Partitionen klappt nicht mehr, gparted zeigt beim Aufruf aus dem Terminal heraus diese Fehlermeldung:

The primary GPT table is corrupt, but the backup appears OK, so that will be used

Das bedeutet die GPT-Partitionstabelle ist beschädigt, glücklichweise kann gdisk in solchen Fällen gut helfen. Zuerst starten wir gdisk mit der richtigen Ferstplatte (hier /dev/sda), dann lassen wir uns mit Taste „p“ die Partitionstabelle anzeigen und schreiben mit „w“ eine neue Tabelle. Wenn die erkannte(n) Partion(en) nicht korrekt erkannt wurde(n) dann besser nichts schreiben sondern gleich mit q beenden (und andere Hilfe suchen).

sudo gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.1

Caution! After loading partitions, the CRC doesn't check out!
Warning! Main partition table CRC mismatch! Loaded backup partition table
instead of main partition table!

Warning! One or more CRCs don't match. You should repair the disk!

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: damaged

****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************

Command (? for help): p
Disk /dev/sdj: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4CECBE99-7919-4909-9686-D5DEE416376E
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      5860533134   2.7 TiB     0700  primary

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT).
The operation has completed successfully.

1)
Windows XP hat früher Partitionen bei Sektor 63 beginnen lassen was eine schlechte Idee ist
2)
vorher die alte Partion löschen mit
(parted) rm 1
oder eine neue Partionstabelle anlegen :!: Achtung löscht ALLE Partionen dieser Platte:
(parted) mklabel msdos
oder
(parted) mklabel gpt