Auto-update blog content from Obsidian: 2026-04-29 20:40:29
Some checks failed
Blog Deployment / Notify (push) Successful in 3s
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) Failing after 3s
Blog Deployment / Merge (push) Has been skipped
Blog Deployment / Test-Production (push) Has been skipped
Blog Deployment / Clean (push) Has been skipped
Blog Deployment / Deploy-Production (push) Has been skipped

This commit is contained in:
Gitea Actions
2026-04-29 20:40:29 +00:00
parent 5936475f99
commit 4143724c86
201 changed files with 322 additions and 320 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@@ -68,7 +68,7 @@ J'ai considéré FreeNAS/TrueNAS, OpenMediaVault et Unraid. J'ai choisi TrueNAS
L'installation ne s'est pas déroulée aussi bien que prévu...
J'utilise [Ventoy](https://www.ventoy.net/en/index.html) pour garder plusieurs ISOs sur une clé USB. J'étais en version 1.0.99, et l'ISO ne se lançait pas. La mise à jour vers 1.1.10 a résolu le problème :
![TrueNAS installation splash screen](img/truenas-iso-installation-splash.png)
![Écran d'accueil d'installation de TrueNAS](images/truenas-iso-installation-splash.png)
Mais là j'ai rencontré un autre problème lors du lancement de l'installation sur mon périphérique de stockage eMMC :
```
@@ -77,16 +77,16 @@ 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)
![Entrer dans le shell de l'installateur TrueNAS](images/truenas-iso-enter-shell.png)
- É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):`
![Fichier corrigé dans l'installateur TrueNAS](img/truenas-iso-fix-installer.png)
![Fichier corrigé dans l'installateur TrueNAS](images/truenas-iso-fix-installer.png)
- Quitter le shell et lancer l'installation sans redémarrer
L'installateur a finalement pu passer :
![Progression de l'installation de TrueNAS](img/truenas-iso-installation.png)
![Progression de l'installation de TrueNAS](images/truenas-iso-installation.png)
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.
@@ -99,18 +99,18 @@ Par défaut, TrueNAS utilise DHCP. J'ai trouvé son adresse MAC dans mon interfa
### Paramètres généraux
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)
![Page de connexion TrueNAS pour changer le mot de passe de `truenas_admin`](images/truenas-login-page-change-password.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)
![Tableau de bord de TrueNAS](images/truenas-fresh-install-dashboard.png)
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)
![Configuration du hostname dans TrueNAS](images/truenas-config-change-hostname.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`.
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)
![Création d'un utilisateur dans TrueNAS](images/truenas-create-new-user.png)
Finalement je retire le rôle admin de `truenas_admin` et verrouille le compte.
@@ -119,16 +119,16 @@ Finalement je retire le rôle admin de `truenas_admin` et verrouille le compte
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)
![Liste des disques disponibles dans TrueNAS](images/truenas-storage-disks-unconfigured.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)
![Assistant de création de pool dans TrueNAS](images/truenas-pool-creation-general.png)
Puis je sélectionne la disposition `Mirror` :
![Disk layout selection in the pool creation wizard in TrueNAS](img/truenas-pool-creation-layout.png)
![Sélection de la disposition des disques dans l'assistant de création de pool dans TrueNAS](images/truenas-pool-creation-layout.png)
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)
![Section de révision de l'assistant de création de pool dans TrueNAS](images/truenas-pool-creation-review.png)
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éé.
@@ -139,10 +139,10 @@ Un dataset est un système de fichiers à l'intérieur d'un pool. Il peut conten
#### Partage SMB
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)
![Créer un dataset dans TrueNAS](images/truenas-create-dataset-files.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)
![Invite à démarrer le service SMB dans TrueNAS](images/truenas-start-smb-service.png)
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.
@@ -157,7 +157,7 @@ Je crée un autre dataset : `media`, et un enfant `photos`. Je crée un partag
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.
⚠️ 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)
![Permissions du partage NFS dans TrueNAS](images/truenas-dataset-photos-nfs-share.png)
✅ Je monte le partage NFS sur un client, cela fonctionne bien.
@@ -178,14 +178,14 @@ J'ai mentionné les capacités VM dans mes exigences. Je ne couvrirais pas cela
### 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)
![Fonctionnalités de protection des données dans TrueNAS](images/truenas-data-protection-tab.png)
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.
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)
![Créer une tâche de snapshot périodique dans TrueNAS](images/truenas-create-periodic-snapshot.png)
Je pourrais aussi configurer une `Cloud Sync Task`, mais Duplicati gère déjà les sauvegardes hors site.
@@ -204,12 +204,12 @@ sudo rsync -a --info=progress2 /data/photo/ /new_photos
```
À 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)
![Disposition des datasets dans TrueNAS](images/truenas-datasets-layout.png)
### Application Android
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)
![Captures d'écran de l'application Nasdeck](images/nasdeck-android-app.png)
---
## Conclusion

View File

@@ -67,7 +67,7 @@ I considered FreeNAS/TrueNAS, OpenMediaVault, and Unraid. I chose TrueNAS SCALE
The install didnt go as smoothly as expected...
I use [Ventoy](https://www.ventoy.net/en/index.html) to keep multiple ISOs on one USB stick. I was in version 1.0.99, and the ISO wouldn't launch. Updating to 1.1.10 fixed it:
![TrueNAS installation splash screen](img/truenas-iso-installation-splash.png)
![TrueNAS installation splash screen](images/truenas-iso-installation-splash.png)
But here I encountered another problem when launching the installation on my eMMC storage device:
```
@@ -76,16 +76,16 @@ Failed to find partition number 2 on mmcblk0
I found a solution on this [post](https://forums.truenas.com/t/installation-failed-on-emmc-odroid-h4/15317/12):
- Enter the shell
![Enter the shell in TrueNAS installer](img/truenas-iso-enter-shell.png)
![Enter the shell in TrueNAS installer](images/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'`:
`for partdir in filter(lambda x: x.is_dir() and x.name.startswith(device + 'p'), dir_contents):`
![Fichier corrigé dans l'installateur TrueNAS](img/truenas-iso-fix-installer.png)
![Fixed file in the TrueNAS installer](images/truenas-iso-fix-installer.png)
- Exit the shell and start the installation without reboot
The installer was finally able to get through:
![Progression de l'installation de TrueNAS](img/truenas-iso-installation.png)
![TrueNAS installation progress](images/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.
@@ -97,18 +97,18 @@ By default, TrueNAS uses DHCP. I found its MAC address in my UniFi interface and
### General Settings
During install, I didnt set a password for truenas_admin. The login page forced me to pick one:
![Page de connexion TrueNAS pour changer le mot de passe de `truenas_admin`](img/truenas-login-page-change-password.png)
![TrueNAS login page to change `truenas_admin` password](images/truenas-login-page-change-password.png)
Once the password is updated, I land on the dashboard. The UI feels great at first glance:
![Tableau de bord de TrueNAS](img/truenas-fresh-install-dashboard.png)
![TrueNAS dashboard](images/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:
![Configuration du hostname dans TrueNAS](img/truenas-config-change-hostname.png)
![TrueNAS hostname configuration](images/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:
![Création d'un utilisateur dans TrueNAS](img/truenas-create-new-user.png)
![TrueNAS user creation](images/truenas-create-new-user.png)
Finally I remove the admin role from `truenas_admin` and lock the account.
@@ -117,16 +117,16 @@ Finally I remove the admin role from `truenas_admin` and lock the account.
In TrueNAS, a pool is a storage collection created by combining multiple disks into a unified ZFSmanaged space.
In the `Storage` page, I can find my `Disks`, where I can confirm TrueNAS can see my couple of NVMe drives:
![List of available disks in TrueNAS](img/truenas-storage-disks-unconfigured.png)
![List of available disks in TrueNAS](images/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:
![Assistant de création de pool dans TrueNAS](img/truenas-pool-creation-general.png)
![Pool creation wizard in TrueNAS](images/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)
![Disk layout selection in the pool creation wizard in TrueNAS](images/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:
![Review section of the pool creation wizard in TrueNAS](img/truenas-pool-creation-review.png)
![Review section of the pool creation wizard in TrueNAS](images/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.
@@ -137,10 +137,10 @@ 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 clients, like ISOs, etc:
![Create a dataset in TrueNAS](img/truenas-create-dataset-files.png)
![Create a dataset in TrueNAS](images/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:
![Invite à démarrer le service SMB dans TrueNAS](img/truenas-start-smb-service.png)
![Prompt to start SMB service in TrueNAS](images/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.
@@ -155,7 +155,7 @@ I create another dataset: `media`, and a child `photos`. I create a NFS share fr
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.
⚠️ 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:
![NFS share permission in TrueNAS](img/truenas-dataset-photos-nfs-share.png)
![NFS share permission in TrueNAS](images/truenas-dataset-photos-nfs-share.png)
✅ I mount the NFS share on a client, this works fine.
@@ -175,14 +175,14 @@ I mentioned VM capabilities in my requirements. I won't cover that is this post,
### Data protection
Now time to enable some data protection features:
![Data protection features in TrueNAS](img/truenas-data-protection-tab.png)
![Data protection features in TrueNAS](images/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.
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
![Create periodic snapshot task in TrueNAS ](img/truenas-create-periodic-snapshot.png)
![Create periodic snapshot task in TrueNAS ](images/truenas-create-periodic-snapshot.png)
I could also set up a `Cloud Sync Task`, but Duplicati already handles offsite backups.
@@ -200,12 +200,12 @@ 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:
![Dataset layout in TrueNAS](img/truenas-datasets-layout.png)
![Dataset layout in TrueNAS](images/truenas-datasets-layout.png)
### 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:
![Captures d'écran de l'application Nasdeck](img/nasdeck-android-app.png)
![Screenshots of Nasdeck application](images/nasdeck-android-app.png)
---
## Conclusion