Kapitel 4. Wartung des Dateisystems

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Festplatten und Dateisysteme verwenden

df

Zeigt den verfügbaren Speicherplatz auf gemounteten Dateisystemen an.

lsblk

Listen Sie Festplatten und andere Blockgeräte auf.

mount

Mach eine Festplattenpartition zugänglich.

umount

Hänge eine Festplattenpartition aus (mache sie unzugänglich).

fsck

Überprüfe eine Festplattenpartition auf Fehler.

Linux Systeme können mehrere Festplatten oder Partitionen haben. Im allgemeinen Sprachgebrauch werden diese als Geräte, Dateisysteme, Volumes oder sogar Verzeichnisse bezeichnet. Ich werde versuchen, genauer zu sein.

Eine Festplatte ist ein Massenspeicher, der inPartitionen unterteilt sein kann, die als unabhängige Geräte fungieren. Festplatten und Partitionen werden auf Linux-Systemen als spezielle Dateien im Verzeichnis/dev dargestellt. Zum Beispiel könnte /dev/sda7 eine Partition auf deiner Festplatte sein. Einige gängige Geräte in /dev sind:

sda

Erstes Blockgerät, wie SCSI-, SATA- oder USB-Festplatten; Partitionen sind sda1, sda2, ....

sdb

Zweites Blockgerät; Partitionen sind sdb1, sdb2, .... Das Gleiche gilt für sdc, sdd, etc.

md0

Erstes RAID-Gerät; Partitionen sind md0p1, md0p2, .... Das Gleiche gilt für md1, md2, etc.

nvme0n1

Erstes NVMe-SSD-Gerät; Partitionen sind nvme0n1p1, nvme0n1p2, .... Das Gleiche gilt für nvme1n1, nvme2n1, usw. Die zweite Ganzzahl, wie die 1 in nvme0n1p2, wird als Namensraum-ID bezeichnet und kann von den meisten Benutzern ignoriert werden.

Bevor eine Partition Dateien aufnehmen kann, wird sie mit einem Programm formatiert, das ein Dateisystem auf ihr erstellt (siehe "Erstellen und Ändern von Dateisystemen"). Ein Dateisystem definiert, wie Dateien dargestellt werden; Beispiele sind ext4 (ein Linux-Journaling-Dateisystem) und NTFS (ein Microsoft Windows-Dateisystem). Die Formatierung wird in der Regel bei der Installation von Linux vorgenommen.

Nachdem du ein Dateisystem erstellt hast, kannst du es unter verfügbar machen, indem du seine Partition in ein leeres Verzeichnis einhängst.1 Wenn du zum Beispiel ein Windows-Dateisystem in ein Verzeichnis /mnt/win einhängst, wird es Teil des Verzeichnisbaums deines Systems und du kannst Dateien wie/mnt/win/myfile.txt erstellen und bearbeiten. Das Einhängen geschieht in der Regel automatisch beim Booten. Du kannst Partitionen auch aushängen, um sie für Wartungsarbeiten über das Dateisystem unzugänglich zu machen.

df

stdin

stdout

- Akte

-- opt

--help

--version

df[options][disk devices | files | directories]

Der Befehl df (disk free) zeigt dir die Größe, den belegten und den freien Speicherplatz auf einer bestimmten Festplattenpartition an. Wenn du eine Datei oder ein Verzeichnis angibst, beschreibtdf das Festplattengerät, auf dem sich diese Datei oder dieses Verzeichnis befindet. Wenn du keine Argumente angibst, gibt df Auskunft über alle gemounteten Dateisysteme:

df
Filesystem 1k-blocks    Used    Avail Use% Mounted on
/dev/sda     1011928  225464   735060  24% /
/dev/sda9     521748  249148   246096  51% /var
/dev/sda8    8064272 4088636  3565984  54% /usr
/dev/sda10   8064272 4586576  3068044  60% /home

Der Befehl df kann alle möglichen Geräte außer Festplatten auflisten. Um die Anzeige auf Festplatten zu beschränken, probiere diese Optionen aus (und erstelle einen Alias, wenn hilfreich ist):

df -h -x tmpfs -x devtmpfs -x squashfs

Nützliche Optionen

-k

Listengröße in KB (Standardeinstellung).

-m

Listengrößen in MB.

-B N

Anzeigegrößen in Blöcken von N Bytes. (Standard = 1024)

-h

-H

Drucke eine für Menschen lesbare Ausgabe und wähle die am besten geeignete Einheit für jede Größe. Wenn deine beiden Festplatten zum Beispiel 1 Gigabyte bzw. 25 KB frei haben, gibt df -h 1G und 25K aus. Die Option -h verwendet Potenzen von 1024, während -H Potenzen von 1000 verwendet.

-l

Zeigt nur lokale Dateisysteme an, keine vernetzten Dateisysteme.

-T

Füge den Dateisystemtyp (ext3, vfat, etc.) in die Ausgabe ein.

-t type

Zeigt nur Dateisysteme des angegebenen Typs an.

-x type

Zeigt keine Dateisysteme des angegebenen Typs an.

-i

Inode-Modus. Anzeige der gesamten, verwendeten und freien Inodes für jedes Dateisystem anstelle von Festplattenblöcken. Wenn alle Inodes eines Dateisystems verwendet werden, ist das Dateisystem "voll", auch wenn noch freier Speicherplatz vorhanden ist.

lsblk

stdin

stdout

- Akte

-- opt

--help

--version

lsblk[Optionen][Geräte]

Der Befehl lsblk listet die Massenspeicher auf, die als Blockgeräte bezeichnet werden und auf einem Linux-System verfügbar sind, z. B. Festplatten, SSDs und RAM-Disks.

lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda            8:0    0    20G  0 disk
├─sda1         8:1    0     1M  0 part
├─sda2         8:2    0   513M  0 part  /boot/efi
├─sda3         8:3    0  19.5G  0 part  /
sdb            8:80   0   7.6G  0 disk
└─sdb1         8:81   1   7.6G  0 part  /mnt/usb-key

Die Ausgabe zeigt eine Festplatte unter /dev/sda mit drei Partitionen und einen USB-Stick unter /dev/sdb mit einer einzigen Partition. lsblk hat eine Vielzahl von Formatierungsoptionen und kann sich auf bestimmte Geräte beschränken.

lsblk -o NAME,SIZE /dev/sda
NAME    SIZE
sda      20G
├─sda1    1M
├─sda2  513M
└─sda3 19.5G

Nützliche Optionen

-l

Zeige eine einfache Liste statt eines Baums an.

-a

Zeigt alle Blockgeräte an, auch die, die normalerweise ausgeblendet sind.

-f

Füge Informationen über die Dateisysteme auf jedem Gerät hinzu.

-o columns

Drucke nur die angegebenen Spalten, die du als kommagetrennte Liste angibst. Zeige die verfügbaren Spalten mit lsblkan.--help.

-J

Drucke die Liste im JSON-Format aus, damit sie von Programmen leicht verarbeitet werden kann.

montieren

stdin

stdout

- Akte

-- opt

--help

--version

mount[Optionen][Gerät | Verzeichnis]

Der Befehl mount macht eine Partition zugänglich. Am häufigsten werden damit Festplatten (z. B. /dev/sda1) und Wechselmedien (z. B. USB-Sticks) über ein bestehendes Verzeichnis (z. B./mnt/mydir) zugänglich gemacht:

sudo mkdir /mnt/mydirls /mnt/mydir                      Notice it’s emptysudo mount /dev/sda1 /mnt/mydirls /mnt/mydir
file1  file2  file3         Files on the mounted partitiondf /mnt/mydir
Filesystem 1K-blocks   Used  Avail Use% Mounted on
/dev/sda1    1011928 285744 674780  30% /mnt/mydir

