Homserver Schnellanleitung, Teil 2
Ich schreibe mir hier nur ein paar Notizen für die Installation eines Homeservers mit FreeBSD auf. Ohne Anspruch auf Vollständigkeit.
Inhalt:
- Teil 1: Installation und grundlegende Konfiguration von SSH, E-Mail, Hardware, ZFS, …
- Teil 2: Fileserver
- Teil 3: VMs und Jails
Fileserver
ZFS Tuning
Ein paar Infos über ZFS-Tuning finden sich in diesem Tuning-Guide:
ashift 12 4KiB block size
atime off Do not update atime on file read
recordsize 64KiB Smaller record sizes for databases (match the database block size)
recordsize 128Kib Standard usage (mixture of file sizes)
recordsize 1Mb Recommended for large files
compression lz4 Set compression to use the lz4 algorithm
ZFS Datasets für Shares erstellen
Für die Datasets kann die Recordsize angepasst werden. Dabei ist 128K die Standardgröße, für Datasets mit großen Dateien bietet sich eine größere Recordsize an. Software, die in festen Datensatzgrößen schreibt (z.B. Datenbanken), profitiert von der Verwendung einer passenden Datensatzgröße, z.B. 16K.
- Für mittelgroße Dateien (1-50 MiB): 512K
- Für große Dateien (> 100 MiB): 1M
- Für Disk-Images von Virtuellen Maschinen: 64K
zfs create -o recordsize=128K -o mountpoint=/mnt/dokumente hellraiser/encrypted/dokumente
zfs create -o recordsize=512K -o mountpoint=/mnt/fotos hellraiser/encrypted/fotos
zfs create -o recordsize=512K -o mountpoint=/mnt/musik hellraiser/encrypted/musik
zfs create -o recordsize=1M -o mountpoint=/mnt/videos hellraiser/encrypted/videos
Daten migrieren
Daten lassen sich mit syncoid
sehr einfach von einem Server auf den anderen migrieren. syncoid
ist Bestandteil von sanoid
:
pkg install sanoid
Auf dem alten Server z.B. ausführen:
syncoid --no-sync-snap --delete-target-snapshots --recvoptions="o recordsize=512K" hellraiser/musik root@newserver:hellraiser/encrypted/musik
Samba
Der Homeserver soll natürlich auch als Fileserver dienen. Dazu wird Samba benutzt:
pkg install samba419
- Die Samba-Konfigurationsdatei:
/usr/local/etc/smb4.conf
- Alle Samba-Datenbanken liegen in:
/var/db/samba4
- Alle Logs sind in:
/var/log/samba4
Eine einfache /usr/local/etc/smb4.conf
für den Heimgebrauch erstellen:
[global]
workgroup = WORKGROUP
netbios name = MYSERVER
unix extensions = yes
security = user
encrypt passwords = yes
passdb backend = tdbsam
server signing = mandatory
# Login-Versuche loggen
# log level = 1 auth:3
vfs objects = fruit streams_xattr zfsacl
access based share enum = yes
# DOS attribute stuff
store dos attributes = yes
map hidden = no
map system = no
map archive = no
map readonly = no
# macOS optimization: https://wiki.samba.org/index.php/Configure_Samba_to_Work_Better_with_Mac_OS_X
fruit:metadata = stream
fruit:model = MacSamba
fruit:posix_rename = yes
fruit:veto_appledouble = no
fruit:nfs_aces = no
fruit:wipe_intentionally_left_blank_rfork = yes
fruit:delete_empty_adfiles = yes
[homes]
comment = User %u's Data Share
path = /mnt/homes/%S
browseable = no
valid users = %S
writable = yes
hide unreadable = no
[fotos]
comment = Foto Share
path = /mnt/fotos
writable = yes
hide unreadable = no
[musik]
comment = Musik Share
path = /mnt/musik
writable = yes
hide unreadable = no
[public]
comment = Public Share
path = /mnt/pub
writable = yes
hide unreadable = no
Benutzer erstellen, die Zugriff auf den Samba-Server erhalten sollen:
pw user add -s /usr/sbin/nologin -n usera
pw user add -s /usr/sbin/nologin -n userb
pw user add -s /usr/sbin/nologin -n userc
pw user add -s /usr/sbin/nologin -n userd
Passwörter für Samba erstellen:
smbpasswd -a usera
smbpasswd -a userb
smbpasswd -a userc
smbpasswd -a userd
Samba-Service aktivieren:
sysrc samba_server_enable="YES"
service samba_server start
NFSv4
NFS verwende ich nur, um Ordner mit “öffentlichen” Daten in VMs zu mounten, z.B. die Musiksammlung im Lyrion-Mediaserver. Dazu NFSv4 aktivieren:
sysrc nfs_server_enable="YES"
sysrc nfsv4_server_enable="YES"
sysrc nfsv4_server_only="YES"
sysrc mountd_enable="YES"
Ein ZFS-Dataset readonly freigeben:
zfs set sharenfs=ro hellraiser/encrypted/musik
Und eine /etc/exports
erstellen:
# Set nfs sharing in the datasets, e.g. "zfs set sharenfs=ro tank/data"
#
# NFSv4 root filesystem, make sure there are only ZFS datasets mounted below this dir!
V4: /mnt -network 10.0.0.0 -mask 255.255.255.0
Nach dem editieren der /etc/exports
muss mountd
die Datei neu einlesen: service mountd reload
Backup
Backups lassen sich mit restic
erstellen und auf einen externen Server übertragen, z.B. zu einer Hetzner Storagebox:
pkg install restic
Siehe dazu auch das Tool https://github.com/thenktor/restic-dataset-backup