# Initial setup

- Cambiare la password di `root`
- Aggiornare tutti i pacchetti
- Verificare i limiti della cache di ZFS. Altrimenti impostarli in base alle specifiche ([How to set up ZFS ARC size on Ubuntu/Debian Linux](https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/))

```sh
vim /etc/modprobe.d/zfs.conf
cat /etc/modprobe.d/zfs.conf

options zfs zfs_arc_min=4294967296
options zfs zfs_arc_max=17179869184

arc_summary | head -n 15

update-initramfs
```

- Aggiungere i repository community, disabilitando quelli enterprise

```sh
cat /etc/apt/sources.list

deb http://ftp.it.debian.org/debian bookworm main contrib
deb http://ftp.it.debian.org/debian bookworm-updates main contrib
# Proxmox VE pve-no-subscription repository provided by proxmox.com
# NOT recommended for production use
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
# security updates
deb http://security.debian.org bookworm-security main contrib
```

- Installare il seguente pacchetto e abilitarlo:

```sh
apt install resolvconf
systemctl enable --now resolvconf.service
systemctl status resolvconf.service
```

- Impostare i DNS corretti. Modificare il file di configurazione, aggiungendo i DNS:

```sh
cat /etc/resolvconf/resolv.conf.d/head

nameserver 1.1.1.1
nameserver 9.9.9.9
```

- Infine, aggiornare il file `resolv.conf` coi seguenti comandi:

```sh
resolvconf --enable-updates
resolvconf -u
```

## ARC, L2ARC e ZIL

> L’`ARC` (`Adaptive Replacement Cache`) è una cache in memoria RAM utilizzata da ZFS per memorizzare dati e metadati frequentemente accessibili. La dimensione raccomandata per l’ARC è pari al **50% della RAM totale** disponibile sul sistema. L’obiettivo è ridurre la latenza di accesso ai dati più utilizzati, migliorando le prestazioni complessive del filesystem.
>
> La `L2ARC` (`Level 2 Adaptive Replacement Cache`) è una cache di secondo livello, tipicamente implementata su dispositivi di archiviazione veloci come **SSD**. La sua funzione è estendere la capacità di caching oltre i limiti della RAM, memorizzando dati che non possono essere mantenuti nell’ARC a causa di vincoli di spazio. La dimensione raccomandata é di **1 o 2 volte la dimensione della RAM**, ma la scelta ottimale dipende dal carico di lavoro e dalla tipologia di dati gestiti.
>
> Il `ZIL` (`ZFS Intent Log`) è un log temporaneo che registra le operazioni di scrittura sincrona. Quando un’applicazione richiede una scrittura su un dataset ZFS, i dati vengono inizialmente memorizzati nel ZIL. Dopo la scrittura nel ZIL, ZFS procede con la scrittura asincrona dei dati nel pool di archiviazione principale. Questo meccanismo consente di completare le operazioni di scrittura più rapidamente, poiché il sistema non deve attendere il completamento della scrittura fisica su disco.La dimensione raccomandata é di **4-8 GB**, a seconda del carico di lavoro.

- Per fare un semplice esempio, se il server ha 64GB di RAM:

```txt
ARC: min 4GB max 16GB

# disco NVME
ZIL: 8GB (part1)
L2ARC: 64GB (part2)
```

- Formattare il disco NVME
- Creare partizione da 8Gb per i file di log ZIL e 64GB per L2ARC

```sh
fdisk /dev/nvme0n1

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): g
Created a new GPT disklabel (GUID: A66D8E55-F0B1-E64B-BDEF-34721FA5941F).

Command (m for help): n
Partition number (1-128, default 1):
First sector (2048-976773134, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-976773134, default 976773119): +8G

Command (m for help): n
Partition number (2-128, default 2):
First sector (16779264-976773134, default 16779264):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (16779264-976773134, default 976773119): +128G

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 465,76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: Samsung SSD 980 PRO 500GB
[...]
/dev/nvme0n1p1 2048 16779263 16777216 8G Linux filesystem
/dev/nvme0n1p2 16779264 285214719 268435456 128G Linux filesystem
```

- Aggiungere i pool di log e cache

```sh
# Sostituire a rpool il nome del proprio pool

zpool add rpool log /dev/disk/by-id/nvme-Samsung_SSD_980_PRO_500GB_S5GYNF0TC09245W_1-part1

zpool add rpool cache /dev/disk/by-id/nvme-Samsung_SSD_980_PRO_500GB_S5GYNF0TC09245W_1-part2
```

## HDD pool

- Nel caso si disponda di dischi HDD, possono essere usati per il backup. Per creare un pool, dare il comando seguente:

```sh
zpool create pool_name /dev/disk/by-id/scsi-serial-disk1 /dev/disk/by-id/scsi-serial-disk2 -f

zpool import pool_name
```

- Nel casi si volesse rimuovere un pool: `zpool export pool_name`
- Oppure, da interfaccia Web di PVE

![zfs-create-pool](asset/img/zfs-create-pool.png)

## Volume di swap e swappiness

```sh
zfs create -V 8G -b $(getconf PAGESIZE) -o compression=zle -o logbias=throughput -o sync=always -o primarycache=metadata -o secondarycache=none -o com.sun:auto-snapshot=false rpool/swap

mkswap -f /dev/zvol/rpool/swap
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)
no label, UUID=52676e07-30d9-4e74-b972-43c7eea6cf33

swapon /dev/zvol/rpool/swap

swapon  
NAME    TYPE    SIZE USED PRIO
/dev/zd16 partition 8G 0B -2
```

- Per rendere la swap permanete

```sh
cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/zvol/rpool/swap none swap sw,discard 0 0
```

- Configurare lo `swappiness=10`. Aggiungere la seguente righe al file `sysctl.conf`

```sh
cat /etc/sysctl.conf
vm.swappiness=10
```

- Infine, dare i comandi seguenti:

```sh
sysctl vm.swappiness=10
update-initramfs -u
```

## Tool megaraid/sas2ircu

> Il tool `megaraid` (solo per R630) o `sas2irq` indica quale disco (in base al seriale) sta in quale slot

```sh
cat > /etc/apt/sources.list.d/raid.list << EOF
deb http://hwraid.le-vert.net/debian bookworm main
EOF

wget -O - https://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | sudo apt-key add -

apt update && apt install megaclisas-status / apt install sas2ircu

systemctl disable megaclisas-statusd.service
```

## SMTP

- Configurare l'invio della mail da interfaccia Web in `Datacenter > Notifications`
