Forum: PC Hard- und Software Disk Image Debian Linux


von Lars S. (Gast)


Lesenswert?

Kennt jemand eine Möglichkeit ein komplettes System, welches mit LUKS 
verschlüsselt ist live zu sichern? Also so, dass man das erzeugte Image 
nur noch kopieren muss und auf einem neuen PC wieder starten kann, falls 
der alte defekt ist?

Wenn das nicht live geht wäre mit auch eine nicht live Lösung recht. Ich 
sehe das Problem bei live Systemen, dass man sicherstellen muss, dass 
während eines Backups nicht auf die Platte geschrieben wird. Ich meine 
mich zu erinnern, dass es dafür Dateisysteme gibt, die sowas können.

von Klaus W. (mfgkw)


Lesenswert?

Das wird gehen mit jeder Linux-Live-CD.

Darin dann suchen, welche Platte gesichert werden soll (bspw. /dev/sda), 
eine weitere externe formatierte und mit irgendeinem Linux-Dateisystem 
(ext2/4 oder ähnliches) mounten (z.B. /dev/sdb1 nach /media/blabla) und 
dann kopieren mit dd.
Sinnvoll ist es bestimmt, das kopierte Image gleich zu komprimieren.
Das könnte insgesamt so aussehen:
dd if=/dev/sda | gzip -9 > 
/media/blabla/meine_Sicherung_vom_01.06.2022.image.gz

Ein solches Image könnte man umgekehrt wieder mit einer Live-CD auf 
dieselbe oder eine mindestens gleich große Platte zurück kopieren.

von Εrnst B. (ernst)


Lesenswert?

Lars S. schrieb:
> Wenn das nicht live geht wäre mit auch eine nicht live Lösung recht. Ich
> sehe das Problem bei live Systemen, dass man sicherstellen muss, dass
> während eines Backups nicht auf die Platte geschrieben wird. Ich meine
> mich zu erinnern, dass es dafür Dateisysteme gibt, die sowas können.

das geht per Snapshot.
Wenn dein LUKS-Image auf einer LVM-VG liegt, "sync", snapshot anlegen, 
snapshot-image wegsichern, snapshot auflösen.

Ja, das image ist dann nicht 100%ig sauber, weil es "im Betrieb" mit 
offenen Dateien etc. gezogen wurde. Ein Journaling-Dateisystem kommt 
damit aber klar.

Und das Restore ist leider nicht ganz so einfach, das image ist nicht 
direkt startfähig, sondern muss erst wieder in ein LVM-Setup 
zurückgespielt werden...

Eine Lösung wäre, die Backup-Platte soweit mit LVM und allem 
vorzubereiten, und beim Backup-Erstellen jeweils nur das verschlüsselte 
LV am Backup aus dem Snapshot zu aktualisieren.

von pp (Gast)


Lesenswert?

Schau mal nach REAR - Relax and Recover...

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Das ganze live zu machen dürfte schwierig sein. Da müsste man ja 
eigentlich auf Dateiebene arbeiten, und das Image quasi nachbauen.

