98 lines
4.0 KiB
Markdown
98 lines
4.0 KiB
Markdown
# NAS Setup
|
|
|
|
## Hardware
|
|
|
|
- [x] RPI 4
|
|
- [ ] Optional: kleine SSD/nvme für RPI OS
|
|
- [ ] Festplatten für Daten (spinning metal/HDD)
|
|
- [ ] Case für Festplatten, Stromversorgung usw
|
|
|
|
## Software/Setup
|
|
|
|
- [ ] RPI OS (NixOS weil reproduzierbar?)
|
|
- [ ] Stromverbrauch möglichst gering (HDD nach Inaktivität stoppen)
|
|
- [ ] Wie viele Festplatten -> Welches RAID Level (am einfachsten: 2 Platten, RAID 1 -> 1:1 Kopie auf beiden Platten)
|
|
- [ ] Verschlüsselung (wie entschlüsseln? Muss ggf immer manuell sein, aber wie, wenn man nicht zuhause ist?)
|
|
- [ ] Integrity: Bei Bitrot erkennen, welche der beiden RAID Disks den fehlerfreien Stand hat und wiederherstellen
|
|
- [ ] Filesystem? ext4 wäre naiv, Next Gen FS (btrfs/zfs mit CoW, data deduplication, atomic snapshots usw bestimmt cool)
|
|
|
|
- [ ] Unterschiedliche Setups skizzieren, aufsetzen und Performance testen (hauptsächlich read/write)
|
|
- [ ] Inkrementelle Backups: Nur beim initialen Backup müssen alle Daten einmal kopiert werden. Danach sollten nur noch veränderte Daten gesynct werden, dass es schneller geht
|
|
- [ ] Wie oft Backups erstellen ("kleine Sachen" wie Gitea, mozilla sync, mailserver täglich, große Sachen wie Nextcloud wöchentlich? Hier messen, wie lange die Backups wirklich brauchen)
|
|
- [ ] Versionierte Backups, um auch ältere Stände wieder herstellen zu können (Retention Policy? Für die letzten 2 Wochen täglich, für den aktuellen Stand stündlich, für das letzte Jahr monatlich und für immer ein jährliches Backup?)
|
|
|
|
|
|
## Sicherheit und Berechtigungen
|
|
|
|
- [ ] NAS muss sich Backup vom Server holen/pullen und nicht vom Server and NAS pushen. Sonst könnte ein potentiell kompromittierter Server ggf alte Backups löschen.
|
|
- [ ] Append Only Backups. Alte Backups und Daten dürfen nicht ohne weiteres gelöscht oder überschrieben werden können.
|
|
|
|
|
|
## Andere TODOs
|
|
|
|
- [ ] Server aufräumen, ggf sogar mal wieder komplett sauber und neu aufsetzen
|
|
- [ ] Benchmarks: Welche Kombination bietet integrity, RAID, CoW/Snapshots, Verschlüsselung und die besten read/write raten
|
|
- [ ] Wiederherstellen testen
|
|
|
|
|
|
## Backupstrategie
|
|
|
|
- Server neu aufsetzen mit btrfs/zfs für snapshots
|
|
- Lokalen Snapshot erzeugen
|
|
- Backup aus snapshot erzeugen (pgdump/mysqldump) und sichern
|
|
- Daten sichern (eigenes subvolume und btrfs send/receive? borg?)
|
|
|
|
|
|
## Allgemeine Notizen
|
|
|
|
### Verschlüsselung
|
|
|
|
Die Platten sollten auf jeden Fall verschlüsselt sein. Ggf ein keyfile erzeugen
|
|
und an sichern Orten aufbewahren.
|
|
|
|
Offene Frage: Beim starten automatisch entschlüsseln (dann muss das Keyfile
|
|
effektiv auf unverschlüsseltem Speicher liegen), oder manuell (z.B. nach reboot
|
|
per SSH drauf und Passphrase eingeben).
|
|
|
|
Ersteres erlaubt unbeaufsichtigte reboots ist aber unsicherer, zweiteres
|
|
erfordert nach jedem reboot ein manuelles unlocken der Disks.
|
|
|
|
Hardware acceleration für AES auf dem RPI? Perfomanceverlust durch crypto?
|
|
|
|
|
|
### Integrity
|
|
|
|
Damit lässt sich prüfen, ob Daten korrupt sind (bitfehler o.ä. auf der Platte).
|
|
Im RAID kann man dann auch entscheiden, welche Platte die korrekten Daten hat
|
|
und den Stand auf der kaputten Platte automatisch fixen.
|
|
|
|
Integrity kann Teil der Verschlüsselung (Stichwort AEAD) sein und mit
|
|
`cryptsetup` umgesetzt werden
|
|
|
|
```bash
|
|
cryptsetup luksFormat -q --type luks2 --integrity hmac-sha256 disk1.img key.bin
|
|
```
|
|
|
|
Oder auch auf einer unverschlüsselten Platte (macht ohne RAID nur bedingt
|
|
Sinn...) mit `integritysetup` (verwendet wohl keinen LUKS Header für Metadaten
|
|
=> Parameter, Algorithmen, ... müssen explizit angegeben werden)
|
|
|
|
```bash
|
|
integritysetup format --integrity sha256 disk1.img
|
|
integritysetup open --integrity sha256 disk1.img disk1int
|
|
```
|
|
|
|
Integritycheck und fix starten mit
|
|
|
|
```bash
|
|
echo check > /sys/block/md127/md/sync_action
|
|
```
|
|
|
|
|
|
## Links
|
|
|
|
* [dm-crypt + dm-integrity + dm-raid = awesome!](https://gist.github.com/MawKKe/caa2bbf7edcc072129d73b61ae7815fb)
|
|
* [ZFS](https://wiki.archlinux.org/title/ZFS)
|
|
* [ZFS/Virtual disks](https://wiki.archlinux.org/title/ZFS/Virtual_disks)
|
|
* [Btrfs](https://wiki.archlinux.org/title/Btrfs)
|