1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Partitionen anlegen

Festplatten speichern Daten in linear adressierbaren Blöcken zu je 512 Oktetten und erlauben so einen wahlfreien Zugriff. Daher nennt man sie auch Blockgeräte. Solche Speichermedien kann man wiederum in Partitionen unterteilen oder zu logischen Volumen zusammenfassen.

Blockgeräte untersuchen

Der Kernel stellt Blockgeräte unter /sys/class/block zur Verfügung und der udev(7) Daemon legt dynamisch die Gerätedateien unter /dev an. Die erste Festplatte heißt /dev/sda, die Zweite /dev/sdb und so fort. Partitionen bekommen noch ihre Nummer angehängt. Eine Übersicht der verfügbaren Blockgeräte liefert das Programm lsblk.

lsblk
NAME     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda        8:0    0 238,5G  0 disk
├─sda1     8:1    0   512M  0 part  /boot/efi
├─sda2     8:3    0 194,5G  0 part  /
└─sda3     8:2    0     8G  0 part  [SWAP]

Das Programm skdump aus dem Paket Paket libatasmart-bin liest die SMART-Werte der Festplatte aus.

skdump /dev/sda
Device: sat16:/dev/sda
SMART Disk Health Good: yes
…

Das Programm hdparm verwendet SATA-Funktionen, um die Leistung zu messen und Einstellungen zu optimieren.

hdparm -Tt /dev/sda
/dev/sda:
 Timing cached reads:       2942 MB in  2.00 seconds = 1471.23 MB/sec
 Timing buffered disk reads: 400 MB in  3.00 seconds =  133.30 MB/sec

Virtuelles Blockgerät erzeugen

Zu Testzwecken kann auch eine Datei als virtuelles Blockgerät (loopback-device) dienen. Das folgende Beispiel erzeugt eine 256 Megabyte große Datei, registriert diese als virtuelles Blockgerät, erzeugt darin eine Partitionstabelle und in der primären Partition ein Dateisystem, welches schlußendlich eingehängt wird.

dd if=/dev/zero of=disk.img bs=1M count=256
losetup         /dev/loop0 disk.img
parted --script /dev/loop0 mktable msdos mkpart primary 2048s 100%
mkfs.ext4       /dev/loop0p1
mount           /dev/loop0p1 /mnt
lsblk
NAME                MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0                 7:0    0   256M  0 loop  
└─loop0p1           259:4    0   255M  0 part  /mnt

Festplatte partitionieren

Der verfügbare Speicherplatz wird in Partitionen für Bootloader, Betriebssystem und Auslagerungsspeicher aufgeteilt. Zwecks Abwärtskompatibilität enthält der erste Block einen MBR. Rechner mit EFI Firmware bevorzugen eine GUID-Partitionstabelle (GPT) und eine Systempartition (ESP) mit FAT-Dateisystem. Die folgenden 32 Blöcke beschreiben bis zu 128 Partitionen. Die erste Partition sollte bei Block 2048 (1 Megabyte) beginnen.

Partitionierung auf EFI-Systemen
GPT




/dev/sda1
ESP
▤▤▤□
□□□□
□□□□
□□□□
/dev/sda2
Root
▤▤▤▤▤▤▤▤
▤▤▤□□□□□
□□□□□□□□
□□□□□□□□
/dev/sda3
Swap
□□□□
□□□□
□□□□
□□□□

Das Programm fdisk kann Partitionstabellen erzeugen, anzeigen und ändern.

fdisk -l /dev/sda
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050624   512.0 MiB   EF00  esp
   2         1052672       470898687   194.5 GiB   8300  root
   3       470898688       500117503     8.0 GiB   8200  swap

Das Programm parted kann die Größe von Dateisystemen ändern und Partitionen verschieben.

parted /dev/sda unit MiB print
Number  Start     End        Size       File system  Name    Flags
 1      1,00MiB   513MiB     512MiB     fat16        esp     boot, esp
 2      45057MiB  244198MiB  199141MiB               root
 3      514MiB    8706MiB    8192MiB                 swap

Nach Änderung an der Partitionstabelle sollte man den Kernel darüber informieren.

partprobe -s
/dev/sda: gpt partitions 1 2 3

Partition verschlüsseln

