Skip to content

Debian Bookworm 12 - Btrfs Installation

Linux
  • Andere Distributionen ermöglichen einem das mit einem Mausklick, bei Debian muss man das leider von Hand erledigen. Ich habe das wie folgt gemacht.

    Auf dem Laufwerk alle Partitionen gelöscht, so das nur noch der freie Speicher angezeigt wird. Danach der Reihe nach, folgende Partitionen angelegt.

    • 1GB EFI
    • 1GB Boot ext4 /boot
    • 32GB Swap
    • 466,1 GB physikalisches Volume für Verschlüsselung

    Danach auf Verschlüsselte Datenträger konfigurieren klicken und den Anweisungen folgen. Die beiden Partitionen p3 & p4 verschlüsseln.

    Danach die device-mapper Devices im oberen Teil bearbeiten, wie im Screenshot zu sehen. Einhängepunkte und Filesystem ist wichtig.

    20230409_114701.jpg

    Danach läuft die Installation von Debian Bookworm weiter.

    Das sieht dann so aus

    df -h

    root@debian12:~# df -h
    Dateisystem                 Größe Benutzt Verf. Verw% Eingehängt auf
    udev                          14G       0   14G    0% /dev
    tmpfs                        2,8G    1,6M  2,8G    1% /run
    /dev/mapper/nvme0n1p4_crypt  435G    6,3G  427G    2% /
    tmpfs                         14G       0   14G    0% /dev/shm
    tmpfs                        5,0M     12K  5,0M    1% /run/lock
    /dev/nvme0n1p2               921M     89M  769M   11% /boot
    /dev/nvme0n1p1               511M    5,9M  506M    2% /boot/efi
    tmpfs                        2,8G     64K  2,8G    1% /run/user/1000
    

    swapon

    root@debian12:~# swapon
    NAME      TYPE       SIZE USED PRIO
    /dev/dm-1 partition 29,8G   0B   -2
    

    subvolume list

    root@debian12:~# btrfs subvolume list /
    ID 256 gen 76 top level 5 path @rootfs
    

    filesystem show

    root@debian12:~# btrfs filesystem show 
    Label: none  uuid: 10c31933-b883-44db-9231-91be612ca84f
            Total devices 1 FS bytes used 6.08GiB
            devid    1 size 434.08GiB used 10.02GiB path /dev/mapper/nvme0n1p4_crypt
    

    filesystem df /

    root@debian12:~# btrfs filesystem df / 
    Data, single: total=8.01GiB, used=5.90GiB
    System, DUP: total=8.00MiB, used=16.00KiB
    Metadata, DUP: total=1.00GiB, used=178.53MiB
    GlobalReserve, single: total=15.19MiB, used=0.00B
    

    /etc/fstab

    # /etc/fstab: static file system information.
    #
    # Use 'blkid' to print the universally unique identifier for a
    # device; this may be used with UUID= as a more robust way to name devices
    # that works even if disks are added and removed. See fstab(5).
    #
    # systemd generates mount units based on this file, see systemd.mount(5).
    # Please run 'systemctl daemon-reload' after making changes here.
    #
    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    /dev/mapper/nvme0n1p4_crypt /               btrfs   defaults,subvol=@rootfs 0       0
    # /boot was on /dev/nvme0n1p2 during installation
    UUID=827afb39-794d-40fa-ae50-74562a433ad3 /boot           ext4    defaults        0       2
    # /boot/efi was on /dev/nvme0n1p1 during installation
    UUID=DE97-75E3  /boot/efi       vfat    umask=0077      0       1
    /dev/mapper/nvme0n1p3_crypt none            swap    sw              0       0
    

    Kernel

    root@debian12:~# uname -a
    Linux debian12 6.1.0-7-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.20-1 (2023-03-19) x86_64 GNU/Linux
    

    /etc/os-release

    PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
    NAME="Debian GNU/Linux"
    VERSION_ID="12"
    VERSION="12 (bookworm)"
    VERSION_CODENAME=bookworm
    ID=debian
    HOME_URL="https://www.debian.org/"
    SUPPORT_URL="https://www.debian.org/support"
    BUG_REPORT_URL="https://bugs.debian.org/"
    

    Anmerkung

    Ja, man kann das sicherlich besser konfigurieren, aber ich denke das passt so für mich. Ich habe bewusst kein Subvolume für /home angelegt. Das habe ich bei einer normalen Installation auch nie. Das /boot nicht verschlüsselt ist, ist für mich kein Problem. Für andere vielleicht!? 32GB für Swap entspricht der Menge des verbauten Speichers in dem PC.

    Anregungen und Meinungen sind hier wie immer willkommen.

  • FrankMF FrankM hat am auf dieses Thema verwiesen
  • Heute nochmal viel gelesen und da wurde meistens ein @home angelegt. Ok, dann wollen wir das auch mal machen.

    Bitte dran denken, falls ihr das nachmacht. BACKUP anlegen!!!

    Step 1 Live System starten

    Wir brauchen eine startbare Linuxinstallation. Ich habe mir dazu LinuxMint runtergeladen, ab auf den Stick und den Rechner damit gestartet.

    Ok, die englische Tastatur nervt für das was wir noch alles machen wollen. Also schnell mal das Tastatur Layout auf Deutsch umgebogen.

    20230416_165735.jpg

    Jetzt kann es los gehen 🙂

    Step 2 Entschlüsseln

    Den verschlüsselten NVMe Riegel entschlüsseln & mounten. Sollte ihr keine verschlüsselte Partition haben, dann einfach so mounten. Man sucht sich vorher die richtige Partition aus. In meinem Fall sieht das so aus.

    Disk /dev/nvme0n1: 465,76 GiB, 500107862016 bytes, 976773168 sectors
    Disk model: Samsung SSD 980 500GB                   
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 16384 bytes / 131072 bytes
    Disklabel type: gpt
    Disk identifier: 65C90FD5-E7AD-E74A-8C5F-1DDFFFCFBCE4
    
    Device             Start       End   Sectors   Size Type
    /dev/nvme0n1p1      2048   1953791   1951744   953M EFI System
    /dev/nvme0n1p2   1953792   3907583   1953792   954M Linux filesystem
    /dev/nvme0n1p3   3907584 140625919 136718336  65,2G Linux swap
    /dev/nvme0n1p4 140625920 976771071 836145152 398,7G Linux filesystem
    

    Die Partition p4 interessiert uns hier, das ist das / Verzeichnis.

    cryptsetup luksOpen /dev/nvme0n1p4 debian
    

    Das Passwort eingeben. Danach gibt es ein neues Device mit dem Namen /dev/mapper/debian. Das brauchen wir. Das müssen wir jetzt mounten.

    Step 3 Mounten

    Verzeichnis anlegen zum Mounten

    sudo mkdir /tmp/debian
    

    Jetzt das entschlüsselte Verzeichnis dorthin mounten

    sudo mount /dev/mapper/debian /tmp/debian
    

    Jetzt können wir damit arbeiten.

    Step 3 Subvolume anlegen

    btrfs subvolume create /tmp/debian/@home
    

    Step 4 Daten kopieren

    Alle Daten von /tmp/debian/@rootfs/home/ nach /tmp/debian/@home/home/ kopieren. Das kann etwas dauern. Geduld ist angesagt. Danach starten wir den Rechner neu und booten wieder ganz normal.

    Step 5 Temporär das Subvolume mounten

    Dafür habe ich die Datei /etc/fstab bearbeitet.

    /dev/mapper/nvme0n1p4_crypt /tmp/debian           btrfs   defaults,subvol=@home   0       0
    

    Das dann mounten

    sudo mount -a
    

    Step 6 Benutzerrechte einstellen

    Dann können wir dem Subvolume die nötigen Benutzerrechte geben.

    sudo chown -R frank:frank /tmp/debian
    

    Step 7 Altes Homeverzeichnis umbenennen

    Jetzt kann man sich erstmal alles anschauen, sind alle Daten vorhanden usw. Wenn man sich sicher ist, das alles stimmt, bearbeiten wir die /etc/fstab und machen den richtigen Eintrag.

    /dev/mapper/nvme0n1p4_crypt /home           btrfs   defaults,subvol=@home   0       0 
    

    Jetzt wird das Subvolume nach einem Neustart eingebunden. Wir wollen aber vorher noch, das alte Homeverzeichnis umbenennen! Dazu erneut das Livesystem starten. Das /home umbenennen, bei mir lautet es jetzt OLD_HOME. Somit hat man im Notfall noch die Daten und kann sie einfach umkopieren. Jetzt ein beherzter Neustart! 🙂

    Step 8 Kontrolle

    Wir geben mal

    mount
    

    als Root ein. Ausgabe

    root@debian:~# mount
    /dev/mapper/nvme0n1p4_crypt on / type btrfs (rw,relatime,ssd,space_cache=v2,subvolid=256,subvol=/@rootfs)
    /dev/mapper/nvme0n1p4_crypt on /home type btrfs (rw,relatime,ssd,space_cache=v2,subvolid=295,subvol=/@home)
    [..gekürzt..]
    

    Und mit btrfs kommt das hier

    root@debian:~# btrfs subvolume list /
    ID 256 gen 5093 top level 5 path @rootfs
    ID 295 gen 5093 top level 5 path @home
    [..gekürzt..]
    

    Ich habe noch wegen Docker jede Menge andere, aber das erspare ich Euch an dieser Stelle.
    Das sieht doch gut aus und der Hobby Systemadministrator ist zufrieden 🤓

    Da bei mir Timeshift vorher immer gecrasht ist, habe ich es erneut installiert und es lief, bis auf diesen Bug ohne zu crashen.

    249b211f-38a0-42b2-9567-fec66596eb89-grafik.png

    Timeshift ist in diesem Bereich wirklich schlecht programmiert. Es erwartet zwingend ein Rootverzeichnis mit Namen /@ und ein Homeverzeichnis mit Namen /@home. Etwas unflexibel. Dazu gibt es auch schon einen Issue auf Github.

    Als Lösung könnte man jetzt das Subvolume /@rootfs genauso verschieben. Also, ein Neues anlegen mit Namen /@ danach alle Daten verschieben. /etc/fstab anpassen und fertig. Das wird aber sicherlich nicht mehr heute passieren. Soweit bin ich erstmal zufrieden 🤓

  • Das mit den Namen der btrfs Subvolumes ist bekannt bei Timeshift. Im Readme steht dazu folgendes.

    BTRFS volumes

    BTRFS volumes must have an Ubuntu-type layout with @ and @home subvolumes. Other layouts are not supported. Systems having the @ subvolume and having /home on a non-BTRFS partition are also supported.

    Text file busy / btrfs returned an error: 256 / Failed to create snapshot can occur if you have a Linux swapfile mounted within the @ or @home subvolumes which prevents snapshot from succeeding. Relocate the swapfile out of @ or *@home, for example into it's own subvolume like @swap.

  • Proxmox - Video Tipp

    Proxmox
    1
    0 Stimmen
    1 Beiträge
    104 Aufrufe
    Niemand hat geantwortet
  • Redis ConnectionPool

    Redis
    2
    0 Stimmen
    2 Beiträge
    188 Aufrufe
    FrankMF

    Die Antwort von ChatGPT wie der Redis ConnectionPool funktioniert. Ein paar Dinge finde ich komisch.

    https://chat.openai.com/share/b10fdadc-2c9b-404a-bc99-c883d110d6af

  • Debian 11.5 released

    Linux
    1
    0 Stimmen
    1 Beiträge
    87 Aufrufe
    Niemand hat geantwortet
  • NodeBB - Upgrade auf v1.19.3

    NodeBB
    1
    0 Stimmen
    1 Beiträge
    91 Aufrufe
    Niemand hat geantwortet
  • VSCodium - Meldungen trailing-whitespaces

    Linux
    1
    0 Stimmen
    1 Beiträge
    112 Aufrufe
    Niemand hat geantwortet
  • ZFS - One Disk Pool -> Mirror Pool

    Linux
    1
    0 Stimmen
    1 Beiträge
    158 Aufrufe
    Niemand hat geantwortet
  • Armbian Images

    Armbian
    1
    0 Stimmen
    1 Beiträge
    297 Aufrufe
    Niemand hat geantwortet
  • ROCKPro64 - Debian Bullseye Teil 1

    ROCKPro64
    17
    0 Stimmen
    17 Beiträge
    2k Aufrufe
    FrankMF

    Durch diesen Beitrag ist mir mal wieder eingefallen, das wir das erneut testen könnten 😉

    Also die aktuellen Daten von Debian gezogen. Das Image gebaut, könnt ihr alles hier im ersten Beitrag nachlesen. Da die eingebaute Netzwerkschnittstelle nicht erkannt wurde, habe ich mal wieder den USB-to-LAN Adapter eingesetzt.

    Bus 005 Device 002: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet

    Die Installation wollte ich auf einem NVMe Riegel installieren.

    Die Debian Installation durchgezogen und nach erfolgreicher Installation neugestartet. Und siehe da, ohne das man alles möglich ändern musste, bootete die NVMe SSD 🤓

    Eingesetzter uboot -> 2020.01-ayufan-2013......

    Die nicht erkannte LAN-Schnittstelle müsste an nicht freien Treibern liegen, hatte ich da irgendwo kurz gelesen. Beim Schreiben dieses Satzes kam die Nacht und ich konnte noch mal drüber schlafen. Heute Morgen, beim ersten Kaffee, dann noch mal logischer an die Sache ran gegangen.

    Wir schauen uns mal die wichtigsten Dinge an.

    root@debian:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff 3: enx000acd26e2c8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff inet 192.168.3.208/24 brd 192.168.3.255 scope global dynamic enx000acd26e2c8 valid_lft 42567sec preferred_lft 42567sec inet6 fd8a:6ff:2880:0:20a:cdff:fe26:e2c8/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:20a:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5426sec preferred_lft 1826sec inet6 fe80::20a:cdff:fe26:e2c8/64 scope link valid_lft forever preferred_lft forever

    Ok, er zeigt mir die Schnittstelle eth0 ja an, dann kann es an fehlenden Treibern ja nicht liegen. Lässt dann auf eine fehlerhafte Konfiguration schließen. Nächster Halt wäre dann /etc/network/interfaces

    Das trägt Debian ein

    # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug enx000acd26e2c8 iface enx000acd26e2c8 inet dhcp # This is an autoconfigured IPv6 interface iface enx000acd26e2c8 inet6 auto

    Gut, bei der Installation hat Debian ja nur die zusätzliche Netzwerkschnittstelle erkannt, folgerichtig ist die auch als primäre Schnittstelle eingetragen. Dann ändern wir das mal...

    # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface #allow-hotplug enx000acd26e2c8 allow-hotplug eth0 #iface enx000acd26e2c8 inet dhcp iface eth0 inet dhcp # This is an autoconfigured IPv6 interface #iface enx000acd26e2c8 inet6 auto iface eth0 inet6 auto

    Danach einmal alles neu starten bitte 😉

    systemctl status networking

    Da fehlte mir aber jetzt die IPv4 Adresse, so das ich einmal komplett neugestartet habe. Der Ordnung halber, so hätte man die IPv4 Adresse bekommen.

    dhclient eth0

    Nachdem Neustart kam dann das

    root@debian:/etc/network# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.172/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 42452sec preferred_lft 42452sec inet6 fd8a:6ff:2880:0:6003:b0ff:fed6:dcb3/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:6003:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5667sec preferred_lft 2067sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx000acd26e2c8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff

    Fertig, eth0 läuft. Nun kann man den zusätzlichen Adapter entfernen oder halt konfigurieren, wenn man ihn braucht.

    Warum der Debian Installer die eth0 nicht erkennt verstehe ich nicht, aber vielleicht wird das irgendwann auch noch gefixt. Jetzt habe ich erst mal einen Workaround um eine Installation auf den ROCKPro64 zu bekommen.