mount hat viele Verwendungszwecke; ich beschreibe nur die grundlegendsten. In den meisten Fällen liest mount die Datei /etc/fstab (Dateisystemtabelle, ausgesprochen "F S tab"), um herauszufinden, wie die gewünschte Festplatte eingehängt werden kann. Wenn du zum Beispiel mount /usr aufrufst, sucht der Befehlmount in der Datei /etc/fstab nach "/usr", deren Zeile so aussehen könnte:

/dev/sda8    /usr    ext4    defaults    1    2

Hier erfährt mount, dass das Gerät /dev/sda8 unter/usr als Linux ext4-formatiertes Dateisystem mit Standardoptionen eingehängt werden soll. Hänge es mit einem der beiden Befehle ein:

sudo mount /dev/sda8     By devicesudo mount /usr          By directory

mount wird normalerweise vom Superuser ausgeführt, aber gängige Wechseldatenträger wie USB-Sticks und DVDs können oft von jedem Benutzer ein- und ausgehängt werden.

Nützliche Optionen

-t type

Gib den Typ des Dateisystems an, z. B. ext4 oder ntfs.

-l

Alle gemounteten Dateisysteme auflisten; funktioniert auch mit -t.

-a

Hängt alle in /etc/fstab aufgeführten Dateisysteme ein. Ignoriert Einträge, die die Option noauto enthalten. Funktioniert auch gut mit -t.

-r

Hänge das Dateisystem schreibgeschützt ein (siehe die Manpage für Haftungsausschlüsse).

umount

stdin

stdout

- Akte

-- opt

--help

--version

umount[Optionen][Gerät | Verzeichnis]

umount bewirkt das Gegenteil von : Es macht eine Festplattenpartition über das Dateisystem unerreichbar. mount2 Wenn du z.B. einen USB-Stick gemountet hast, hänge ihn aus, bevor du ihn aussteckst:

umount "/media/smith/My Vacation Photos"

Trenne immer die Verbindung zu einem Wechseldatenträger, bevor du ihn auswirfst, vor allem wenn er beschreibbar ist, sonst riskierst du eine Beschädigung des Dateisystems. So hängst du alle eingehängten Geräte aus:

sudo umount -a

Hänge kein Dateisystem aus, das gerade in Gebrauch ist; der Befehl umountverweigert dies aus Sicherheitsgründen sogar.

fsck

stdin

stdout

- Akte

-- opt

--help

--version

fsck[Optionen][Geräte]

Der Befehl fsck (Dateisystemprüfung) prüft ein Linux-Dateisystem und repariert auf Wunsch gefundene Fehler. fsck Der Befehl wird automatisch beim Booten deines Systems oder manuell ausgeführt. Im Allgemeinen solltest du ein Gerät aushängen, bevor du es überprüfst, damit keine anderen Programme zur gleichen Zeit darauf laufen:

sudo umount /dev/sda10sudo fsck -f /dev/sda10
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/home: 172/1281696 files (11.6% non-contiguous), ...

Du kannst fsck nicht verwenden, um dein Root-Dateisystem zu reparieren, während dein System normal läuft. Boote zuerst von einem Linux USB-Stick oder einem anderen Rettungsmedium und führe dann fsck aus.

fsck ist ein Frontend für eine Reihe von Befehlen zur Überprüfung von Dateisystemen, die in /sbin zu finden sind und deren Namen mit "fsck" beginnen. Es werden nur bestimmte Arten von Dateisystemen unterstützt; diese werden mit dem Befehl aufgelistet:

ls /sbin/fsck.* | cut -d. -f2 | column
cramfs     ext3       fat        hfsplus    msdos
ext2       ext4       hfs        minix      vfat

Nützliche Optionen

-A

Überprüfe alle Festplatten, die in der /etc/fstab aufgeführt sind, in dieser Reihenfolge.

-f

Erzwinge die Ausführung von fsck, auch wenn keine Fehler erkennbar sind.

-N

Gib eine Beschreibung der Prüfung aus, die durchgeführt werden würde, aber beende die Prüfung, ohne sie durchzuführen.

-r

Behebe Fehler interaktiv mit Eingabeaufforderung vor jeder Korrektur.

-a

Fehler automatisch beheben (nur verwenden, wenn du wirklich weißt, was du tust; andernfalls kannst du ein Dateisystem ernsthaft durcheinander bringen).

Erstellen und Ändern von Dateisystemen

mkfs

Formatiere eine Festplattenpartition (erstelle ein Dateisystem darauf).

resize2fs

Vergrößere oder verkleinere eine Festplattenpartition.

e2label

Ändere das Volume-Label auf einer Festplattenpartition.

Festplattenbezogene Vorgänge wie Partitionierung und Formatierung können auf der Kommandozeile sehr komplex sein. Für alles, was komplizierter ist als das Formatieren einer einzelnen Partition, empfehle ich eine grafische Anwendung wie gparted. Ehrlich gesagt, ist es einfacher und weniger fehleranfällig.

Trotzdem führe ich noch ein paar Operationen auf der Kommandozeile aus, die schnell und einfach sind. Eine davon ist die Auflistung der Partitionen einer Speicherung wie /dev/sda mit fdisk:

sudo fdisk -l /dev/sda
Disk /dev/sda: 20 GiB, 21474836480 bytes, ...
⋮
Device       Start      End  Sectors  Size Type
/dev/sda1     2048     4095     2048    1M BIOS boot
/dev/sda2     4096  1054719  1050624  513M EFI System
/dev/sda3  1054720 41940991 40886272 19.5G Linux

oder ähnlich mit parted:

sudo parted /dev/sda -- print

