|
|
Zeile 1: |
Zeile 1: |
| ==Arch-Linux auf ein BtrFS-System==
| |
|
| |
|
| Hier wird beschrieben wie ich ein BtrFS-System erstelle, wo man mit einem Snapshot nur / speichert. Die Verzeichnisse /home, /var/lib/cache/pacman/pkg und wie bei mir /Daten bleiben aussen vor und sind extra per snapshot zu sichern. Dies ist interessant für System-Updates, schnell ein System-Update mit vorherigen snapshot der Root-Partition erstellen ohne Ballast
| |
| wie pkg oder home, Daten etc. also ein kleines schnelles snapshot.
| |
| <br>
| |
| Inspiriert wurde ich von unicks.eu, der inzwischen eine kpl. neue Serie gedreht hat die da lautet "Arch my way"<br>
| |
|
| |
| Der Artikel ist so beschrieben wie mein System läuft und möglichts viel integriert. So kann man weglassen was man nicht braucht oder weitere scripte einbinden. Es sind also viele Änderungen möglich.
| |
| Wenn jemand kein EFI nutzt so braucht man auch keine vFat Formatierung und EFI-Partition. Man kann diese Partition aber als ext4 formatieren da grub evtl. Probleme mit BtrFS Boot-Partition hat.
| |
| <br>
| |
| Datensicherung- und Update-Script sind unter Scripte zu finden, sowie auch ein kpl. Terminal-Menü. Links unten am Ende dieses Artikels.<br>
| |
| <br>
| |
| ''Ich gehe davon aus, dass ein USB-Stick mit neustem Arch-Images startbar vorliegt. Weiter, das es eine kpl. Neuinstallation ist ohne Dualboot. Sonst entsprechend die Plattenbezeichnung ändern. Diese Beschreibung erklärt die Installation mit 2 SSD die im Raid0 / 1 ''(raid 5/6 läuft zur Zeit nicht stabil)'' laufen. Es ist aber auch möglich nur eine Platte zu nutzen''<br>
| |
| <br>
| |
| Mit hilfe des Sticks starten wir den Rechner, ist der Prompt zu sehen, stellen wir das System auf der deutschen Tastatur um, mit ''loadkeys de''. Die Arbeit wird hier durch doch erleichtert.<br>
| |
| <br>
| |
| Jetzt prüfe ich erstmal was an Platten vorhanden ist. Mit ''fdisk -l'' (l = kleines L) <br>
| |
| ''Anmerkung:sudo ist nicht von nöten, da das System per Stick mit root gestartet wird''<br>
| |
| Die Ausgabe fdisk -l ist bei mir (man sieht wie es mal aussehen sollte, da schon eingerichtet):
| |
| <br>
| |
| [Amber@DX1701 ~]$ sudo fdisk -l
| |
| [sudo] Passwort für Amber:
| |
| Festplatte /dev/sda: 232,9 GiB, 250059350016 Bytes, 488397168 Sektoren
| |
| Einheiten: Sektoren von 1 * 512 = 512 Bytes
| |
| Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
| |
| E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
| |
| Festplattenbezeichnungstyp: gpt
| |
| Festplattenbezeichner: 8445CB1C-5B69-453B-A039-BB98A9C39955
| |
|
| |
| Gerät Anfang Ende Sektoren Größe Typ
| |
| /dev/sda1 2048 1026047 1024000 500M EFI-System
| |
| /dev/sda2 1026048 470788095 469762048 224G Linux-Dateisystem
| |
| /dev/sda3 470788096 488397134 17609039 8,4G Linux Swap
| |
|
| |
| Festplatte /dev/sdb: 223,6 GiB, 240057409536 Bytes, 468862128 Sektoren
| |
| Einheiten: Sektoren von 1 * 512 = 512 Bytes
| |
| Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
| |
| E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
| |
| Festplattenbezeichnungstyp: gpt
| |
| Festplattenbezeichner: 8A3B18E3-CDAB-4880-8B42-4B13359A488C
| |
|
| |
| Gerät Anfang Ende Sektoren Größe Typ
| |
| /dev/sdb1 2048 468862094 468860047 223,6G Linux-Dateisystem
| |
| <br>
| |
| ''Anmerkung:Das Amber@DX1701 ist mein Name und Rechnername, bei euch steht also etwas anderes wie [root@xxxxx ~]#''<br>
| |
| <br>
| |
| Man sieht, die erste Platte sda hat die Partitionen
| |
|
| |
| /dev/sda1 2048 1026047 1024000 500M EFI-System
| |
| /dev/sda2 1026048 470788095 469762048 224G Linux-Dateisystem
| |
| /dev/sda3 470788096 488397134 17609039 8,4G Linux Swap
| |
|
| |
| die zweite Platte folgende
| |
| /dev/sdb1 2048 468862094 468860047 223,6G Linux-Dateisystem
| |
|
| |
| So habe ich das ganze aufgebaut:<br>
| |
| <br>
| |
| Ich haben hier also sda und sdb als Platten und fangen mit sda an und rufe ein Partitionierungsprogramm auf mit Hilfe von fdisk /dev/sda um die erste Platte einzurichten.<br>
| |
| Es erscheint im Terminal:<br>
| |
|
| |
| [Amber@DX1701 ~]$ sudo fdisk /dev/sda
| |
| [sudo] Passwort für Amber:
| |
|
| |
| Willkommen bei fdisk (util-linux 2.30.1).
| |
| Änderungen werden vorerst nur im Speicher vorgenommen, bis Sie sich
| |
| entscheiden, sie zu schreiben.
| |
| Seien Sie vorsichtig, bevor Sie den Schreibbefehl anwenden.
| |
|
| |
| Befehl (m für Hilfe): m
| |
|
| |
| Mit m (anschließend mit Enter/Return bestätigen) erhält man ein Hilfemenü um die Funktionen von fdisk zu sehen.<br>
| |
| Es erscheint:
| |
| Hilfe:
| |
|
| |
| Allgemein
| |
| d Eine Partition löschen
| |
| F Größe des unpartitionierten Bereichs anzeigen
| |
| l Die bekannten Dateisystemtypen anzeigen
| |
| n Eine neue Partition anlegen
| |
| p Die Partitionstabelle ausgeben
| |
| t Einen Partitionstyp ändern
| |
| v Die Partitionstabelle überprüfen
| |
| i Informationen über eine Partition ausgeben
| |
|
| |
| Sonstiges
| |
| m Dieses Menü anzeigen
| |
| x Zusätzliche Funktionen (nur für Experten)
| |
|
| |
| Skript
| |
| I Plattenlayout aus einer sfdisk-Skriptdatei laden
| |
| O Plattenlayout in eine sfdisk-Skriptdatei schreiben
| |
|
| |
| Speichern und Beenden
| |
| w Die Tabelle auf die Festplatte schreiben und das Programm beenden
| |
| q Beenden ohne Speichern der Änderungen
| |
|
| |
| Eine neue Bezeichnung erstellen
| |
| g Eine neue leere GPT-Partitionstabelle erstellen
| |
| G Eine neue leere SGI (IRIX)-Partitionstabelle erstellen
| |
| o Eine neue leere DOS-Partitionstabelle erstellen
| |
| s Eine neue leere Sun-Partitionstabelle erstellen
| |
|
| |
| Befehl (m für Hilfe):
| |
| <br>
| |
| Ich brauche also ausgehend von leeren Platten, g, n, t, p und w.<br>
| |
| ''Anmerkung:Die arbeiten die man vornimmmt werden erst umgesetzt wenn man mit w speichern und Ende bestätige!!''<br>
| |
| Ich kann alles ausser Letzter Sektor mit Enter bestätigen, letzter Sektor wird mit Eingabe der Grüße der Partition (+Größe{K,M,G,T,P}). Beispiel +500M wäre 500MB groß.<br>
| |
| Ich fange mit g an und erhalte:
| |
|
| |
| Befehl (m für Hilfe): g
| |
| Eine neue GPT-Festplattenbezeichnung wurde erstellt (GUID: D85F0243-252D-412F-AAAE-89FCF5DA460C).
| |
| Befehl (m für Hilfe):
| |
|
| |
| Nun habe ich eine Partitionstabelle und mache weiter mit n (neue Partition):
| |
| Befehl (m für Hilfe): n
| |
| Partitionsnummer (1-128, Vorgabe 1):
| |
| Erster Sektor (34-976773134, Vorgabe 34):
| |
| Letzter Sektor, +Sektoren oder +Größe{K,M,G,T,P} (34-976773134, Vorgabe 976773134): +500M
| |
|
| |
| '''Eine neue Partition 1 des Typs „Linux filesystem“ und der Größe 500 MiB wurde erstellt.'''
| |
|
| |
| Befehl (m für Hilfe):
| |
|
| |
| Es wurde eine Partition mit 500MB erstellt, diese wird später in /boot eingehängt und in vFat formatiert (efi).<br>
| |
| Weiter geht es mit n für die Root-Partition ''(eine /home wird es nicht geben da ich mit subvolume arbeite)''.
| |
|
| |
| Befehl (m für Hilfe): n
| |
| Partitionsnummer (2-128, Vorgabe 2):
| |
| Erster Sektor (1024034-976773134, Vorgabe 1024034):
| |
| Letzter Sektor, +Sektoren oder +Größe{K,M,G,T,P} (1024034-976773134, Vorgabe 976773134): +224G
| |
|
| |
| '''Eine neue Partition 2 des Typs „Linux filesystem“ und der Größe 224 GiB wurde erstellt.'''
| |
|
| |
| Befehl (m für Hilfe):
| |
| <br>
| |
| Nun die letzte Partition für swap
| |
| Befehl (m für Hilfe): n
| |
| Partitionsnummer (3-128, Vorgabe 3):
| |
| Erster Sektor (470786082-976773134, Vorgabe 470786082):
| |
| Letzter Sektor, +Sektoren oder +Größe{K,M,G,T,P} (470786082-976773134, Vorgabe 976773134):
| |
|
| |
| '''Eine neue Partition 3 des Typs „Linux filesystem“ und der Größe 8,3 GiB wurde erstellt.'''
| |
|
| |
| Befehl (m für Hilfe):
| |
|
| |
| Jetzt wird der Typ für die erste und letzte Partition festgelegt da diese EFI-Partition und swap sind. Mit l kann man sich eine Liste anzeigen lassen.<br>
| |
| Ich brauche 1 und 19 also gebe ich t ein, wähle meine Partition, hier 1 tippe dann nochmals 1 ein und die Ausgabe ist:
| |
|
| |
| Befehl (m für Hilfe): '''t'''
| |
| Partitionsnummer (1-3, Vorgabe 3): '''1'''
| |
| Partitionstyp (geben Sie L ein, um alle Typen aufzulisten): '''1'''
| |
|
| |
| Partitionstyp von „Linux filesystem“ nach '''„EFI System“''' geändert.
| |
|
| |
| Befehl (m für Hilfe):
| |
| Das ganze nochmals für die dritte Partition aber mit 19 für swap. Ausgabe:
| |
| Befehl (m für Hilfe): '''t'''
| |
| Partitionsnummer (1-3, Vorgabe 3): '''3'''
| |
| Partitionstyp (geben Sie L ein, um alle Typen aufzulisten): '''19'''
| |
|
| |
| Partitionstyp von „Linux filesystem“ nach '''„Linux swap“''' geändert.
| |
|
| |
| Befehl (m für Hilfe):
| |
| Mit "p" aufgelistet sieht es so aus:
| |
| Gerät Anfang Ende Sektoren Größe Typ
| |
| /dev/sda1 2048 1026047 1024000 500M EFI-System #EFI-Partition wird nach /boot gemountet
| |
| /dev/sda2 1026048 959424511 958398464 224G Linux-Dateisystem #Root-Partition
| |
| /dev/sda3 959424512 976773134 17348623 8,3G Linux Swap #Swap-Partition, wer viel Speicher hat kann diese weglassen oder verkleinern.
| |
|
| |
| Befehl (m für Hilfe):
| |
| Nun schließe ich das ganze mit w ab und mit Enter bestätigen. Ergebniss:
| |
| Befehl (m für Hilfe): w
| |
| Die Partitionstabelle wurde verändert.
| |
| ioctl() wird aufgerufen, um die Partitionstabelle neu einzulesen.
| |
| Festplatten werden synchronisiert.
| |
|
| |
| [Amber@DX1701 ~]$
| |
|
| |
| und damit bin ich wieder am Prompt.<br>
| |
| <br>
| |
| Die sdb Platte muß noch eingerichtet werden. Das ist bei BtrFS nicht unbedingt notwendig, erstellt das Raid trotzdem, trotzdem mache ich es einfach wie folgt.<br>
| |
| fdisk /dev/sdb
| |
| dann einmal g
| |
| nun n
| |
| dreimal mit Enter bestätigen (ich will ja nur eine Partition).<br>
| |
| mit w abschließen.
| |
| <br>
| |
| <br>
| |
| Es geht weiter mit der Formatierung, ich nutze dabei Labels (Namen für die Partition). Der Befehl hierzu ist mkfs.btrfs -L "Name" /dev/sdXx und für Raid gibt es noch zusätzliche<br>
| |
| Parameter wie -m (Metadaten) -d (daten) raidX (welches raid). Beispiel mkfs.btrfs -L "Name" -m raid1 -d raid0 -L "BTRFS_RAID" /dev/sda1 /dev/sdb1<br>
| |
| <br>
| |
| Zuerst formatiere ich die EFI-Partition in vfat,setze Label mit EFI mit:
| |
| <br>
| |
| sudo mkfs.vfat -F 32 -n "EFI" /dev/sda1
| |
| <br>
| |
| Jetzt die Root-Partition, hier wird das raid gesetzt also sda2 mit sdb1. Hier habe ich für die Metadaten ein Raid1 (Mirroring – Spiegelung) und für die Daten also / Raid0 (Striping – Beschleunigung ohne Redundanz). weitere Infos [https://de.wikipedia.org/wiki/RAID hier]<br>
| |
| mkfs.btrfs -L "ARCH" -m raid1 -d raid0 /dev/sda2 /dev/sdb1
| |
| die swap erstelle ich mit
| |
| mkswap -L "SWAP" /dev/sda3
| |
| <br>
| |
| ''Die Installation''<br>
| |
| <br>
| |
| Als erstes muß man die Subvolumen erzeugen und dafur bindet man die Root-Partition sda2 ein, sdb1 wird dann automatisch mit eingebunden.
| |
| <br>
| |
| mount /dev/sda2 /mnt/
| |
| <br>
| |
| Die Subvolume erzeugen, ich brauche /=@ home=@home Daten=@daten pkg=@pkg .snapshots=@snapshots
| |
| <br>
| |
| btrfs subvolume create /mnt/@
| |
| btrfs subvolume create /mnt/@home
| |
| btrfs subvolume create /mnt/@daten
| |
| btrfs subvolume create /mnt/@pkg
| |
| btrfs subvolume create /mnt/@snapshots
| |
| <br>
| |
| Diese subvolume sind alle gleichberechtigt wie man mit btrfs subvolume list -p /mnt sehen kann
| |
| <br>
| |
| [Amber@DX1701 /]$ sudo btrfs subvolume list -p /mnt
| |
| ID 257 gen 8 parent 5 ''top level 5'' path @
| |
| ID 258 gen 9 parent 5 ''top level 5'' path @home
| |
| ID 259 gen 10 parent 5 ''top level 5'' path @pkg
| |
| ID 260 gen 11 parent 5 ''top level 5'' path @snapshots
| |
| ID 261 gen 12 parent 5 ''top level 5'' path @daten
| |
| [Amber@DX1701 /]$
| |
| <br>
| |
| alle liegen im top level 5 so wird mit ein snapshot von / also @ auch nur dieses gesichert, @home, @pkg, @snapshots, @daten bleiben aussen vor.
| |
| <br>
| |
| Da das System in / also @ installiert werden soll muß jetzt sda2 ausgehängt werden mit
| |
| <br>
| |
| umount /mnt
| |
| <br>
| |
| und @ entsprechend nach /mnt gemountet und zwar so wie es in der fstab stehen soll,wer keine SSD hat eben kein ssd usw.
| |
| <br>
| |
| mount -o rw,noatime,compress=lzo,ssd,space_cache,subvol=@ /dev/sdc2 /mnt
| |
| <br>
| |
| es müssen nun die Verzeichnisse angelegt werden
| |
| <br>
| |
| mkdir /mnt/home/
| |
| mkdir /mnt/boot/
| |
| mkdir /mnt/.snapshots/
| |
| mkdir -p /mnt/home/Daten/
| |
| mkdir -p /mnt/var/cache/pacman/pkg/
| |
| <br>
| |
| ''das -p steht für übergeordnete Verzeichnisse erzeugen was mit dem Verzeichniss pkg ja der Fall ist.''<br>
| |
| Jetzt kann der Rest eingebunden werden mit
| |
| mount -o rw,noatime,compress=lzo,ssd,space_cache,subvol=@home /dev/sdc2 /mnt/home/
| |
| mount -o rw,noatime,compress=lzo,ssd,space_cache,subvol=@pkg /dev/sdc2 /mnt/var/cache/pacman/pkg/
| |
| mount -o rw,noatime,compress=lzo,ssd,space_cache,subvol=@daten /dev/sdc2 /mnt/home/Daten/
| |
| mount -o rw,noatime,compress=lzo,ssd,space_cache,subvol=@snapshots /dev/sdc2 /mnt/.snapshots/
| |
| mount -o rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro /dev/sda1 /boot
| |
| swapon /dev/sda3
| |
| da alles vorbereitet ist Laufwerke eingebunden, diese mount-Parameter werden in der fstab durch genfstab übernommen. Daher kann die Installation starten mit
| |
| pacstrap /mnt base base-devel wpa_supplicant btrfs-progs
| |
| alles weitere unter
| |
| * [[Anleitung für Einsteiger]]
| |
|
| |
| bitte genau nach Anleitung vorgehen, die fstab überprüfen. Diese sollte ungefähr so aussehen (hier ein EFI-SYSTEM)
| |
| <br>
| |
| # /dev/sda2 LABEL=ARCH
| |
| UUID=e3fdba80-b449-4266-8603-96691741c669 / btrfs rw,noatime,compress=lzo,ssd,space_cache,subvol=@ 0 0
| |
| # /dev/sda1
| |
| UUID=10F4-2424 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2
| |
| # /dev/sda2 LABEL=ARCH
| |
| UUID=e3fdba80-b449-4266-8603-96691741c669 /home btrfs rw,noatime,compress=lzo,ssd,space_cache,subvol=@home 0 0
| |
| # /dev/sda2 LABEL=ARCH
| |
| UUID=e3fdba80-b449-4266-8603-96691741c669 /var/cache/pacman/pkg btrfs rw,noatime,compress=lzo,ssd,space_cache,subvol=@pkg 0 0
| |
| # /dev/sda2 LABEL=ARCH
| |
| UUID=e3fdba80-b449-4266-8603-96691741c669 /home/Amber/Daten btrfs rw,noatime,compress=lzo,ssd,space_cache,subvol=@daten 0 0
| |
| # /dev/sda2 LABEL=ARCH
| |
| UUID=e3fdba80-b449-4266-8603-96691741c669 /.snapshots btrfs rw,noatime,compress=lzo,ssd,space_cache,subvol=@snapshots 0 0
| |
| # /dev/sda3 LABEL=swap_arch
| |
| UUID=417b4d91-b330-4a29-9c26-a14935add34c none swap defaults
| |
| <br>
| |
| Selbstredend das die UUID anders ist oder Labels benutzt werden, je nach dem.<br>
| |
| Den Bootloader prüfen, die Linuxzeile muß angepasst werden mit rootflags=subvol=@. Unter grub sieht es so aus <br>
| |
| Beispiel = ''"linux /vmlinuz-linux root=UUID=e3fdba80-b449-4266-8603-96691741c669 rw rootflags=subvol=@ quiet"''<br>
| |
| unter systemctl-boot so<br>
| |
| Beispiel = ''"root=LABEL=ARCH rootflags=subvol=@ rw quiet"''<br>
| |
| <br>
| |
| Wenn man sicher ist, alles korrekt ausgeführt zu haben, kommt nun der Neustart. Entfernen des Sticks und das neuinstallierte System fährt hoch.<br>
| |
| <br>
| |
| Ist das System hochgefahren werden jetzt erstmal snapshots erstellt, dreimal. Da jetzt im User-Modus gearbeitet wird brauche ich sudo
| |
| <br>
| |
| sudo btrfs subvolume create /.snapshots/WORKING
| |
| sudo btrfs subvolume create /.snapshots/STABLE
| |
| sudo btrfs subvolume create /.snapshots/OlDSTABLE
| |
| <br>
| |
| es werden noch ein Kernel und initramfs erzeugt mit einfachen kopieren
| |
| <br>
| |
| cp /boot/vmlinuz-linux /boot/vmlinuz-linux-stable
| |
| cp /boot/initramfs-linux.img /boot/initramfs-linux-stable.img
| |
| <br>
| |
| erstelle im Bootloader-Menü entsprechend zwei neue Einträge mit rootflags statt auf /@ auf /@snapshots/WORKING und auf /@snapshots/STABLE. Wobei im Menü auf /@snapshots/STABLE auch die entsprechenden kernel und initramfs stehen sollte, vmlinuz-linux-stable und initramfs-linux-stable.img. In der fstab in /.snapshots/WORKING/etc/fstab ändert man
| |
| diese Zeile:
| |
| <br>
| |
| UUID=e3fdba80-b449-4266-8603-96691741c669 / btrfs rw,noatime,compress=lzo,ssd,space_cache,subvol=@ 0 0
| |
| <br>
| |
| in:
| |
| <br>
| |
| UUID=e3fdba80-b449-4266-8603-96691741c669 / btrfs rw,noatime,compress=lzo,ssd,space_cache,subvol=@snapshots/WORKING 0 0
| |
| <br>
| |
| um. So arbeiten wir nach einen Neustart, entsprechende Auswahl nur noch mit dem subvolume WORKING. Bei Updates und Systemrollback ist es wichtig.<br>
| |
| '' Man kann einen passenden Menu-Abschnitt kopieren und das entscheidende ändern, wie rootflags oder linux-kernel.''<br>
| |
|
| |
| Die diversen Scripte sind unter Scripte zu finden. Links folgen entsprechend.<br>
| |
| Ein Script "Snapshot-Rollback" kommt später."
| |
|
| |
| ''Danke an unicks.eu für die Video-Serie, die eine der wenigen ist, die es sehr anschaulich erklären''
| |
| ''Teile von den Scripten stammen von unicks.eu''
| |
|
| |
| have fun<br>
| |
| Gruß Amber
| |
|
| |
| Weitere Informationen:
| |
|
| |
| * [[Update mit Snapshot]]
| |
| * [[Snapshot-Roolback]]
| |
| * [[Backup mit Rsync]]
| |
| * [[Menue-Terminal]]
| |
| * [[UEFI Installation]]
| |
| * [[Fstab]]
| |
|
| |
|
| |
| [[Kategorie:Installation]]
| |
| [[en:Arch auf BtrFS]]
| |