Cryptsetup verwendet den Device Mapper des Linux-Kernels für eine transparente Verschlüsselung von Blockgeräten. LUKS definiert eine Datenstruktur für die Ablage von Metadaten wie Algorithmus, Streuverfahren, Länge und Betriebsmodus sowie 8 Plätze für den mit verschiedenen Passphrasen geschützten Hauptschlüssel.

Partitionierung mit Verschlüsselung
GPT




/dev/sda1
ESP
▤▤▤□
□□□□
□□□□
□□□□
/dev/sda2
LUKS




/dev/mapper/root
▤▤▤▤▤▤▤▤
▤▤▤□□□□□
□□□□□□□□
□□□□□□□□
/dev/sda3
/dev/mapper/swap
□□□□
□□□□
□□□□
□□□□

Beim Start des Rechners liest cryptdisks_start(6) die Konfigurationsdatei /etc/crypttab, fragt den Benutzer nach der Passphrase, entsperrt die aufgeführten Partitionen und stellt sie als Blockgerät unter /dev/mapper/Name zur Verfügung.

/etc/crypttab
# Name Device Keyfile Options root /dev/sda2 none luks,discard swap /dev/sda3 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

Diese Namen verwenden wir auch in der Dateisystemtabelle.

/etc/fstab
# What Where Type Options Dump Pass /dev/sda1 /boot/efi vfat umask=0077 0 0 /dev/mapper/root / btrfs noatime 0 0 /dev/mapper/swap none swap sw 0 0
Option Beschreibung
Verschlüsselung
cipher=Algorithm Verschlüsselungs-Algorithmus
size=Bits Bitlänge des Schlüssels
hash=Algorithm Streufunktion für Passwörter
offset=Blocks Versatz innerhalb des Volumens (512-Oktett-Blöcke)
skip=Blocks Versatz innerhalb der verschlüsselten Daten
LUKS
luks LUKS-Modus verwenden
header=File LUKS-Header auf separatem Gerät
key-slot=1 Index des zu verwendenden Schlüssels
TrueCrypt
verycrypt VeraCrypt-Modus verwenden
tcrypt TrueCrypt-Modus verwenden
tcrypt-hidden Verstecktes Volumen verwenden
tcrypt-keyfile=File Pfad der Schlüsseldatei
tcrypt-system Systemverschlüsselungs-Modus verwenden
Allgemein
x-systemd.device-timeout= Wartezeit für Systemd
timeout=0 Wartezeit auf Passworteingabe
tries=3 Anzahl der Versuche bei Passworteingabe
verify Doppelte Eingabe des Passworts verlangen
discard TRIM-Befehle an die SSD durchreichen
noauto Gerät nicht automatisch öffnen
nofail Nicht warten
readonly Gerär nur lesbar öffnen
swap Gerät als Auslagerungsspeicher formatieren
tmp Gerät als Zwischenspeicher formatieren

Normalerweise legt man die verschlüsselten Partitionen schon während der Installation an. Nachträglich geht dies mit:

apt install cryptsetup
cryptsetup luksFormat /dev/sda2
cryptsetup luksOpen   /dev/sda2 root
mkfs.ext4  /dev/mapper/root
mount      /dev/mapper/root /mnt

Den Header kann man sich ansehen mit

cryptsetup luksDump /dev/sda2

Neue Passphrasen lassen sich vergeben mit

cryptsetup luksChangeKey /dev/sda2 --key-slot=0

Optional kann man die verschlüsselte Partition auch mit einem Krypto-Gerät wie dem YubiKey öffnen. Auf dem YubiKey konfigurieren wir den Slot 2 für das Challange-Response-Verfahren und hinterlegen die Challange im Slot 7 des LUKS-Headers.

apt install yubikey-{luks,personalization}
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
yubikey-luks-enroll -d /dev/mapper/root

In der Kryptotabelle ergänzen wir ein Skript zur Entschlüsselung.

/etc/crypttab
# Name Device Keyfile Options root /dev/sda2 none luks,discard,keyscript=/usr/share/yubikey-luks/ykluks-keyscript swap /dev/sda3 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

Schließlich aktualisieren wir die Initiale Ramdisk.

echo "RESUME=none" > /etc/initramfs-tools/conf.d/resume
update-initramfs -u
update-grub

Daten redundant speichern

Mehrere Festplatten lassen sich via Device Mapper zu einer Einheit verbinden. Je nach RAID-Level kann man auf Sicherheit durch Redundanz oder Geschwindigkeit durch Verteilung optimieren. Das Paket mdadm enthält die Programme für die Verwaltung.