Eine weitere Möglichkeit ist , die Partitionstabelle einer Speicherung zu exportieren. (Speichere sie auf einem USB-Stick oder einem anderen Gerät, nicht auf der Festplatte, an der du gerade arbeitest!

sudo sfdisk -d /dev/sda > /mnt/thumb/sda.txt

Wenn du später einen riskanten Partitionierungsvorgang vermasselst, kannst du die Partitionstabelle wiederherstellen (aber achte darauf, dass du das richtige Festplattengerät angibst, sonst überschreibst du die falsche Partitionstabelle):

sudo sfdisk /dev/device < /mnt/thumb/sda.txt

Die folgenden Befehle sind ebenfalls relativ grundlegende Operationen auf Festplatten und Dateisystemen ohne grafische Werkzeuge.

mkfs

stdin

stdout

- Akte

-- opt

--help

--version

mke2fs[Optionen] Gerät

mkfs.ext3[Optionen] Gerät

mkfs.ext4[Optionen] Gerät

mkntfs[Optionen] Gerät

mkfs.ntfs[options] device ...und viele andere Varianten...

Die mkfs Befehlsfamilie formatiert ein Linux Speichergerät für eine Vielzahl von Dateisystemen. Bei der Speicherung handelt es sich normalerweise um eine Partition, z. B. /dev/sdb1.

Warnung

mkfs löscht ein Speichergerät. Vergewissere dich, dass der Gerätename, den du angibst, der richtige ist!

Beispiele:

sudo mkfs.ext4 /dev/device    Standard Linux filesystemsudo mke2fs /dev/device       Standard Linux filesystemsudo mkfs.ntfs /dev/device    Microsoft Windows filesystemsudo mkntfs /dev/device       Microsoft Windows filesystem

Wie du siehst, bestehen die meisten Befehlsnamen aus "mkfs", gefolgt von einem Punkt und einem Dateisystemtyp, wie mkfs.ext4. Sie können auch alternative Namen (Links) haben, bei denen der Dateisystemtyp in der Mitte von "mkfs" eingebettet ist, wie z. B. mke2fs für ein "ext"-Dateisystem. Um alle auf deinem System installierten Befehle aufzulisten, führe aus:

ls /usr/*bin/mkfs.*
/usr/sbin/mkfs.ext2    /usr/sbin/mkfs.hfs
/usr/sbin/mkfs.ext3    /usr/sbin/mkfs.minix
/usr/sbin/mkfs.ext4    /usr/sbin/mkfs.msdos
/usr/sbin/mkfs.fat     /usr/sbin/mkfs.ntfs

Nützliche Optionen

-n

Trockenlaufmodus: Formatiere nichts. Zeige nur an, was gemacht werden würde.

-L name

Beschriftet das formatierte Volume mit dem angegebenen Namen, der bis zu 16 Byte lang sein kann.

-b N

Setze die Blockgröße auf N Bytes.

resize2fs

stdin

stdout

- Akte

-- opt

--help

--version

resize2fs[options] device[size]

Der Befehl resize2fs vergrößert oder verkleinert ein Standard-Linux-Dateisystem vom Typ ext2, ext3 oder ext4. Um ein Dateisystem zu vergrößern:

  1. Vergewissere dich, dass das Gerät über genügend freien Speicherplatz direkt nach der aktuellen Partition verfügt.

  2. Hänge das Dateisystem wieder aus.

  3. Vergrößere seine Festplattenpartition mit gparted oder einem ähnlichen Programm. (Dazu brauchst du freien Speicherplatz direkt hinter der aktuellen Partition.)

  4. Überprüfe das Dateisystem mit fsck.

  5. Führe resize2fs mit den entsprechenden Argumenten aus. In modernen Kerneln kann das Dateisystem während der Größenänderung eingehängt werden.

Um ein Dateisystem zu verkleinern:

  1. Bestätige mit df, dass die Daten im Dateisystem (die Spalte "Verwendet") in die vorgeschlagene neue Größe passen.

  2. Hänge das Dateisystem wieder aus.

  3. Führe resize2fs mit den entsprechenden Argumenten aus.

  1. Verkleinere seine Festplattenpartition mit gparted oder einem ähnlichenProgramm.

  2. Überprüfe das Dateisystem mit fsck.

Um die Größe eines Dateisystems auf /dev/sda1 zu ändern, vorausgesetzt, du hast die Überprüfung und Partitionierung bereits abgeschlossen, führe resize2fs entweder mit oder ohne Größenangabe aus:

sudo resize2fs /dev/sda1 100G   Resize to 100 GBsudo resize2fs /dev/sda1        Resize to the partition size

Größen können eine absolute Anzahl von Blöcken sein, wie 12345690, oder eine Größe gefolgt von K (KB), M (MB), G (GB), T(Terabyte) oder s (512-Byte-Sektoren). Die Werte sind Zweierpotenzen, d.h. 1K bedeutet 1024, nicht 1000 und so weiter.

Wenn du die Größe deines Dateisystems häufig änderst, solltest du dir das Leben mit Logical Volume Management (LVM), wie in "Logical Volumes für flexible Speicherung" erklärt , oder mit einem moderneren Dateisystem, wie in "ZFS: Ein modernes Dateisystem, das alles kann", erleichtern .

Nützliche Optionen

-f

Erzwinge die Größenänderung, auch wenn resize2fs sich beschwert.

-p

Zeigt den Fortschritt des Vorgangs an, während er ausgeführt wird.

e2label

stdin

stdout

- Akte

-- opt

--help

--version

e2label device[label]

Ein Label ist ein Spitzname für ein Dateisystem. Der Befehle2label setzt oder druckt das Label eines Standard-Linux-Dateisystems vom Typ ext2, ext3 oder ext4. Dateisysteme brauchen keine Labels, aber sie sind praktisch, um in der /etc/fstab auf Dateisysteme zu verweisen.

sudo e2label /dev/sdb1 backups        Assign a labelsudo e2label /dev/sdb1                Print a label
backups

RAID-Arrays für Redundanz

mdadm

Verwalte RAID-Arrays.

RAID (Redundant Array of Independent Disks) ist eine Technik, bei der die Daten eines Computers transparent auf mehrere Festplatten verteilt werden, während sie sich wie eine einzige Platte verhalten. Normalerweise dient RAID der Redundanz - wenn eine Festplatte ausfällt, sind deine Dateien noch intakt. Andere Arten von RAID erhöhen die Leistung der Speicherung.

Ein Bündel von Festplatten in einer RAID-Anordnung wirdRAID-Array genannt. Die Art des RAID, der sogenannteRAID-Level, bestimmt, wie viele Festplattenausfälle der Verbund verkraften kann und die Sicherheit der Daten trotzdem gewährleistet ist. Einige Standard-RAID-Level sind RAID-0, RAID-1, RAID-5, RAID-10 und andere, die du im Internet finden kannst.

Erstellen wir ein minimales RAID-1-Array mit der gängigsten RAID-Software für Linux, mdadm. RAID-1 sorgt für Redundanz, indem es die Daten von einem Laufwerk auf die anderen im Array spiegelt. Solange ein Laufwerk noch funktioniert, sind die Daten sicher. In diesem Beispiel beginne ich mit zwei Festplatten, /dev/sdf und /dev/sdg, von denen jede eine 10 GB große Partition hat, /dev/sdf1 und /dev/sdg1. Die Schritte, die ich zeige, sind für andere RAID-Level und zusätzliche Geräte weitgehend identisch. Alle Details findest du imLinux Raid Wiki.

Warnung

RAID-Operationen können Dateisysteme ohne Bestätigung löschen. Übe die Befehle zur Sicherheit auf Ersatzlaufwerken oder einer virtuellen Maschine.

Ein RAID-Array erstellen

Zunächst zeigt , dass noch kein RAID-Setup existiert:

cat /proc/mdstat
Personalities :                No RAID types listed

Erstelle das RAID-1-Array /dev/md1 aus den beiden Partitionen:

sudo mdadm --create /dev/md1 --level 1 \ 
  --raid-devices 2 /dev/sdf1 /dev/sdg1

Sieh dir /proc/mdstat erneut an. Die Zeile Personalities zeigt jetzt, dass RAID-1 verwendet wird, und die nächste Zeile zeigt das neue Array, md1, das gerade erstellt wird:

cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdg1[1] sdf1[0]
      10474496 blocks super 1.2 [2/2] [UU]
      [=========>...........]  resync = 45.8% ...
                               finish=0.4min ...

Optional kannst du warten, bis der Build ("resync") abgeschlossen ist:

cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdg1[1] sdf1[0]
      10474496 blocks super 1.2 [2/2] [UU]

Du musst aber nicht warten. Das Array ist sofort einsatzbereit. Formatiere und montiere es wie jedes andere Speichermedium:

sudo mke2fs /dev/md1                Format the arraysudo mkdir /mnt/raid                Mount itsudo mount /dev/md1 /mnt/raiddf -h /mnt/raid                     View it
Filesystem      Size  Used Avail Use% Mounted on
/dev/md1        9.9G   24K  9.4G   1% /mnt/raid

Führe lsblk aus, um die RAID-Konfiguration zu veranschaulichen:

lsblk
⋮
sdf            8:80   0    10G  0 disk
└─sdf1         8:81   0    10G  0 part
  └─md1        9:1    0    10G  0 raid1 /mnt/raid
sdg            8:96   0    10G  0 disk
└─sdg1         8:97   0    10G  0 part
  └─md1        9:1    0    10G  0 raid1 /mnt/raid

Führe mdadm aus, um mehr Details über das Array zu erfahren:

sudo mdadm --detail /dev/md1
dev/md1:
  ⋮
  Creation Time : Thu Jul 20 13:15:08 2023
     Raid Level : raid1
     Array Size : 10474496 (9.99 GiB 10.73 GB)
   Raid Devices : 2
          State : clean
Working Devices : 2
  ⋮
Number  Major  Minor  RaidDevice State
  0      8      81       0       active sync /dev/sdf1
  1      8      97       1       active sync /dev/sdg1

Wenn du mit dem Array zufrieden bist, speichere seine Konfiguration, damit es Neustarts übersteht und sich selbst einbinden kann. Überspringe keine Schritte.

  1. Speichere die RAID-Konfiguration in einer Datei:

    sudo mdadm --detail --scan --verbose > /tmp/raidcat /tmp/raid
    ARRAY /dev/md1 level=raid1 num-devices=2 ...
  2. Verwende einen Texteditor, um den Inhalt von /tmp/raid an die Konfigurationsdatei /etc/mdadm/mdadm.conf anzuhängen, und ersetze damit alle vorherigen RAID-Konfigurationen.

  3. Führe diesen Befehl aus, um den Linux-Kernel zu aktualisieren:

    sudo update-initramfs -u
  4. Starte neu. Überprüfe, ob dein RAID-Verbund überlebt hat, indem du ihn von Hand einhängst:3

    sudo mount /dev/md1 /mnt/raid
  5. Wenn alles geklappt hat, füge diese Zeile zu /etc/fstab hinzu, damit dein RAID-Verbund beim Booten gemountet wird :

    /dev/md1  /mnt/raid  ext4  defaults  0  2
Warnung

Aktualisiere die /etc/fstab nicht zu früh. Wenn deine RAID-Konfiguration ein Problem hat und du neu startest, könnte sich der Computer aufhängen. Teste die Konfiguration stattdessen zuerst, indem du neu startest und das Array von Hand einhängst, so wie ich es getan habe.

Ersetzen eines Geräts in einem RAID-Array

So, dein RAID-Verbund läuft und läuft. Was passiert, wenn ein Gerät stirbt und ersetzt werden muss? Zunächst wird der Ausfall in/proc/mdstat angezeigt. Das fehlgeschlagene Gerät, /dev/sdf1, wird mit (F) markiert und die Betriebszeitanzeige, die [UU] (zwei Geräte in Betrieb) lauten sollte, lautet [U_] (erstes Gerät in Betrieb, zweites Gerät ausgefallen).

cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdf1[1](F) sdg1[0]
      10474496 blocks super 1.2 [2/1] [U_]

mdadm zeigt auch das Array als "degradiert" und das Gerät als "fehlerhaft" an:

sudo mdadm --detail /dev/md1
/dev/md1:
   ⋮
      Raid Devices : 2
             State : clean, degraded
   Working Devices : 1
    Failed Devices : 1
   ⋮
    Number  Major  Minor   RaidDevice State
       1      8      97        -      faulty /dev/sdf1

Um das Gerät /dev/sdf1 zu ersetzen, markiere es als fehlgeschlagen (falls es das nicht schon ist) und entferne es aus dem RAID-Verbund:

sudo mdadm --manage /dev/md1 --fail /dev/sdf1sudo mdadm --manage /dev/md1 --remove /dev/sdf1

Schalte den Computer aus, ziehe das Netzkabel ab und tausche die fehlgeschlagene Speicherung physisch gegen eine neue mit der gleichen oder einer größeren Größe aus. Ich werde es mit dem nicht existierenden Namen /dev/NEW bezeichnen, um es in meiner Anleitung klar zu unterscheiden, weil die folgenden Befehle destruktiv sind und du deine Laufwerke nicht verwechseln willst. Ersetze den richtigen Gerätenamen in deinem System.

Starte den Computer, identifiziere ein gutes Laufwerk im RAID-Verbund (in unserem Fall /dev/sdg) und kopiere dessen Partitionstabelle mit dem Befehl sgdisk auf das neue Gerät.

sudo sgdisk -R /dev/NEW /dev/sdg   Copy from sdg to NEWsudo sgdisk -G /dev/NEW            Randomize GUIDs

Das Gerät /dev/NEW hat jetzt eine 10 GB große Partition, /dev/NEW1. Füge sie dem Array hinzu:

sudo mdadm --manage /dev/md1 --add /dev/NEW1
mdadm: added /dev/NEW1

Das Array beginnt sofort mit dem Wiederaufbau und spiegelt die Daten auf das neue Gerät:

cat /proc/mdstat
⋮
[==========>..........]  recovery = 51.5% ...
                         finish=0.4min ...

Wenn die Spiegelung abgeschlossen ist, hat das neue Gerät /dev/NEW1 das fehlerhafte Gerät /dev/sdf1 ersetzt:

cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 NEW1[1] sdg1[0]
      10474496 blocks super 1.2 [2/2] [UU]

Ein RAID-Array zerstören

Solltest du jemals den RAID-Verbund zerstören und die Partitionen für andere Zwecke verwenden wollen, führe diese Befehle aus, vorausgesetzt, deine Gerätenamen sind /dev/sdg1 und /dev/sdh1:

sudo umount /mnt/raidsudo mdadm --stop /dev/md1
mdadm: stopped /dev/md1
→ sudo mdadm --zero-superblock /dev/sdg1 /dev/sdh1

Schließlich aktualisierst du /etc/fstab und /etc/mdadm/mdadm.conf, um das RAID-Array /dev/md1 zu entfernen und dem Kernel mitzuteilen, dass das Array verschwunden ist:

sudo update-initramfs -u

Logische Volumes für flexible Speicherung

pvcreate

Erstelle ein physisches Volume.

pvdisplay

Details zu den physischen Bänden anzeigen.

pvremove

Lösche ein physisches Volume.

pvs

Weitere Details zu physischen Bänden anzeigen.

vgcreate

Erstelle eine Volume-Gruppe.

vgdisplay

Details zu den Volumengruppen anzeigen.

vgextend

Füge physische Volumes zu einer Volume-Gruppe hinzu.

vgreduce

Entferne physische Volumes aus einer Volume-Gruppe.

vgremove

Lösche eine Volume-Gruppe.

lvcreate

Erstelle ein logisches Volume.

lvdisplay

Details zu den logischen Volumes anzeigen.

lvresize

Ändere die Größe eines logischen Volumens.

lvremove

Lösche ein logisches Volume.

Logical Volume Management (LVM) löst zwei lästige Probleme bei der Speicherung von Festplatten:

  • Begrenzte Größe. Wenn eine Festplatte voll ist, musst du Dateien löschen oder sie durch eine größere Festplatte ersetzen.

  • Feste Partitionen. Wenn du eine Festplatte partitionierst, schätzt du, wie viel Platz jede Partition benötigen wird, und wenn du dich irrst, ist es zeitaufwändig, das zu ändern.

LVM löst diese Probleme, indem es eine Abstraktionsebene um die physische Speicherung legt. Es fasst eine Reihe von physischen Festplatten beliebiger Größe zusammen, die so genannten physischen Volumes, um eine große Festplatte zu simulieren, die es Volume Group nennt. Die Volume-Gruppe wird zu einer Spielwiese für die Erstellung von simulierten Partitionen, den so genannten logischen Volumes, die bei Bedarf wachsen und schrumpfen können. Abbildung 4-1 zeigt die Beziehung zwischen physischen Volumes (PVs), der Volume-Gruppe (VG), die sie enthält, und logischen Volumes (LVs), die du aus dem gesamten Speicherplatz herausschneidest. Wenn der VG der Platz ausgeht, fügst du einfach ein weiteres physisches Volume hinzu und die VG wächst. Wenn eine Partition (LV) die falsche Größe hat, änderst du sie einfach. Bestehende Dateien bleiben erhalten. Alle Massenspeicher können Teil einer Volume Group sein, sogar RAID-Arrays, die mit mdadm erstellt wurden (siehe "RAID-Arrays für Redundanz").

LVM concepts. Physical volumes (PV) are collected into a volume group (VG). Logical volumes (LV) are carved out of the VG.
Abbildung 4-1. LVM-Konzepte. Physische Volumes (PV) werden in einer Volume Group (VG) zusammengefasst. Logische Volumes (LV) werden aus der VG ausgegliedert.

Die beliebteste LVM-Software für Linux heißt lvm2. Sie enthält über 50 Befehle, was dir vielleicht viel vorkommt, aber ihre Namen folgen einem einfachen Muster: pv, vg oder lv, gefolgt von einem Verb wie create, remove oder display. vgcreate erstellt also eine Volume-Gruppe, und pvdisplay gibt Informationen über ein physisches Volume aus.

Warnung

LVM-Operationen können Dateisysteme ohne Bestätigung löschen. Übe die Befehle zur Sicherheit auf Ersatzlaufwerken oder einer virtuellen Maschine.

Außerdem bietet LVM keine inhärente Redundanz. Wenn ein physisches Volume ausfällt, verliert man die gesamte Volume-Gruppe. Mehr Sicherheit erhältst du, wenn du LVM zusätzlich zu RAID einsetzt; siehe "RAID-Arrays für Redundanz".

Ich zeige jetzt Beispiele für die Verwendung der gängigsten lvm2-Befehle anhand von drei leeren 10-GB-Festplattenpartitionen, /dev/sdb1, /dev/sdc1 und/dev/sdd1.4 lvm2 hat aber noch Dutzende weiterer Befehle. Eine vollständige Liste findest du in der Manpage eines beliebigen lvm2-Befehls, wenn du zum Ende springst, oder aufsourceware.org/lvm2.

Ein erstes logisches Volume erstellen

Diese Abfolge von Schritten richtet zwei physische Volumes ein, gruppiert sie in eine 20 GB große Volume-Gruppe, myvg, und erstellt ein 15 GB großes logisches Volume,stuff:

sudo pvcreate /dev/sdb1 /dev/sdc1        Create two PVs
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
→ sudo vgcreate myvg /dev/sdb1 /dev/sdc1   Create a VG
  Volume group "myvg" successfully created
→ sudo lvcreate -L 15G -n stuff myvg       Create the LV
  Logical volume "stuff" created.
→ sudo pvs                                 View the PVs
  PV         VG   Fmt  Attr PSize    PFree
  /dev/sdb1  myvg lvm2 a--  <10.00g      0
  /dev/sdc1  myvg lvm2 a--  <10.00g  5.34g

Das logische Volume kann wie jedes andere Speichermedium verwendet werden. Formatiere und binde es ein:

sudo mke2fs /dev/myvg/stuff            Format the LVsudo mkdir /mnt/stuff                  Mount itsudo mount /dev/myvg/stuff /mnt/stuffdf -h /mnt/stuff                       View it
Filesystem             Size Used Avail Use% Mounted on
/dev/mapper/myvg-stuff  15G  24K  1.4G   1% /mnt/stuff

Wenn dein LV fertig ist, füge diese Zeile zu /etc/fstab hinzu, um es beim Booten einzuhängen:

/dev/mapper/myvg-stuff  /mnt/stuff  ext4  defaults  0 2

LVM Details ansehen

Die Befehle pvdisplay, vgdisplay , und lvdisplay geben Details über physische Volumes, Volume-Gruppen und logische Volumes aus. Die Befehle pvs, vgs , und lvs geben hilfreiche Zusammenfassungen dieser Informationen aus.

sudo pvdisplay              Show all PVssudo pvdisplay /dev/sdb1    Show selected PVssudo pvs                    Summarize PVssudo vgdisplay              Show all VGssudo vgdisplay myvg         Show selected VGssudo vgs                    Summarize VGssudo lvdisplay              Show all LVssudo lvdisplay myvg/stuff   Show selected LVssudo lvs                    Summarize LVs

Ein logisches Volume hinzufügen

Führen wir erneut aus lvcreate , um ein 2 GB großes logisches Volume namens tiny zu unserer Volume-Gruppe hinzuzufügen:

sudo lvcreate -L 2G -n tiny myvg
  Logical volume "tiny" created.
→ sudo mke2fs /dev/myvg/tiny                  Formatsudo mkdir /mnt/tiny                        Mountsudo mount /dev/myvg/tiny /mnt/tinydf -h /mnt/tiny                             View
Filesystem             Size Used Avail Use% Mounted on
/dev/mapper/myvg-tiny  2.0G  24K  1.9G   1% /mnt/tiny

Festplatten zu einer Volume-Gruppe hinzufügen

Der Befehl vgextend fügt physische Volumes zu einer Volume-Gruppe hinzu. Angenommen, du möchtest die Größe deiner Daten um 10 GB (auf 25 GB) erhöhen, aber in der Volume-Gruppemyvg sind nur noch 3 GB Platz. Vergrößere deine VG, indem du ein drittes physisches Volume, /dev/sdd1, hinzufügst, wodurch die Gesamtgröße der VG auf 30 GB erhöht wird:

sudo pvcreate /dev/sdd1           Create another PVsudo vgextend myvg /dev/sdd1      Grow the VG

Zu diesem Zeitpunkt sieht die LVM-Konfiguration wie in Abbildung 4-1 aus. Führe lsblk aus, um die LVM-Konfiguration zu veranschaulichen:

lsblk /dev/sdb /dev/sdc /dev/sdd
NAME           MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb              8:16   0  10G  0 disk
└─sdb1           8:17   0  10G  0 part
  └─myvg-stuff 253:0    0  15G  0 lvm  /mnt/stuff
sdc              8:32   0  10G  0 disk
└─sdc1           8:33   0  10G  0 part
  ├─myvg-stuff 253:0    0  15G  0 lvm  /mnt/stuff
  └─myvg-tiny  253:1    0   2G  0 lvm  /mnt/tiny
sdd              8:48   0  10G  0 disk
└─sdd1           8:49   0  10G  0 part

Ein logisches Volume vergrößern

Der Befehl lvresize vergrößert oder verkleinert ein logisches Volume.5 Vergrößern wir den LV-Stoff auf 25 GB:

sudo lvresize --resizefs --size 25G /dev/myvg/stuffdf -h /mnt/stuff
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/myvg-stuff  25G  24K   24G   1% /mnt/stuff

Verkleinern eines logischen Volumens

Es sich heraus, dass der LV-Speicher nicht so groß sein muss. Verkleinere ihn auf 8 GB (stelle vorher sicher, dass er weniger als 8 GB belegt):

sudo lvresize --resizefs --size 8G /dev/myvg/stuff
Do you want to unmount "/mnt/stuff" ? [Y|n] y
⋮
Logical volume myvg/stuff successfully resized.
→ df -h /mnt/stuff
Filesystem              Size Used Avail Use% Mounted on
/dev/mapper/myvg-stuff  7.9G  24K  7.5G   1% /mnt/stuff

Ein logisches Volume löschen

Der Befehl lvremove löscht ein logisches Volume. Lass uns das LV tiny loswerden:

sudo umount /mnt/tiny            First unmount the LVsudo lvremove /dev/myvg/tiny     Remove the LV
Do you really want to remove and DISCARD
active logical volume myvg/tiny? [y/n]: y
  Logical volume "tiny" successfully removed

Verkleinern einer Volumengruppe

Der Befehl vgreduce entfernt ein unbenutztes physisches Volume aus einer Volume-Gruppe. Das PV wird weiterhin von lvm2 verwaltet, nur nicht innerhalb der VG myvg:

sudo vgreduce myvg /dev/sdd1
  Removed "/dev/sdd1" from volume group "myvg"

Löschen einer Volume-Gruppe

Der Befehl vgremove entfernt eine Volume-Gruppe und löscht alle logischen Volumes, die sie enthält:

sudo vgremove myvg
Do you really want to remove volume group "myvg"
containing 1 logical volumes? [y/n]: y
Do you really want to remove and DISCARD
active logical volume myvg/stuff? [y/n]: y
  Logical volume "stuff" successfully removed
  Volume group "myvg" successfully removed

Physisches Volume löschen

Der Befehl pvremove entfernt physische Geräte aus dem LVM:

sudo pvremove /dev/sdb1 /dev/sdc1
  Labels on physical volume "/dev/sdb1" wiped.
  Labels on physical volume "/dev/sdc1" wiped.

ZFS: Ein modernes Dateisystem, das alles kann

zpool

Konfiguriere einen ZFS-Speicherpool.

zfs

Konfiguriere ein ZFS-Dataset.

Warnung

ZFS-Operationen können Dateisysteme ohne Bestätigung löschen. Übe die Befehle zur Sicherheit auf Ersatzlaufwerken oder einer virtuellen Maschine.

ZFS (Zettabyte File System) vereint fortschrittliche Funktionen wie RAID, logische Datenträgerverwaltung, Verschlüsselung und Komprimierung in einem praktischen Paket. Wenn du an traditionelle Linux-Dateisysteme wie ext4 gewöhnt bist, mag dir ZFS wie eine fremde Welt vorkommen. Es hat seine eigene Terminologie mit "Pools" und "vdevs". Es verwendet weder /etc/fstab noch den Befehl mount. Du musst deine Festplatten nicht einmal explizit partitionieren oder formatieren.

Ein ZFS vdev, kurz für "virtuelles Gerät", ist eine Gruppe von physischen Festplatten, die zusammenarbeiten. Sie können die Daten untereinander aufteilen, als ob sie eine einzige große Festplatte wären, wie bei einem RAID-0 "Disk-Striping"-System. Sie können sich gegenseitig spiegeln, um Redundanz zu gewährleisten, wie bei einem RAID-1-Verbund. Sie können als Festplatten-Cache fungieren, und es gibt noch weitere Möglichkeiten.

Eine Sammlung von vdevs wird als Pool bezeichnet. Ein Pool verhält sich wie ein großes Speichergerät. Du kannst ihn in Einheiten unterteilen, die ähnlich wie Partitionen sind, die so genannten Datasets, und du kannst ihre Größenbegrenzungen und andere Attribute flexibel ändern. Dataset-Namen sehen aus wie Linux-Pfade ohne einen führenden Schrägstrich. Ein Pool mit dem Namen mypool und einem Dataset mit dem Namen stuff würde zum Beispiel mypool/stuff heißen. (Datasets können auch andere Datasets enthalten, z. B.mypool/stuff/important.) Wenn du einen führenden Schrägstrich hinzufügst, erhältst du den Standard-Linux-Einhängepunkt des Datasets, z. B. /mypool/stuff.

ZFS ist nicht das einzige Dateisystem mit fortschrittlichen Funktionen - ein weiteres beliebtes ist Btrfs-, aber es ist mit am einfachsten zu konfigurieren.

Hinweis

Ich bespreche nur die minimale ZFS-Funktionalität, um interessante Dinge zu tun. Echte ZFS-Systeme brauchen eine sorgfältige Konfiguration, ein Tuning und viel Arbeitsspeicher; lies die Dokumentation unter https://oreil.ly/-t5Fu.

Um ZFS mit Mirroring und Striping zu demonstrieren, verwende ich zwei Festplattenpaare, wie in Abbildung 4-2. Jedes Paar ist ein vdev mit Spiegelung (RAID-1). ZFS strippt dann über die beiden Vdevs (RAID-0), wodurch ein RAID-10-Setup entsteht. Dieser redundante Pool kann ein fehlgeschlagenes Laufwerk in jedem Vdev tolerieren und die Daten sicher halten.

Our example ZFS configuration: a RAID-10 pool
Abbildung 4-2. Unsere Beispiel-ZFS-Konfiguration: ein RAID-10-Pool

Einen ZFS-Pool erstellen

Verwende den Befehl zpool , um einen Pool aus zwei gespiegelten Laufwerkspaaren zu erstellen. Ich erstelle einen Pool namens mypool aus vier 10-GB-Laufwerken, /dev/sdb, /dev/sdc,/dev/sdd und /dev/sde:

sudo zpool create mypool \
  mirror /dev/sdb /dev/sdc \
  mirror /dev/sdd /dev/sde
Warnung

Die einfachen Gerätenamen in meinen Beispielen, wie /dev/sdb, können sich nach einem Neustart ändern. Für eine robustere Einrichtung solltest du Namen verwenden, die sich garantiert nicht ändern, wie die symbolischen Links in /dev/disk/by-id oder/dev/disk/by-uuid.

Auf realen Systemen solltest du außerdem sicherstellen, dass du bei der Erstellung mit -o ashift einen angemessenen Wert für die Ausrichtungsverschiebung einstellst; siehe die Dokumentation.

Verwende zpool status, um die Ergebnisse von anzuzeigen.

zpool status
  pool: mypool
 state: ONLINE
config:
  NAME        STATE     READ WRITE CKSUM
  mypool      ONLINE       0     0     0   The pool
    mirror-0  ONLINE       0     0     0   First vdev
      sdb     ONLINE       0     0     0
      sdc     ONLINE       0     0     0
    mirror-1  ONLINE       0     0     0   Second vdev
      sdd     ONLINE       0     0     0
      sde     ONLINE       0     0     0

Ein ZFS-Dataset erstellen

Traditionelle Dateisysteme haben Partitionen mit fester Größe, die du in der Datei /etc/fstab einhängst. ZFS hat Datasets mit beliebiger Größe, die es automatisch einhängt. Erstelle ein Dataset mit dem Namen data im Pool mypool, das in das Verzeichnis /mypool/data eingehängt wird:

sudo zfs create -o mypool/data

Verschiebe den Einhängepunkt, wenn du willst, nach /mnt/stuff:

sudo zfs set mountpoint=/mnt/stuff mypool/data

Zeige die Ergebnisse mit einem dieser Befehle an:

zfs mount
mypool           /mypool        The whole pool
mypool/data      /mnt/stuff     Your datasetzfs get mountpoint mypool/data
NAME         PROPERTY    VALUE       SOURCE
mypool/data  mountpoint  /mnt/stuff  local

Jetzt kannst du das Dataset wie jede andere gemountete Partition verwenden:

sudo cp /etc/hosts /mnt/stuffcd /mnt/stuffls
hosts

Ein verschlüsseltes ZFS-Dataset erstellen

Wenn du ein paar Optionen hinzufügst, kannst du einen Datensatz erstellen, der verschlüsselt ist und vor dem Einhängen eine Passphrase erfordert. Erstelle ein verschlüsseltes Dataset mit dem Namen mypool/cryptic:

zfs create \
  -o encryption=on \
  -o keylocation=prompt \
  -o keyformat=passphrase \
  mypool/cryptic
Enter new passphrase: xxxxxxxx
Re-enter new passphrase: xxxxxxxx

Verwende das Dataset normal. Wenn du das Dataset neu startest oder aus anderen Gründen mounten musst, führe aus:

sudo zfs mount -l mypool/cryptic

Größenbeschränkungen für ZFS-Datensätze festlegen

Standardmäßig hat ein ZFS-Dataset die gleiche Größe wie der Pool. Begrenze seine Größe, indem du eine Quote festlegst, die du jederzeit ändern kannst:

sudo zfs set quota=15g mypool/datazfs list
NAME         USED  AVAIL REFER  MOUNTPOINT
mypool       312K  18.4G   25K  /mypool
mypool/data   24K  15.0G   24K  /mnt/stuff   15 GB limit

Aktiviere die Komprimierung von ZFS-Datensätzen

ZFS kann Daten automatisch komprimieren, wenn sie geschrieben werden, und sie dekomprimieren, wenn sie gelesen werden. Es unterstützt verschiedene Komprimierungsalgorithmen; hier verwende ich die gzip-Komprimierung und sehe mir an, wie effektiv die Dateien komprimiert werden (das Kompressionsverhältnis):

sudo zfs set compression=gzip mypool/datacp hugefile /mnt/stuff      Store a big filezfs get compressratio       See the compression ratio
NAME           PROPERTY       VALUE  SOURCE
mypool         compressratio  122.66x  -
mypool/data    compressratio  126.12x  -

Wenn du die Komprimierung aktivierst, werden nur neue Daten komprimiert; bestehende Dateien werden nicht komprimiert. Um die Komprimierung zu deaktivieren:

sudo zfs set compression=off mypool/data

Snapshot eines ZFS-Datensatzes

ZFS unterstützt Snapshots:speichert den Zustand eines Datensatzes, so dass du später leicht zu diesem Zustand zurückkehren kannst (Rollback). Bevor du z. B. eine riskante Änderung an deinen Dateien vornimmst, kannst du einen Snapshot erstellen und die Änderung mit einem einzigen Befehl rückgängig machen, falls etwas schief geht. Snapshots benötigen nur sehr wenig Speicherplatz und du kannst sie effizient an andere zpools oder Hosts senden (mit zfs send und zfs recv). Erstelle einen Snapshot von mypool/datamit dem Namen safe:

sudo zfs snapshot mypool/data@safe

Liste deine Schnappschüsse auf:

zfs list -t snapshot
NAME               USED  AVAIL     REFER  MOUNTPOINT
mypool/data@safe     0B      -       24K  -

Wenn du keine Schnappschüsse auflisten kannst, stelle listsnapshots=on ein und versuche es erneut:

sudo zpool set listsnapshots=on mypool

Versuche, einige Dateien in mypool/data zu ändern. Gehe dann zum Snapshot safe zurück und sieh nach, ob deine Änderungen verschwunden sind:

sudo zfs rollback mypool/data@safe

Einen ZFS-Datensatz oder Schnappschuss zerstören

Sei vorsichtig mit dem zfs destroy Befehl - er wird sofort ohne Bestätigung ausgeführt.

sudo zfs destroy mypool/data@safe    A snapshotsudo zfs destroy mypool/data         A dataset

Einen ZFS-Pool zerstören

Sei vorsichtig mit dem Befehl zpool destroy - er wird sofort ausgeführt, ohne zu bestätigen.

sudo zpool destroy mypool

Backups und Fernspeicherung

rsync

Kopiere eine Reihe von Dateien effizient, auch über ein Netzwerk.

rclone

Synchronisiere Dateien mit verschiedenen Cloud-Providern.

dd

Kopieren von Daten auf niedriger Ebene.

growisofs

Brenne eine DVD oder Blu-ray Disc.

Du kannst deine wertvollen Linux-Dateien auf verschiedene Arten sichern:

  • Kopiere sie auf einen anderen Computer.

  • Kopiere sie auf ein Sicherungsmedium wie ein externes Laufwerk.

  • Brenne sie auf eine Disc.

Ich stelle hier ein paar beliebte Linux-Befehle für Backups vor, aber es gibt noch andere. Einige Benutzer bevorzugen cpio wegen seiner Flexibilität, und einige langjährige Administratoren schwören auf dump und restore als einzige zuverlässige Methode, um alle Arten von Dateien zu sichern und wiederherzustellen. Wenn du dich für diese Befehle interessierst, sieh dir die Manpages dazu an.

rsync

stdin

stdout

- Akte

-- opt

--help

--version

rsync[Optionen] Quelle Ziel

Der Befehl rsync kopiert einen Satz von Dateien. Er kann eine exakte Kopie erstellen, einschließlich der Dateiberechtigungen und anderer Attribute ( Spiegelung genannt), oder er kann nur die Daten kopieren. Er kann über ein Netzwerk oder auf einem einzelnen Computer ausgeführt werden. rsync hat viele Einsatzmöglichkeiten und über 50 Optionen; ich stelle hier nur ein paar gängige Fälle vor, die sich auf Backups beziehen.

Um das Verzeichnis mydir und seinen Inhalt in ein anderes Verzeichnis mydir2 auf einem einzelnen Rechner zu spiegeln:

rsync -a mydir mydir2

rsync ist pingelig, wenn es darum geht, wie du das erste Verzeichnis angibst. Wenn du wie in diesem Beispiel "mydir" schreibst, wird dieses Verzeichnis nachmydir2 kopiert, wodurch das Unterverzeichnis mydir2/mydir entsteht. Wenn du stattdessen nur den Inhalt von mydir nach mydir2 kopieren möchtest, hängst du einen Schrägstrich an "mydir" an:

rsync  -a mydir/  mydir2

rsync kann ein Verzeichnis über ein Netzwerk auf einen anderen Host spiegeln und die Verbindung mit SSH sichern, um Abhören zu verhindern. Hier kopiere ich das Verzeichnis mydir auf das Konto "smith" auf dem entfernten Host server.example.com, in ein VerzeichnisD2:

rsync -a mydir smith@server.example.com:D2

Wenn du rsync magst, aber auch inkrementelle Backups haben und diese effizient verwalten möchtest, probiere rsnapshot(https://oreil.ly/VNfb-).

Nützliche Optionen

-o

Übertrage die Eigentumsrechte an den Dateien. (Möglicherweise benötigst du Superuser-Rechte auf dem Remote-Host).

-g

Kopiere die Gruppenrechte an den Dateien. (Möglicherweise benötigst du Superuser-Rechte auf dem Remote-Host).

-p

Kopiere die Dateiberechtigungen.

-t

Kopiere die Zeitstempel der Dateien.

-r

Kopiere Verzeichnisse rekursiv (d.h. einschließlich ihres Inhalts).

-l

Erlaube, dass symbolische Links kopiert werden (und nicht die Dateien, auf die sie zeigen).

-D

Das Kopieren von Geräten zulassen. (Nur Superuser.)

-a

Spiegeln: Kopiere alle Attribute der Originaldateien. Dies impliziert alle Optionen -Dogptrl (denke an "Hundestaffel").

-x

Wenn du einen Dateibaum kopierst, bleibst du innerhalb des aktuellen Dateisystems und wechselst nicht in ein anderes eingehängtes Dateisystem.

-z

Komprimiert die Daten für die Übertragung. Nur nützlich für Remote-Hosts mit langsamen Verbindungen. Vermeide die Komprimierung, wenn du Dateien lokal kopierst (sie ist verschwenderisch).

-n

Trockenübungsmodus: Kopiere nicht wirklich. Zeige nur an, was gemacht werden würde.

-v

Ausführlicher Modus: Druckt während des Kopiervorgangs Statusinformationen aus. Füge --progress hinzu, um eine numerische Fortschrittsanzeige anzuzeigen, während Dateien kopiert werden .

rclone

stdin

stdout

- Akte

-- opt

--help

--version

rclone subcommand[options][arguments]

Der Befehl rclone verbindet dein Linux-System mit beliebten Cloud-Providern, um Dateien bequem zu kopieren. Er funktioniert mit Dropbox, Google Drive, Microsoft OneDrive, Amazon S3 und etwa 50 weiteren Zielen. Um loszulegen, rufe rclone config auf und folge den Eingabeaufforderungen, um eine Verbindung mit dem Cloud-Provider deiner Wahl einzurichten, die rclone als Remote bezeichnet. Unterrclone.org/docs findest du detaillierte Anweisungen zur Konfiguration.

Nachdem du einen Namen für deine Remote gewählt hast, z. B. myremote, verweist du auf Remote-Dateien mit der Syntax myremote:path, wobei path ein Dateipfad im Linux-Stil ist. Eine Datei photo.jpg in einem Remote-Verzeichnis Photos wäre zum Beispiel myremote:Photos/photo.jpg.

Backups werden in der Regel mit dem Befehl rclone sync durchgeführt. synchronisiert ein lokales und ein entferntes Verzeichnis, damit sie denselben Inhalt haben, und fügt bei Bedarf etwas hinzu oder löscht es. Er funktioniert ähnlich wie der Befehl rsync --delete. Du kannst in beide Richtungen synchronisieren: von deinem lokalen Rechner zum entfernten oder vom entfernten zu deinem lokalen Rechner. Du kannst sogar eine client-seitige Verschlüsselung einrichten, so dass die Dateien transparent verschlüsselt werden, bevor sie auf den entfernten Rechner kopiert werden, und entschlüsselt werden, wenn sie zurück auf dein lokales System kopiert werden (siehe die Dokumentation).

Einige gängige Vorgänge für Backups sind:

rclone ls remote:

Dateien auf der Gegenstelle rekursiv auflisten ( --max-depth 1 für keine Rekursion anhängen).

rclone lsd remote:

Nur Verzeichnisse auf der Gegenstelle auflisten.

rclone lsl remote:

Zeigt eine lange Liste wie ls -l aus der Ferne rekursiv an (hänge --max-depth 1 an, wenn keine Rekursion stattfindet).

rclone copy myfile remote:

Kopiere eine lokale Datei auf die Gegenstelle.

rclone copy remote:myfile .

Kopiere eine entfernte Datei auf dein lokales System.

rclone move myfile remote:

Verschiebe eine lokale Datei auf die Gegenstelle.

rclone move remote:myfile .

Verschiebe eine entfernte Datei auf dein lokales System.

rclone delete remote:myfile

Lösche eine entfernte Datei.

rclone sync mydir remote:mydir

Synchronisiere lokale Dateien mit der Gegenstelle.

rclone sync remote:mydir mydir

Synchronisiere entfernte Dateien auf dein lokales System.

Führe rclone help aus, um eine vollständige Liste der Unterbefehle zu erhalten. Beachte, dass du auf der Fernbedienung auf ausgefallenere Pfade zugreifen kannst, als meine früheren Beispiele zeigen:

rclone copy remote:Photos/Vacation/picture.jpg .

Nützliche Optionen

-n

Trockenübungsmodus: Kopiere nicht wirklich. Zeige nur an, was gemacht werden würde.

-i

Interaktiv ausführen, damit du vor Änderungen eine Eingabeaufforderung erhältst.

dd

stdin

stdout

- Akte

-- opt

--help

--version

dd[Optionen]

dd ist ein Low-Level-Kopierer von Bits und Bytes. Er kann Daten von einer Datei in eine andere kopieren, zum Beispiel von myfile nach /tmp/mycopy:

dd if=myfile of=/tmp/mycopy
2+1 records in
2+1 records out
1168 bytes (1.2 kB) copied, 0.000174074 s, 6.7 MB/s

Es kann sogar Daten während des Kopierens umwandeln, z. B. indem es beim Kopieren von myfile nach /tmp/mycopy die Großschreibung ändert:

dd if=myfile of=/tmp/mycopy conv=ucase

dd kann viel mehr als nur Dateien kopieren. Es kann auch Rohdaten direkt von einem Festplattengerät auf ein anderes kopieren. Hier ist ein Befehl zum Klonen einer Festplatte:

sudo dd if=/dev/device1 of=/dev/device2 bs=512 \
  conv=noerror,sync          OVERWRITES /dev/device2

Oder du kopierst einen ganzen Datenträger, um eine ISO-Datei zu erstellen. Vergewissere dich, dass die Ausgabedatei auf einem anderen Datenträger liegt und über ausreichend freien Speicherplatz verfügt.

sudo dd if=/dev/device of=disk_backup.iso
Warnung

ddkann, wenn es als Superuser ausgeführt wird, deine Festplatte in Sekundenschnelle vernichten, wenn du nicht aufpasst. Vergewissere dich immer, dass die Ausgabedatei (das Argument of=) die richtige ist. Sichert euren Computer und haltet eine Linux-Live-Distribution für Notfälle bereit (siehe"Was steht in diesem Buch?"), bevor ihr mit dd als root experimentiert.

Tolle Tipps für die anspruchsvolle Nutzung von dd findest du unterhttps://oreil.ly/R3krx. Mein Lieblingstipp ist die Sicherung des Master Boot Record (MBR) einer Festplatte, der 512 Byte lang ist, in einer Datei namens mbr.txt:

sudo dd if=/dev/device of=mbr.txt bs=512 count=1

Nützliche Optionen

if=file

Gib eine Eingabedatei oder ein Gerät an.

of=file

Gib eine Ausgabedatei oder ein Ausgabegerät an. Vergewissere dich, dass es die richtige Datei ist!

bs=N

Kopiere N Bytes (die "Blockgröße") auf einmal. (Um unterschiedliche Blockgrößen für die Eingabe und die Ausgabe einzustellen, verwende ibs bzw. obs).

skip=N

Überspringe N Blöcke der Eingabe (mit der Größe ibs), bevor du mit dem Kopieren beginnst.

seek=N

Verwerfe N Blöcke der Ausgabe (mit der Größe obs), bevor du die Kopie beginnst.

conv=spec

Konvertiere die zu kopierenden Daten. spec kann ucase (in Großbuchstaben konvertieren), lcase (in Kleinbuchstaben konvertieren), ascii (von EBCDIC in ASCII konvertieren) und viele andere sein, die in der Manpage aufgeführt sind.

growisofs

stdin

stdout

- Akte

-- opt

--help

--version

growisofs[Optionen] Spuren

Der Befehl growisofs brennt eine beschreibbare CD, DVD oder Blu-ray Disc. So brennst du den Inhalt eines Linux-Verzeichnisses auf einen Datenträger, der auf Linux-, Windows- und macOS-Systemen lesbar ist:

  1. Finde deine Brennergeräte, indem du sie auswählst:

    grep "^drive name:" /proc/sys/dev/cdrom/info
    drive name:    sr1     sr0

    Die verfügbaren Geräte sind hier /dev/sr1 und /dev/sr0.

  2. Lege die Dateien, die du brennen willst, in einem Verzeichnis ab, zum Beispiel dir. Ordne sie genau so an, wie du sie auf der Disc haben möchtest. Das Verzeichnis dir selbst wird nicht auf die Disc kopiert, nur sein Inhalt.

  3. Verwende den Befehl mkisofs, um eine ISO-Image-Datei zu erstellen, und brenne sie mit growisofs auf einen Datenträger, vorausgesetzt, dein Gerät ist /dev/sr1:

    mkisofs -R -l -o $HOME/mydisk.iso dirgrowisofs -dvd-compat -Z /dev/sr1=$HOME/mydisk.isorm $HOME/mydisk.iso

Um Audio-CDs zu brennen, verwende ein benutzerfreundliches grafisches Programm wie k3b.

1 Du kannst ein Dateisystem in ein nicht leeres Verzeichnis einhängen, aber der Inhalt des Verzeichnisses wird unzugänglich, bis du es wieder aushängst.

2 Beachte, dass die Schreibweise "umount" ist, nicht "unmount".

3 Wenn sich dein RAID-Verbund auf mysteriöse Weise in /dev/md127 umbenennt, hast du im vorherigen Schritt vergessen, update-initramfs auszuführen.

4 Arbeite auf Partitionen statt auf ganzen Festplatten.

5 Alte Hasen können die Größe eines LVs ändern, indem sie lvextend, umount , fsck, resize2fs, und mount nacheinander ausführen. lvresize ist einfacher.

Get Linux Pocket Guide, 4th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.