[Startseite] [TitleIndex] [WordIndex

SSD als Cache für verschlüsseltes Root-Dateisystem einrichten: Anleitung

Dies ist die Anleitung für Einrichtung in virtueller Maschine und für den Ernstfall.

  1. virt-manager installieren für virtuelle Maschine
  2. Kubuntu 16.04.3 LTS-Image von kubuntu.org runterladen
  3. Einstellung im BIOS:

    https://wiki.ubuntuusers.de/SSD/Grundlagen/#BIOS-Einstellungen-fuer-SSD
    War offenbar schon eingestellt.

  4. Zuerst die SSD partitionieren. Lasse 20 GB frei, für eventuelle spätere Anwendungen. Bei virtueller Maschine ist /dev/sda die virtuelle Festplatte. Im Produktionssysem ist /dev/sda die Festplatte, auf der sich das Root-Dateisysem befindet. /dev/sdb ist die SSD (in beiden Fällen). Die SSD darf (noch) nicht benutzt sein. Die Anfangssektoren müssen immer durch 2048 teilbar sein.

    Gerät      Boot    Start      Ende  Sektoren Größe Id Typ
    /dev/sdb1           2048  41945087  41943040    20G 83 Linux
    /dev/sdb2       41945088 976773167 934828080 445,8G 83 Linux
  5. Bei Installation in einer virtuellen Maschine: Neue virtuelle Maschine in virt-manager aus der Imagedatei für Kubuntu 16.04.3 installieren. Bei Schritt 5 von 5 "Konfiguration bearbeiten vor der Installation" anwählen. Dann kommt als nächstes die Konfiguration. Bei "VirtIO Disk 1 -> Erweiterte Konfiguration -> Festplattenbus" "SATA" anwählen.

    Dann "Gerät hinzufügen", und die SSD hinzufügen. Dazu bei "Storage -> Select or create custom storage" "/dev/sdb" eintragen. Bei den "erweiterten Optionen" wieder unter "Festplattenbus" "SATA" anwählen.

    Dann bekommen die beiden Geräte Namen der Form "/dev/sd...".

  6. Die Installationsprozedur für Kubuntu in der virtuellen Maschine durchlaufen. Bei "Einrichtung der Festplatten" "Geführt - gesamte Platte mit verschlüsseltem LVM" wählen.
  7. Im neu installierten Kubuntu ein Terminal öffnen und lsblk ausführen. Die Ausgabe sollte so assehen:
    NAME                     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda                        8:0    0    20G  0 disk
    ├─sda1                     8:1    0   487M  0 part  /boot
    ├─sda2                     8:2    0     1K  0 part
    └─sda3                     8:5    0  19,5G  0 part
      └─sda3_crypt           253:0    0  19,5G  0 crypt
        ├─kubuntu--vg-root   253:1    0  17,5G  0 lvm   /
        └─kubuntu--vg-swap_1 253:2    0     2G  0 lvm   [SWAP]
    sdb                        8:16   0 465,8G  0 disk
    ├─sdb1                     8:17   0    20G  0 part
    └─sdb2                     8:18   0 445,8G  0 part
    sr0                       11:0    1  1024M  0 rom

    Siehe Rechner/Virtuelle Maschine

  8. Firefox und Emacs installieren. Dann mit Firefox vwysk.now-dns.net/wiki aufrufen. Dazu muß das Wikipaßwort eingegeben werden.
  9. Die SSD verschlüsseln:
    cryptsetup luksFormat /dev/sdb2 --key-size=512
    Folgendes zu /etc/crypttab hinzufügen:
    sdb2_crypt /dev/sdb2 none luks,discard

    Danach Neustart. Es werden jetzt zwei Paßwörter benötigt: Für sda3_crypt und für sdb2_crypt. D.h. daß beim Booten zwei Paßworter abgefragt werden, auch wenn beide gleich sind. Das geschieht jedoch jetzt noch nicht, sondern erst beim Booten, nachdem die komplette Einrichtung des SSD-Cache abgeschlossen wurde (s.u.). Zunächst wird beim Booten nur ein Paßwort, für beide Kryptolaufwerke, abgefragt.

  10. Vier LVM-Bugs beheben. Das fertige System läßt sich sonst nicht booten.
    Erstens: In der initramfs fehlen mehrere Module (siehe hier). Folgendes als root ausführen:

    echo "dm_cache" >> /etc/initramfs-tools/modules
    echo "dm_cache_mq" >> /etc/initramfs-tools/modules
    echo "dm_cache_smq" >> /etc/initramfs-tools/modules
    echo "dm_persistent_data" >> /etc/initramfs-tools/modules
    echo "dm_bufio" >> /etc/initramfs-tools/modules

    Zweitens: Außerdem fehlt /sbin/check_cache. Siehe http://forums.debian.net/viewtopic.php?f=5&t=119644. Ausführen:

    apt install thin-provisioning-tools

    Drittens: Es muß eine neue Konfigurationsdatei in /etc/initramfs-tools/hooks/ssd angelegt werden, mit dem Besitzer root:root (siehe hier):

    #!/bin/sh
    
    PREREQ="lvm2"
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
    esac
    
    if [ ! -x /usr/sbin/cache_check ]; then
        exit 0
    fi
    
    . /usr/share/initramfs-tools/hook-functions
    
    copy_exec /usr/sbin/cache_check
    
    manual_add_modules dm_cache dm_cache_mq dm_cache_smq dm_persistent_data dm_bufio
    
    Dann:
    chmod u+x /etc/initramfs-tools/hooks/ssd

    Viertens: In /etc/crypttab darf kein "UUID=..." verwendet werden. Stattdessen "/dev/sda3" verwenden.
    Die Änderungen wirksam machen:

    update-initramfs -u
    grub-install /dev/sda
    (Unklar ob die zweite Zeile benötigt wird)
  11. Eingebauten Festplatten- und SSD-Schreibcache ein- bzw. ausschalten. In /etc/hdparm.conf anhängen (siehe Thomas Krenn):

    # Schreibcache der Festplatte aus
    /dev/sda {
            write_cache = off
    }
    # Schreibcache der SSD ein
    /dev/sdb {
            write_cache = on
    }

    Das soll scheints (beim Festplattenschreibcache) das Dateisystem bei Stromausfall schützen. Siehe https://www.thomas-krenn.com/de/wiki/Cache_Einstellungen_von_RAID_Controllern_und_Festplatten#Einstellungen_f.C3.BCr_sicheren_Betrieb .

    Neu starten, um die Änderung wirksam zu machen. (Oder hdparm verwenden)

  12. Neues Physical Device für die Volume Group einrichten:
    pvcreate /dev/mapper/sdb2_crypt
    vgextend kubuntu-vg /dev/mapper/sdb2_crypt
  13. Logical Volumes für den LVM-Cache einrichten. Der verwendete Teil der SSD ist 445,8GiB groß. Das CacheMetadataLV soll ein tausendstel so groß wie das CacheDataLV sein. Mache das Metadatenlaufwerk 500 MiB groß. Der Rest kommt zu den Cachedaten:
    lvcreate --size 500M --name cachemetadatalv kubuntu-vg \
             /dev/mapper/sdb2_crypt
    lvcreate --size 440G --name cachedatalv kubuntu-vg \
             /dev/mapper/sdb2_crypt
    Verwende nur 440 GB statt 445 GB, sonst kommt beim nächsten Schritt die Meldung „Volume group "kubuntu-vg" has insufficient free space (69 extents): 125 required.“.
  14. Kombination der zwei logical volumes cachedatalv und cachemetadatalv zu einem Cache Pool. Verwende Cachemodus writeback, d.h. auch Schreibzugriffe werden gecacht:

    lvconvert --type cache-pool \
              --cachepolicy smq \
              --cachemode writeback \
              --poolmetadata kubuntu-vg/cachemetadatalv \
              kubuntu-vg/cachedatalv

    Nicht --yes verwenden (siehe hier). Schließlich den Cache Pool mit dem OriginLV zu einem gecachten Laufwerk verbinden:

    lvconvert --type cache --cachepool kubuntu-vg/cachedatalv \
              kubuntu-vg/root
    Meldung: „Logical volume kubuntu-vg/root is now cached.“
  15. Nochmal die Änderungen wirksam machen (zur Sicherheit):

    update-initramfs -u
    grub-install /dev/sda    # notwendig?

Hinterher muß man beim Booten beide Paßwörter eingeben: Für die verschlüsselte Festplatte und die verschlüsselte SSD, auch wenn beide gleich sind.


2018-01-10 20:33