RAID5-Array mit 3 aktiven Festplatten und einem Ersatz
Volumengruppe /dev/md/name
▤▥▤▥□□□□□□□□

□□□□□□
Physische Volumen /dev/loop0
▤▥▦□□□
/dev/loop1
▥▦▤□□□
/dev/loop2
▦▤▥□□□
/dev/loop3
□□□□□□

Mit dem Kommando mdadm verschaffen wir uns einen Überblick über die Konfiguration und den Gesundheitszustand des Verbunds.

apt install mdadm
mdadm --examine --scan
ARRAY /dev/md/name  metadata=1.2 UUID=Uuid name=Name
mdadm --detail /dev/md/name

Verbund erzeugen

mdadm --create /dev/md/name /dev/loop0 /dev/loop1 /dev/loop2 \
	--level=5 --raid-devices=3 --bitmap=internal
Level Platten Bezeichnung Beschreibung
0 2 Striping Geschwindigkeit
1 2 Mirroring Ausfallsicherheit
5 3 Parität Eine Platte darf ausfallen
6 4 Doppelte P. Zwei Platten dürfen ausfallen
10 4 Kombination aus Level 0 und 1

Frische Festplatte als Reserve einbinden

mdadm /dev/md/name --add  /dev/loop3

Defekte Festplatte entfernen

mdadm /dev/md/name --fail /dev/loop0 --remove /dev/loop0

Konfigurationsdatei erzeugen

/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf
/etc/mdadm/mdadm.conf
MAILADDR EmailAddress ARRAY /dev/md/name metadata=1.2 UUID=Uuid name=Name

Logische Volumen verwalten

Der Logical Volume Manager (LVM) fasst Speichermedien zu einer Volumengruppe zusammen, auf der man wiederum Logische Volumen anlegt, die sich im Rahmen der verfügbaren Gesamtkapazität im laufenden Betrieb vergrößern und verkleinern lassen. Das Paket lvm2 enthält die Programme für die Verwaltung.

Verbund mit 3 Speichermedien
Logische Volumen /dev/vg0/lvmail
▤▤▤▤▤▤□□□□

□□□□□□
Volumengruppe /dev/vg0
Physische Volumen /dev/loop0
▤▤□□□□□□
/dev/loop1
▤▤□□□□□□
/dev/loop2
▤▤□□□□□□

Mit den Kommandos pvs, vgs und lvs verschaffen wir uns einen Überblick.

apt install lvm2
pvs
  PV         VG  Fmt  Attr PSize   PFree
  /dev/loop0 vg0 lvm2 a--  120,00g  80,00g
  /dev/loop1 vg0 lvm2 a--  120,00g 120,00g
  /dev/loop2 vg0 lvm2 a--  120,00g 120,00g
vgs
  VG  #PV #LV #SN Attr   VSize   VFree
  vg0   3   1   0 wz--n- 360,00g 320,00g
lvs
  LV     VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvmail vg0 -wi-a----- 40,00g

Das Kommando pvcreate markiert physische Volumen als Teil eines Verbunds. Folgende Schritte fassen Speichermedien zu einer Volumengruppe zusammen, erzeugen darin ein logisches Volumen und darin wiederum ein Dateisystem.

pvcreate     /dev/loop0 /dev/loop1
vgcreate vg0 /dev/loop0 /dev/loop1
lvcreate --size=120G --name=lvmail vg0
mkfs.ext4 /dev/vg0/lvmail

Speichermedium markieren, hinzufügen und logisches Volumen auf maximale Größe ausdehnen.

pvcreate     /dev/loop2
vgextend vg0 /dev/loop2
lvextend resizefs --size +100%FREE /dev/vg0/lvmail

Logisches Volumen verkleinern, Daten umverteilen und Speichermedium entfernen.

lvreduce --resizefs --size 100G /dev/vg0/lvmail
pvmove       /dev/loop2
vgreduce vg0 /dev/loop2
vgremove vg0 /dev/loop2

Literatur

  1. Debian Forum: Cryptsetup mit systemd und Schlüssel auf externem USB-Stick
  2. Benjamin: Using a YubiKey as a second factor for LUKS, InfoSec Handbook, 2019
  3. Freedesktop: The Discoverable Partitions Specification
  4. Sebastian Strassner: Software RAID mit MDADM verwalten, Thomas-Krenn Wiki