Auto-update blog content from Obsidian: 2026-02-27 22:01:25
All checks were successful
Blog Deployment / Check-Rebuild (push) Successful in 6s
Blog Deployment / Build (push) Has been skipped
Blog Deployment / Deploy-Staging (push) Successful in 9s
Blog Deployment / Test-Staging (push) Successful in 2s
Blog Deployment / Merge (push) Successful in 7s
Blog Deployment / Deploy-Production (push) Successful in 9s
Blog Deployment / Test-Production (push) Successful in 2s
Blog Deployment / Clean (push) Has been skipped
Blog Deployment / Notify (push) Successful in 2s

This commit is contained in:
Gitea Actions
2026-02-27 22:01:25 +00:00
parent 6fa0fed3c5
commit ef4a5aefd1
2 changed files with 90 additions and 85 deletions

View File

@@ -78,142 +78,146 @@ Failed to find partition number 2 on mmcblk0
J'ai trouvé une solution sur ce [post](https://forums.truenas.com/t/installation-failed-on-emmc-odroid-h4/15317/12) :
- Entrer dans le shell
![Enter the shell in TrueNAS installer](img/truenas-iso-enter-shell.png)
- Edit the file `/lib/python3/dist-packages/truenas_installer/utils.py`
- Move the line `await asyncio.sleep(1)` right beneath `for _try in range(tries):`
- Edit line 46 to add `+ 'p'`:
- Éditer le fichier `/lib/python3/dist-packages/truenas_installer/utils.py`
- Déplacer la ligne `await asyncio.sleep(1)` juste sous `for _try in range(tries):`
- Modifier la ligne 46 pour ajouter `+ 'p'` :
`for partdir in filter(lambda x: x.is_dir() and x.name.startswith(device + 'p'), dir_contents):`
![Fixed file in the TrueNAS installer](img/truenas-iso-fix-installer.png)
- Exit the shell and start the installation without reboot
![Fichier corrigé dans l'installateur TrueNAS](img/truenas-iso-fix-installer.png)
- Quitter le shell et lancer l'installation sans redémarrer
The installer was finally able to get through:
![TrueNAS installation progress](img/truenas-iso-installation.png)
L'installateur a finalement pu passer :
![Progression de l'installation de TrueNAS](img/truenas-iso-installation.png)
Once the installation was complete, I shut down the machine. Then I installed it into my rack on top of the 3 Proxmox VE nodes. I plugged both Ethernet cables from my switch and powered it up.
Une fois l'installation terminée, j'ai éteint la machine. Ensuite je l'ai installée dans mon rack au-dessus des 3 nœuds Proxmox VE. J'ai branché les deux câbles Ethernet depuis mon switch et je l'ai mise sous tension.
## Configure TrueNAS
## Configurer TrueNAS
By default, TrueNAS uses DHCP. I found its MAC in UniFi and created a DHCP reservation. In OPNsense, I added a Dnsmasq host override. In the Caddy plugin, I set up a domain for TrueNAS pointing to that IP, then rebooted.
Par défaut, TrueNAS utilise DHCP. J'ai trouvé son adresse MAC dans mon interface UniFi et créé une réservation DHCP. Dans OPNsense, j'ai ajouté un override host pour Dnsmasq. Dans le plugin Caddy, j'ai configuré un domaine pour TrueNAS pointant vers cette IP, puis j'ai redémarré.
✅ After a few minutes, TrueNAS is now available on https://nas.vezpi.com.
### General Settings
✅ Après quelques minutes, TrueNAS est maintenant disponible sur [https://nas.vezpi.com](https://nas.vezpi.com/).
During install, I didnt set a password for truenas_admin. The login page forced me to pick one:
![TrueNAS login page to change `truenas_admin` password](img/truenas-login-page-change-password.png)
### Paramètres généraux
Once the password is updated, I land on the dashboard. The UI feels great at first glance:
![TrueNAS dashboard](img/truenas-fresh-install-dashboard.png)
Pendant l'installation, je n'ai pas défini de mot de passe pour truenas_admin. La page de connexion m'a forcé à en choisir un :
![Page de connexion TrueNAS pour changer le mot de passe de `truenas_admin`](img/truenas-login-page-change-password.png)
I quickly explore the interface, the first thing I do is changing the hostname to `granite` and check the box below et it inherit domain from DHCP:
![TrueNAS hostname configuration](img/truenas-config-change-hostname.png)
Une fois le mot de passe mis à jour, j'arrive sur le tableau de bord. L'interface donne une bonne impression au premier abord :
![Tableau de bord de TrueNAS](img/truenas-fresh-install-dashboard.png)
In the `General Settings`, I change the `Localization` settings. I set the Console Keyboard Map to `French (AZERTY)` and the Timezone to `Europe/Paris`.
J'explore rapidement l'interface, la première chose que je fais est de changer le hostname en `granite` et de cocher la case en dessous pour hériter du domaine depuis DHCP :
![Configuration du hostname dans TrueNAS](img/truenas-config-change-hostname.png)
I create a new user `vez`, with `Full Admin` role within TrueNAS. I allow SSH for keybased auth only, no passwords:
![TrueNAS user creation](img/truenas-create-new-user.png)
Dans les `General Settings`, je change les paramètres de `Localization`. Je mets le Console Keyboard Map sur `French (AZERTY)` et le Fuseau horaire sur `Europe/Paris`.
Finally I remove the admin role from `truenas_admin` and lock the account.
Je crée un nouvel utilisateur `vez`, avec le rôle `Full Admin` dans TrueNAS. J'autorise SSH uniquement pour l'authentification par clé, pas de mots de passe :
![Création d'un utilisateur dans TrueNAS](img/truenas-create-new-user.png)
### Pool creation
Finalement je retire le rôle admin de `truenas_admin` et verrouille le compte.
In TrueNAS, a pool is a storage collection created by combining multiple disks into a unified ZFSmanaged space.
### Création du pool
In the `Storage` page, I can find my `Disks`, where I can confirm TrueNAS can see my couple of NVMe drives:
Dans TrueNAS, un pool est une collection de stockage créée en combinant plusieurs disques en un espace unifié géré par ZFS.
Dans la page `Storage`, je trouve mes `Disks`, où je peux confirmer que TrueNAS voit mon couple de NVMe :
![List of available disks in TrueNAS](img/truenas-storage-disks-unconfigured.png)
Back in the `Storage Dashboard`, I click the `Create Pool` button. I name the pool `storage` because I'm really inspired to give it a name:
![Pool creation wizard in TrueNAS](img/truenas-pool-creation-general.png)
De retour sur le `Storage Dashboard`, je clique sur le bouton `Create Pool`. Je nomme le pool `storage` parce que je suis vraiment inspiré pour lui donner un nom :
![Assistant de création de pool dans TrueNAS](img/truenas-pool-creation-general.png)
Then I select the `Mirror` layout:
Puis je sélectionne la disposition `Mirror` :
![Disk layout selection in the pool creation wizard in TrueNAS](img/truenas-pool-creation-layout.png)
I explore quickly the optional configurations, but the defaults are fine to me: autotrim, compression, no dedup, etc. At the end, before creating the pool, there is a `Review` section:
J'explore rapidement les configurations optionnelles, mais les valeurs par défaut me conviennent : autotrim, compression, pas de dedup, etc. À la fin, avant de créer le pool, il y a une section `Review` :
![Review section of the pool creation wizard in TrueNAS](img/truenas-pool-creation-review.png)
After hitting `Create Pool`, I'm warned that everything on the disks will be wiped, which I confirm. Finally the pool is created.
Après avoir cliqué sur `Create Pool`, on m'avertit que tout sur les disques sera effacé, ce que je confirme. Finalement le pool est créé.
### Datasets creation
### Création des datasets
A dataset is a filesystem inside a pool. It can contains files, directories and child datasets, it can be shared using NFS and/or SMB. It allows you to independently manage permissions, compression, snapshots, and quotas for different sets of data within the same storage pool.
Un dataset est un système de fichiers à l'intérieur d'un pool. Il peut contenir des fichiers, des répertoires et des datasets enfants, il peut être partagé via NFS et/ou SMB. Il vous permet de gérer indépendamment les permissions, la compression, les snapshots et les quotas pour différents ensembles de données au sein du même pool de stockage.
#### SMB share
#### Partage SMB
Let's now create my first dataset `files` to share files over the network for my Windows client, like ISOs, etc:
Créons maintenant mon premier dataset `files` pour partager des fichiers sur le réseau pour mes clients Windows, comme des ISOs, etc :
![Create a dataset in TrueNAS](img/truenas-create-dataset-files.png)
When creating SMB datasets in SCALE, set Share Type to SMB so the right ACL/xattr defaults apply. TrueNAS then prompts me to start/enable the SMB service:
![Prompt to start SMB service in TrueNAS](img/truenas-start-smb-service.png)
Lors de la création de datasets SMB dans SCALE, définissez le Share Type sur SMB afin que les bons ACL/xattr par défaut s'appliquent. TrueNAS me demande alors de démarrer/activer le service SMB :
![Invite à démarrer le service SMB dans TrueNAS](img/truenas-start-smb-service.png)
From my Windows Laptop, I try to access my new share `\\granite.mgmt.vezpi.com\files`. As expected I'm prompt to give credentials.
Depuis mon portable Windows, j'essaie d'accéder à mon nouveau partage `\\granite.mgmt.vezpi.com\files`. Comme prévu on me demande des identifiants.
I create a new user account with SMB permission.
Je crée un nouveau compte utilisateur avec permission SMB.
✅ Success: I can browse and copy files.
✅ Succès : je peux parcourir et copier des fichiers.
#### NFS share
#### Partage NFS
I create another dataset: `media`, and a child `photos`. I create a NFS share from the latter.
Je crée un autre dataset : `media`, et un enfant `photos`. Je crée un partage NFS à partir de ce dernier.
On my current NFS server, the files for the photos are owned by `root` (managed by *Immich*). Later I'll see how I can migrate towards a root-less version.
Sur mon serveur NFS actuel, les fichiers photos sont possédés par `root` (gérés par _Immich_). Plus tard je verrai comment migrer vers une version sans root.
⚠️ For now I set, in `Advanced Options`, the `Maproot User` and `Maproot Group` to `root`. This is equivalent to the NFS attribute `no_squash_root`, the local `root` of the client stays `root` on the server, don't do that:
⚠️ Pour l'instant je définis, dans les `Advanced Options`, le `Maproot User` et le `Maproot Group` sur `root`. Cela équivaut à l'attribut NFS `no_squash_root`, le `root` local du client reste `root` sur le serveur, ne faites pas ça :
![NFS share permission in TrueNAS](img/truenas-dataset-photos-nfs-share.png)
I mount the NFS share on a client, this works fine.
Je monte le partage NFS sur un client, cela fonctionne bien.
After initial setup, my `storage` pool datasets look like:
- backups
- `duplicati`: [Duplicati](https://duplicati.com/) storage backend
- `proxmox`: future Proxmox Backup Server
- `cloud`: `Nextcloud` data
- `files`:
Après la configuration initiale, mes datasets du pool `storage` ressemblent à :
- `backups`
- `duplicati` : backend de stockage [Duplicati](https://duplicati.com/)
- `proxmox` : futur Proxmox Backup Server
- `cloud` : données `Nextcloud`
- `files` :
- `media`
- `downloads`
- `photos`
- `videos`
- `downloads`
- `photos`
- `videos`
I mentioned VM capabilities in my requirements. I won't cover that is this post, it will be covered next time.
### Data protection
J'ai mentionné les capacités VM dans mes exigences. Je ne couvrirais pas cela dans ce post, ce sera abordé la prochaine fois.
Now time to enable some data protection features:
### Protection des données
Il est maintenant temps d'activer quelques fonctionnalités de protection des données :
![Data protection features in TrueNAS](img/truenas-data-protection-tab.png)
I want to create automatic snapshots for some of my datasets, those I care the most: my cloud files and photos.
Je veux créer des snapshots automatiques pour certains de mes datasets, ceux qui me tiennent le plus à cœur : mes fichiers cloud et les photos.
Let's create snapshot tasks. I click on the `Add` button next to `Periodic Snapshot Tasks`:
- cloud: daily snapshots, keep for 2 months
- photos: daily snapshots, keep for 7 days
Créons des tâches de snapshot. Je clique sur le bouton `Add` à côté de `Periodic Snapshot Tasks` :
- cloud : snapshots quotidiens, conserver pendant 2 mois
- photos : snapshots quotidiens, conserver pendant 7 jours
![Create periodic snapshot task in TrueNAS ](img/truenas-create-periodic-snapshot.png)
I could also set up a `Cloud Sync Task`, but Duplicati already handles offsite backups.
Je pourrais aussi configurer une `Cloud Sync Task`, mais Duplicati gère déjà les sauvegardes hors site.
---
## Using TrueNAS
## Utilisation de TrueNAS
Now my TrueNAS instance is configured, I need to plan the migration of the data from my current NFS server to TrueNAS.
### Data migration
Maintenant que mon instance TrueNAS est configurée, je dois planifier la migration des données depuis mon serveur NFS actuel vers TrueNAS.
For each of my current NFS shares, on a client, I mount the new NFS share to synchronize the data:
### Migration des données
Pour chacun de mes partages NFS actuels, sur un client, je monte le nouveau partage NFS pour synchroniser les données :
```
sudo mkdir /new_photos
sudo mount 192.168.88.30:/mnt/storage/media/photos /new_photos
sudo rsync -a --info=progress2 /data/photo/ /new_photos
```
At the end, I could decommission my old NFS server on the LXC. The dataset layout after migration looks like this:
À la fin, je pourrais décommissionner mon ancien serveur NFS sur le LXC. La disposition des datasets après migration ressemble à ceci :
![Dataset layout in TrueNAS](img/truenas-datasets-layout.png)
### Android application
### Application Android
Out of curiosity, I've checked on the Google Play store for an app to manage a TrueNAS instance. I've found [Nasdeck](https://play.google.com/store/apps/details?id=com.strtechllc.nasdeck&hl=fr&pli=1), which is quite nice. Here some screenshots:
![Screenshots of Nasdeck application](img/nasdeck-android-app.png)
Par curiosité, j'ai cherché sur le Play Store une application pour gérer une instance TrueNAS. J'ai trouvé [Nasdeck](https://play.google.com/store/apps/details?id=com.strtechllc.nasdeck&hl=fr&pli=1), qui est plutôt sympa. Voici quelques captures d'écran :
![Captures d'écran de l'application Nasdeck](img/nasdeck-android-app.png)
---
## Conclusion
My NAS is now ready to store my data.
Mon NAS est maintenant prêt à stocker mes données.
I didn't address VM capabilities as I will experience it soon to install Proxmox Backup Server as VM. Also I didn't configure notifications, I need to setup a solution to receive email alerts to my notification system.
Je n'ai pas abordé les capacités VM car je vais bientôt les expérimenter pour installer Proxmox Backup Server en VM. De plus je n'ai pas configuré les notifications, je dois mettre en place une solution pour recevoir des alertes par email dans mon système de notification.
TrueNAS is a great product. It needs capable hardware for ZFS, but the experience is excellent once set up.
TrueNAS est un excellent produit. Il nécessite du matériel capable pour ZFS, mais l'expérience est excellente une fois configuré.
Next step: deploy Proxmox Backup Server as a VM on TrueNAS, then revisit NFS permissions to go rootless for Immich.
Étape suivante : déployer Proxmox Backup Server en tant que VM sur TrueNAS, puis revoir les permissions NFS pour passer Immich en mode sans root.

View File

@@ -81,34 +81,34 @@ I found a solution on this [post](https://forums.truenas.com/t/installation-fail
- Move the line `await asyncio.sleep(1)` right beneath `for _try in range(tries):`
- Edit line 46 to add `+ 'p'`:
`for partdir in filter(lambda x: x.is_dir() and x.name.startswith(device + 'p'), dir_contents):`
![Fixed file in the TrueNAS installer](img/truenas-iso-fix-installer.png)
![Fichier corrigé dans l'installateur TrueNAS](img/truenas-iso-fix-installer.png)
- Exit the shell and start the installation without reboot
The installer was finally able to get through:
![TrueNAS installation progress](img/truenas-iso-installation.png)
![Progression de l'installation de TrueNAS](img/truenas-iso-installation.png)
Once the installation was complete, I shut down the machine. Then I installed it into my rack on top of the 3 Proxmox VE nodes. I plugged both Ethernet cables from my switch and powered it up.
## Configure TrueNAS
By default, TrueNAS uses DHCP. I found its MAC in UniFi and created a DHCP reservation. In OPNsense, I added a Dnsmasq host override. In the Caddy plugin, I set up a domain for TrueNAS pointing to that IP, then rebooted.
By default, TrueNAS uses DHCP. I found its MAC address in my UniFi interface and created a DHCP reservation. In OPNsense, I added a Dnsmasq host override. In the Caddy plugin, I set up a domain for TrueNAS pointing to that IP, then rebooted.
✅ After a few minutes, TrueNAS is now available on https://nas.vezpi.com.
### General Settings
During install, I didnt set a password for truenas_admin. The login page forced me to pick one:
![TrueNAS login page to change `truenas_admin` password](img/truenas-login-page-change-password.png)
![Page de connexion TrueNAS pour changer le mot de passe de `truenas_admin`](img/truenas-login-page-change-password.png)
Once the password is updated, I land on the dashboard. The UI feels great at first glance:
![TrueNAS dashboard](img/truenas-fresh-install-dashboard.png)
![Tableau de bord de TrueNAS](img/truenas-fresh-install-dashboard.png)
I quickly explore the interface, the first thing I do is changing the hostname to `granite` and check the box below et it inherit domain from DHCP:
![TrueNAS hostname configuration](img/truenas-config-change-hostname.png)
![Configuration du hostname dans TrueNAS](img/truenas-config-change-hostname.png)
In the `General Settings`, I change the `Localization` settings. I set the Console Keyboard Map to `French (AZERTY)` and the Timezone to `Europe/Paris`.
I create a new user `vez`, with `Full Admin` role within TrueNAS. I allow SSH for keybased auth only, no passwords:
![TrueNAS user creation](img/truenas-create-new-user.png)
![Création d'un utilisateur dans TrueNAS](img/truenas-create-new-user.png)
Finally I remove the admin role from `truenas_admin` and lock the account.
@@ -120,7 +120,7 @@ In the `Storage` page, I can find my `Disks`, where I can confirm TrueNAS can se
![List of available disks in TrueNAS](img/truenas-storage-disks-unconfigured.png)
Back in the `Storage Dashboard`, I click the `Create Pool` button. I name the pool `storage` because I'm really inspired to give it a name:
![Pool creation wizard in TrueNAS](img/truenas-pool-creation-general.png)
![Assistant de création de pool dans TrueNAS](img/truenas-pool-creation-general.png)
Then I select the `Mirror` layout:
![Disk layout selection in the pool creation wizard in TrueNAS](img/truenas-pool-creation-layout.png)
@@ -136,11 +136,11 @@ A dataset is a filesystem inside a pool. It can contains files, directories and
#### SMB share
Let's now create my first dataset `files` to share files over the network for my Windows client, like ISOs, etc:
Let's now create my first dataset `files` to share files over the network for my Windows clients, like ISOs, etc:
![Create a dataset in TrueNAS](img/truenas-create-dataset-files.png)
When creating SMB datasets in SCALE, set Share Type to SMB so the right ACL/xattr defaults apply. TrueNAS then prompts me to start/enable the SMB service:
![Prompt to start SMB service in TrueNAS](img/truenas-start-smb-service.png)
![Invite à démarrer le service SMB dans TrueNAS](img/truenas-start-smb-service.png)
From my Windows Laptop, I try to access my new share `\\granite.mgmt.vezpi.com\files`. As expected I'm prompt to give credentials.
@@ -160,7 +160,7 @@ On my current NFS server, the files for the photos are owned by `root` (managed
✅ I mount the NFS share on a client, this works fine.
After initial setup, my `storage` pool datasets look like:
- backups
- `backups`
- `duplicati`: [Duplicati](https://duplicati.com/) storage backend
- `proxmox`: future Proxmox Backup Server
- `cloud`: `Nextcloud` data
@@ -171,6 +171,7 @@ After initial setup, my `storage` pool datasets look like:
- `videos`
I mentioned VM capabilities in my requirements. I won't cover that is this post, it will be covered next time.
### Data protection
Now time to enable some data protection features:
@@ -204,7 +205,7 @@ At the end, I could decommission my old NFS server on the LXC. The dataset layou
### Android application
Out of curiosity, I've checked on the Google Play store for an app to manage a TrueNAS instance. I've found [Nasdeck](https://play.google.com/store/apps/details?id=com.strtechllc.nasdeck&hl=fr&pli=1), which is quite nice. Here some screenshots:
![Screenshots of Nasdeck application](img/nasdeck-android-app.png)
![Captures d'écran de l'application Nasdeck](img/nasdeck-android-app.png)
---
## Conclusion