Mir fällt da gerade nichts fertiges ein. Eventuell selbst ein Script 
schreiben. Irgendwie so (ungetestet und unfertig):
1
#!/bin/bash
2
set -e
3
4
# Parameter prüfen
5
device="$1"
6
image="$2"
7
if [ $# -lt 2 ] || [ ! -f "$device" ] || [ -z "$image" ]
8
then
9
  echo "Usage: $0 /dev/sdX image.img"
10
  exit 1
11
fi
12
device="$(realpath "$device")"
13
image="$(realpath "$image")"
14
15
set -x
16
17
# Arbeitsverzeichnis erstellen
18
tmproot="$(mktemp -d)"
19
cd "$tmproot"
20
21
cleanup(){
22
  set +e
23
  for x in t/* o/*
24
    do umount "$x" || true
25
  done
26
  rm -rf t o
27
  if [ -n "$loop" ]; then losetup -D "$loop"; fi
28
}
29
trap cleanup EXIT INT TERM
30
31
# Image & partitionen erstellen & file locken
32
size="$(blockdev --getsize64 "$device")"
33
exec 5<>"$image"
34
flock -n 5 || ( echo "Error: image file already in use" >&2; exit 1; )
35
truncate -s "$image"
36
sfdisk -d "$device" | sfdisk "$image"
37
38
# Image mounten
39
loop="$(losetup -Pf --show "$image")"
40
porig=( "$device"?* )
41
ploop=( "$loop"?* )
42
43
if [ "${#porig[@]}" != "${#ploop[@]}" ]
44
then
45
  echo "Error: OS Detected number of partitions missmatches" >&2
46
  exit 1
47
fi
48
49
copy_part(){
50
  mkdir "o/$i"
51
  mkdir "t/$i"
52
  mount "$orig" "o/$i"
53
  mount "$target" "t/$t"
54
  cp --archive --one-file-system "o/$i/./" "t/$t/"
55
  umount "o/$i"
56
  umount "t/$i"
57
}
58
59
# Partitionen anlegen & kopieren
60
i=0
61
n="${#porig[@]}"
62
while [ "$i" -le "$n" ]
63
do (
64
  orig="${porig[$i]}"
65
  target="${ploop[$i]}"
66
  eval "$(blkid -p "$target" | sed "s/^[^:]*: //")"
67
  case "$TYPE" in
68
    "swap") mkswap "$target";;
69
    "crypto_LUKS") ;; ## TODO. looksOpen usw.
70
    "") echo "Ignoring $orig";;
71
    ext4)  mkfs.ext4 -U "$UUID"; copy_part ;;
72
    *) echo "Warning: Don't know what to do with $TYPE: $orig" ;;
73
  esac
74
); done

von Nop (Gast)


Lesenswert?

Klaus W. schrieb:

> Sinnvoll ist es bestimmt, das kopierte Image gleich zu komprimieren.

Im Prinzip leistet Clonezilla live von USB gebootet genau sowas schon - 
Komprimierung wird aber nicht gehen, wenn die Platte verschlüsselt ist, 
weil das dann wie Rauschen aussieht (und auch so soll).

Komprimierung wäre nur möglich, wenn man das entschlüsselte Dateisystem 
sichert, aber eine unverschlüsselte Kopie herumfliegen zu haben 
konterkariert ja den Zweck der Verschlüsselung.

von Klaus W. (mfgkw)


Lesenswert?

Nop schrieb:
> Komprimierung wäre nur möglich, wenn man das entschlüsselte Dateisystem
> sichert, aber eine unverschlüsselte Kopie herumfliegen zu haben
> konterkariert ja den Zweck der Verschlüsselung.

Mag sein.
Wobei ich nicht weiß, ob bislang unbenutzte Bereiche bei einer 
verschlüsselten Partition nicht doch vom Komprimieren profitieren; 
müsste man probieren.
Schaden wird es jedenfalls nichts (außer der vielleicht verschwendeten 
Rechenzeit).

von (prx) A. K. (prx)


Lesenswert?

Klaus W. schrieb:
> Wobei ich nicht weiß, ob bislang unbenutzte Bereiche bei einer
> verschlüsselten Partition nicht doch vom Komprimieren profitieren;
> müsste man probieren.

Dazu muss das Kopierprogramm die Filesystem-Struktur analysieren können. 
Das funktioniert aber nur bei Fileverschlüsselung wie z.B. in ecryptfs, 
nicht aber bei einer Volume- oder Diskverschlüsselung wie LUKS.

: Bearbeitet durch User
von Norbert (Gast)


Lesenswert?

Wenn man eine Partition komplett mit 0x00 beschreibt und dann einen LUKS 
Container mit extx anlegt, dann werden nur die dabei geschriebenen 
Blöcke verschlüsselt angelegt. Der Rest bleibt 0x00.
Ein Image dieser Partition - obwohl verschlüsselt - ließe sich 
komprimieren. Oder auch als ›sparse‹-Datei kopieren.

Ein Angreifer sähe jedoch die Struktur und könnte Rückschlüsse ziehen.

Will man's sicher haben, so füllt man die Partition zuvor von 
/dev/random und legt den LUKS Container dann an. Da ist dann aber nix 
mehr mit komprimieren.

von Εrnst B. (ernst)


Lesenswert?

Norbert schrieb:
> Will man's sicher haben, so füllt man die Partition zuvor von
> /dev/random und legt den LUKS Container dann an. Da ist dann aber nix
> mehr mit komprimieren.

Schneller: Man legt den Luks-Container an, und befüllt den dann mit 
0x00, und legt dann das Dateisystem darauf an.

Verschlüsseln geht deutlich schneller als Zufallszahlen aus /dev/random 
zu ziehen, selbst wenn man /dev/urandom verwendet.

von Norbert (Gast)


Lesenswert?

Εrnst B. schrieb:
> Schneller: Man legt den Luks-Container an, und befüllt den dann mit
> 0x00, und legt dann das Dateisystem darauf an.
>
> Verschlüsseln geht deutlich schneller als Zufallszahlen aus /dev/random
> zu ziehen, selbst wenn man /dev/urandom verwendet.
1
$ pv </dev/urandom >/dev/null
2
2,90GiB 0:00:10 [ 296MiB/s] [      <=>      ]

Ach, ich kann nicht klagen… ;-)

von (prx) A. K. (prx)


Lesenswert?

Das kann von Kernelversion und Processor abhängen.

von Norbert (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Das kann von Kernelversion und Processor abhängen.

Wenn der Prozessor zu lahmarschig ist, wird's mit der Verschlüsselung 
auch nicht besser und schneller.
Die Frage ist doch eher: Wie oft am Tage legt man wie viele LUKS 
Container an?

von Εrnst B. (ernst)


Lesenswert?

Norbert schrieb:
> Ach, ich kann nicht klagen

(prx) A. K. schrieb:
> Das kann von Kernelversion und Processor abhängen.

Hier, am Desktop, i7-6700K, debian bullseye default kernel
1
# cryptsetup benchmark
2
...
3
#   Algorithmus | Schlüssel | Verschlüsselung | Entschlüsselung
4
        aes-cbc        128b      1178,9 MiB/s      3451,0 MiB/s
5
    serpent-cbc        128b        96,6 MiB/s       751,9 MiB/s
6
    twofish-cbc        128b       216,1 MiB/s       394,1 MiB/s
7
        aes-cbc        256b       886,7 MiB/s      2780,8 MiB/s
8
    serpent-cbc        256b       100,6 MiB/s       749,2 MiB/s
9
    twofish-cbc        256b       221,6 MiB/s       391,5 MiB/s
10
        aes-xts        256b      3166,7 MiB/s      3071,9 MiB/s
11
    serpent-xts        256b       725,2 MiB/s       715,6 MiB/s
12
    twofish-xts        256b       397,8 MiB/s       399,7 MiB/s
13
        aes-xts        512b      2582,6 MiB/s      2635,1 MiB/s
14
    serpent-xts        512b       730,5 MiB/s       718,8 MiB/s
15
    twofish-xts        512b       397,7 MiB/s       397,2 MiB/s
16
17
18
# dd if=/dev/random of=/dev/null bs=1M count=1024 status=progress
19
..
20
1073741824 Bytes (1,1 GB, 1,0 GiB) kopiert, 28,6901 s, 37,4 MB/s
21
22
# dd if=/dev/urandom of=/dev/null bs=1M count=1024 status=progress
23
..
24
1073741824 Bytes (1,1 GB, 1,0 GiB) kopiert, 28,3858 s, 37,8 MB/s
25
26
27
# dd if=/dev/zero of=/dev/null bs=1M count=10240 
28
..
29
10737418240 Bytes (11 GB, 10 GiB) kopiert, 0,491239 s, 21,9 GB/s

von Norbert (Gast)


Lesenswert?

Εrnst B. schrieb:
> dd if=/dev/random of=/dev/null bs=1M count=1024 status=progress
> 1073741824 Bytes (1,1 GB, 1,0 GiB) kopiert, 28,6901 s, 37,4 MB/s
>
> dd if=/dev/urandom of=/dev/null bs=1M count=1024 status=progress
> 1073741824 Bytes (1,1 GB, 1,0 GiB) kopiert, 28,3858 s, 37,8 MB/s

Das sieht aber wirklich verdächtig schlecht aus.

Ich habe hier einen deutlich lahmeren Prozessor (i5-3470) und ebenfalls 
ein Debian (old-stable) System:
$ uname -a
Linux x 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 
GNU/Linux
$ cat /etc/debian_version
10.12

Wieso sollte das zehnmal schneller sein?

Im übrigen gehört zur Performance-Beurteilung auch immer das Ziel.
Festplatten: ~150…200MB/s
SATA III: <= 580MB/s
Erst darüber wird es dann so schnell, das es interessant wird.

Ach die Jugend, Ungeduld ist ihre Tugend. ;)

Halten wir fest: Wie immer hier im Forum haben alle ein wenig Recht. 
Immer aus ihrem jeweiligen Blickwinkel.

von (prx) A. K. (prx)


Lesenswert?

Norbert schrieb:
> Wenn der Prozessor zu lahmarschig ist, wird's mit der Verschlüsselung
> auch nicht besser und schneller.

Der Support für entsprechende Befehle ist nicht für alle Prozessoren 
gegeben, sowohl für AES als auch für Zufallserzeugung. Und das kann es 
bedeuten, dass ein lahmarschiger Prozessor der Atom-Reihe schneller ist, 
weil der die Befehle hat, der Mainstream-Prozessor aber nicht, oder 
deaktiviert.

von Norbert (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Norbert schrieb:
>> Wenn der Prozessor zu lahmarschig ist, wird's mit der Verschlüsselung
>> auch nicht besser und schneller.
>
> Der Support für entsprechende Befehle ist nicht für alle Prozessoren
> gegeben, sowohl für AES als auch für Zufallserzeugung. Und das kann es
> bedeuten, dass ein lahmarschiger Prozessor der Atom-Reihe schneller ist,
> weil der die Befehle hat, der Mainstream-Prozessor aber nicht, oder
> deaktiviert.

Womit bewiesen ist das es fast immer irgendwelche Sonderfälle gibt die 
eine Argumentation stützen. Man muss nur suchen und finden.

Just saying…

von (prx) A. K. (prx)


Lesenswert?

Norbert schrieb:
> Ich habe hier einen deutlich lahmeren Prozessor (i5-3470)

Der hat AES-NI. Bei manch anderem Prozessor mit dem Ivy Bridge Core, 
etwa dem Pentium G2020, in vielen billigen Office-Desktops zu finden, 
sind diese Befehle deaktiviert. Bei dem Silvermont-Atom Z3775 des 
gleichen Jahrgangs, für Tablets gebaut und an sich viel langsamer, ist 
AES-NI hingegen drin.

: Bearbeitet durch User
von Norbert (Gast)


Lesenswert?

(prx) A. K. schrieb:
>> i5-3470
> Der hat AES-NI. Bei manch anderem Prozessor mit dem Ivy Bridge Core,
> etwa dem Pentium G2020, sind diese Befehle deaktiviert. Bei dem
> Silvermont-Atom Z3775 des gleichen Jahrgangs, für Tablets gebaut und an
> sich viel langsamer, ist AES-NI hingegen drin.

Na dann ist die Lösung ja ganz einfach. Den LUKS-Container auf dem 
Tablett erzeugen und per Bluetooth zum Pentium senden… ;-)

von (prx) A. K. (prx)


Lesenswert?

Norbert schrieb:
> Na dann ist die Lösung ja ganz einfach. Den LUKS-Container auf dem
> Tablett erzeugen und per Bluetooth zum Pentium senden… ;-)

Die Random-Erzeugung ist in der gleichen AES-NI Befehlsgruppe wie die 
AES Verschlüsselung. Das Tablet randomt nicht nur schneller, es 
enc/decrypted auch schneller, wenn man den richtigen Algorithmus 
verwendet hat. ;-)

Man sieht hier ja recht deutlich, wo Hardware wo Software:

Εrnst B. schrieb:
> aes-cbc            128b      1178,9 MiB/s      3451,0 MiB/s (HW)
> serpent-cbc        128b        96,6 MiB/s       751,9 MiB/s (SW)

Netbook mit N3350 (Goldmont Atom), ein Tablet-Prozessor
  aes-cbc            128b       437,3 MiB/s       823,4 MiB/s (HW)
  serpent-cbc        128b        42,7 MiB/s       143,2 MiB/s (SW)

Athlon II Neo N36L im HP Microserver:
  aes-cbc            128b        75,5 MiB/s        84,3 MiB/s (SW)

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Der HP Microserver liest eine externe USB-3 Disk mit 190 MB/s 
unverschlüsselt, aber verschlüsselt verbleiben davon nur 62 MB/s, weil 
der Prozessor zu langsam ist. Das Netbook hätte damit kein Problem.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Εrnst B. schrieb:
> # dd if=/dev/urandom of=/dev/null bs=1M count=1024 status=progress
> ..
> 1073741824 Bytes (1,1 GB, 1,0 GiB) kopiert, 28,3858 s, 37,8 MB/s

Hier wirds bizarr. Denn der olle Athlon, der bei AES unter alles Sau 
schleicht, wirft dabei 122 MB/s aus. Ein i7 4770 liegt bei 267 MB/s:
 i7-4770       267 MB/s
 Athlon N36L   122 MB/s
 i7-1165G7      86 MB/s

Als Benchmark sind /dev/(u)random offensichtlich hoffnungslos.

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

(prx) A. K. schrieb:
> Hier wirds bizarr.

durchaus:
1
AMD EPYC 7452      :  47,7 MB/s
2
AMD EPYC 7402      :  15,6 MB/s
3
XEON E5-2630 v3    : 224,0 MB/s
4
Ryzen 5 3400G      :  38,8 MB/s
5
XEON Silver 4114   : 147,0 MB/s
6
i7-6700K           :  38,1 MB/s
7
i7-8550U (*)       :  37,7 MB/s

Den i7-8550U habe ich unter Windows11 in einer WSL2-VM vermessen, 
insofern ist der Wert außer Konkurrenz.
Schaut aber so aus als hätte Intel bei der "urandom"-Performance die 
Nase vorne. Nur bei meinem Desktop i7-6700K nicht...

: Bearbeitet durch User
von Norbert (Gast)


Lesenswert?

Kann das vielleicht mit diesen ganzen unsäglichen Microcode Mitigations 
zusammen hängen die über die neueren Prozessoren hereingebrochen sind?
Die, welche die enorme Menge an gravierenden Sicherheitsmängeln 
zumindest etwas abschwächen sollen?

Nur mal so ins Unreine gedacht, da hier selbst ein ur-uralter Pentium-M 
1.866GHz single core Laptop-Prozessor bei ~ 80MB/s liegt.

von (prx) A. K. (prx)


Lesenswert?

Norbert schrieb:
> Kann das vielleicht mit diesen ganzen unsäglichen Microcode Mitigations

Diese beiden EPCY 2 sind sich recht ähnlich:

> AMD EPYC 7452      :  47,7 MB/s
> AMD EPYC 7402      :  15,6 MB/s

Ich vermute, dass irgendwelche Kernel-Einstellungen und -Versionen mit 
hinein spielen. Auf dem gleichen EPYC 2 gab es bei zwei verschiedenen 
Distros zwar den gleichen Wert für /dev/urandom, aber bei einem davon 
brach /dev/random um Faktor 3 ein. Das ist weder mit Microcode noch mit 
Hardware erklärbar.

> Nur mal so ins Unreine gedacht, da hier selbst ein ur-uralter Pentium-M
> 1.866GHz single core Laptop-Prozessor bei ~ 80MB/s liegt.

Eine gewisse zeitliche Verwandschaft sollte der Kernel schon haben. Die 
Ansprüche an RNGs sind im Cryptozeitalter drastisch gestiegen, was zu 
diversen Arbeiten am Linux-RNG führte.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Εrnst B. schrieb:
> AMD EPYC 7452      :  47,7 MB/s
> AMD EPYC 7402      :  15,6 MB/s

Sowohl /dev/random und /dev/urandom gemessen? Ich habe auf dem gleichen 
EPYC 7742 unter zwei verschiedenen Linuxen gemessen.

Linux 1: /dev/urandom ~ 48 MB/s, /dev/random ~ 48 MB/s
Linux 2: /dev/urandom ~ 48 MB/s, /dev/random ~ 16 MB/s

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

(prx) A. K. schrieb:
> Ich vermute, dass irgendwelche Kernel-Einstellungen und -Versionen mit
> hinein spielen.

Kann auch an der sonstigen Last auf den Kisten liegen... die stehen ja 
nicht nur zum Spaß rum, sondern hatten neben /dev/urandom auch noch 
unterschiedlich viel Anderes zu tun...

von Norbert (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Eine gewisse zeitliche Verwandschaft sollte der Kernel schon haben. Die
> Ansprüche an RNGs sind im Cryptozeitalter drastisch gestiegen, was zu
> diversen Arbeiten am Linux-RNG führte.
Ist zwar ein Laptop von - ich glaube 2009 - aber das Debian Linux ist 
recht frisch, na ja halb-frisch, Version 10, Buster, old-stable. Wird 
auch noch mit Updates versorgt.

von (prx) A. K. (prx)


Lesenswert?

Εrnst B. schrieb:
> Kann auch an der sonstigen Last auf den Kisten liegen

In meinem Fall nicht. Klar, die sind am arbeiten, aber für einen aktiven 
Core war reichlich genug Luft.

von (prx) A. K. (prx)


Lesenswert?

Norbert schrieb:
> Ist zwar ein Laptop von - ich glaube 2009 - aber das Debian Linux ist
> recht frisch, na ja halb-frisch, Version 10, Buster, old-stable. Wird
> auch noch mit Updates versorgt.

Passt insoweit zu meinem Athlon. Demjenigen, der bei Randoms brilliert 
aber bei AES durchfällt. Auch da läuft noch Debian 10, allerdings die 
64-Bit Version.

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

(prx) A. K. schrieb:

> In meinem Fall nicht. Klar, die sind am arbeiten, aber für einen aktiven
> Core war reichlich genug Luft.

stimmt natürlich.
hab nochmal am EPYC 7452 geschaut, der ist hauptsächlich PCIe & IO-mäßig 
gefordert (12×NVMe), die CPUs langweilen sich.

/dev/urandom: 47,7 MB/s
/dev/random: < 0.1 kB/s (da hab ich wohl den Entropy-Pool geleert. Ups.)

Es wird also wohl keine HW-Beschleunigung genutzt, trotz "rdrand" in den 
cpuinfo-flags

Kernel ist ein 5.4.0-ubuntu.

Norbert schrieb:
> Kann das vielleicht mit diesen ganzen unsäglichen Microcode Mitigations

Möglich.
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0543
Könnte dazu geführt haben, dass der HW-RNG nicht mehr so gerne verwendet 
wird...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.