OMV7 Equivalent à Synology FileStation sur OpenMediaVault ?

Informatix

Nouveau membre
5 Février 2025
8
4
3
Bonjour à tous,

Après plusieurs années sur Synology, j'ai décidé de prendre un NAS dédié à la bidouille et à mes fichiers multimédias.
J'ai fait le choix de partir sur un NAS DIY (Aoostar WTR Pro N100) avec OpenMediavault comme OS.

J'ai 1 SSD NVME qui me sert de disque OS, 1 SSD NVME pour mes applications Docker et 4 HDD pour stocker les fichiers (2x3 To et 2x6To).
J'ai fait le choix de partir sur OpenMediaVault, car il proposait une alternative gratuite et open source à Unraid et sa gestion des groupes de stockage (à savoir pas besoin d'avoir des disques de capacités identiques). J'ai donc regroupé 2x3To + 1x6To avec MergerFS et utilise 1x6To comme disque de parité avec SnapRaid.

À date, je suis plutôt satisfait de OpenMediaVault (même si je me suis tiré les cheveux à comprendre comment fonctionnaient les permissions) et j'accède à mes dossiers en SMB depuis Windows.
Cependant, il y a 1-2 fonctionnalité qui me manque beaucoup et je ne parviens pas à trouver de solutions : un équivalent de Synology FileStation.

Mon besoin est le suivant : je cherche un explorateur de fichiers qui puissent (par ordre de priorité) :
  • voir l'ensemble de mes dossiers partagés
  • monter / afficher les clés USB que je branche sur la machine
  • pouvoir gérer mes fichiers directement depuis une interface web (copier, déplacer, renommer, etc.)
  • monter des dossiers en réseau
Pourquoi ce besoin ? Dans Synology FileStation, lorsque je branche une clé USB, la clé USB apparait dans l'explorateur de fichier en quelques secondes. Je peux alors copier des fichiers qui depuis ou vers le NAS directement depuis l'interface web sans mobiliser un Windows qui ferait ça en SMB. Idem pour les dossiers en réseau, FileStation peut monter les dossiers SMB et NFS directement dans son interface.

Finalement, en plus des fonctionnalités classiques d'un NAS (gestion des RAID, backups, etc.), le Synology fonctionne comme un petit PC qui peut accomplir des actions sur fichier de façon autonome. C'est ce besoin que je ne parviens pas à reproduire avec OpenMediaVault.

Dans les plugins de OMV, il y a "Filebrowser", mais une fois installé, il ne peut utiliser comme dossier racine que 1 seul dossier partagé. Impossible de lui donner le chemin de montage du groupe MergerFS. J'ai contourné ce problème en déployant "Filebrowser" avec Docker qui permet de monter les chemins d'accès des disques.

Cependant, à part monter manuellement chaque clé USB à la main dans l'interface de OMV, je ne vois pas comment faire fonctionner Filebrowser à l'identique de FileStation. J'ai l'impression que c'est plus une limitation de OMV que de Filebrowser. Idem pour les dossiers en réseau pour lesquels il existe un plugin.

Avez-vous connaissance de quelqu'un ayant déjà réussi à mettre en place ce que j'essaie d'accomplir ?
Sinon j'envisage d'essayer ZimaOS qui dispose d'un explorateur de fichier qui me semble très similaire à FileStation / mon besoin, qui monte les clés USB en automatique et peut aussi monter les dossiers en réseau. ZimaOS ne permet pas de gérer MergerFS et SnapRaid depuis l'interface GUI, mais je peux essayer de le configurer en CLI car je comprends que derrière ZimaOS, c'est du Debian.

C'est un long message, j'espère que je ne vous ai pas perdu.
Merci par avance pour votre aide !
 
Dernière édition:
Bonjour à tous,
Je me réponds à moi même.

Pour le moment, j'ai écarté l'option Zima OS, car je souhaite absolument utiliser MergerFS + SnapRAID.
Après avoir demandé sur les forums de Zima, Zima OS ne prévoit pas du supporter MergerFS et SnapRAID et je suis plus à l'aise à paramétrer ces derniers depuis l'interface web de OMV que en CLI depuis Zima OS.

Concernant le montage automatique des clés USB sur OMV : pour avoir demandé sur Github le lead dev est ouvertement contre et n'envisage pas d'ajouter cette fonctionnalité.
J'ai fini par trouver une solution de mon côté avec l'aide de ChatGPT et Mistral que je dévoile ci-dessous. Aucun des deux LLM ne m'a proposé une solution qui fonctionnait du premier coup. Mais sans savoir coder j'arrive à peu près à suivre la logique du code qui m'est proposé et j'ai pu identifier les points de blocage afin de leur demander des solutions ciblées sur ces points de blocages (après de nombreux A/R).

Je partage ma solution actuelle si jamais quelqu'un avait un besoin similaire à l'avenir.
Prochaine étape, automatiser le démontage : à suivre

*****

I. Création d'un script de montage automatique des périphériques de stockage USB lors d'un branchement à l'endroit /media/usbdevices/
Bash:
sudo nano /usr/local/bin/mount_usb.sh
Bash:
#!/bin/bash

# Define full paths for commands to work properly with udev
BLKID="/usr/sbin/blkid"
MOUNT="/bin/mount"
MKDIR="/bin/mkdir"
LOG_FILE="/var/log/usb_mount.log"

# Directory where USB devices will be mounted
MOUNT_DIR="/media/usbdevices"

# Create the mount directory if it doesn't exist
$MKDIR -p "$MOUNT_DIR"

# Function to log messages
log_message() {
    echo "$(date): $1" >> "$LOG_FILE"
}

# Function to mount USB devices
mount_usb() {
    DEVNAME=$1
    log_message "Attempting to mount $DEVNAME"
    LABEL=$($BLKID -o value -s LABEL "$DEVNAME")
    if [ -z "$LABEL" ]; then
        LABEL=$($BLKID -o value -s UUID "$DEVNAME")
    fi
    MOUNT_POINT="$MOUNT_DIR/$LABEL"
    $MKDIR -p "$MOUNT_POINT"
    /usr/bin/systemd-mount --no-block --options=rw "$DEVNAME" "$MOUNT_POINT"
    if [ $? -eq 0 ]; then
        log_message "Successfully mounted $DEVNAME at $MOUNT_POINT"
    else
        log_message "Failed to mount $DEVNAME"
    fi
}

# Check if DEVNAME is passed as an argument
if [ -z "$1" ]; then
    log_message "Error: No device name provided"
    exit 1
fi

mount_usb "$1"

II. Rendre le script executable
Bash:
sudo chmod +x /usr/local/bin/mount_usb.sh

III. Création d'une règle udev qui appelle le script au branchement d'une clé USB
Bash:
sudo nano /etc/udev/rules.d/99-usb-mount.rules
YAML:
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z][0-9]", RUN+="/bin/bash -c 'sleep 2; /usr/local/bin/mount_usb.sh \"/dev/%k\" &'"

IV. Charger les règles udev
Bash:
sudo udevadm control --reload-rules

*****

Désormais, à chaque branchement d'une clé USB, cette dernière sera montée automatique dans /media/usbdevices/XXX où XXX correspond au nom de la clé USB ("LABEL")
 
Dernière édition:
  • J'aime
Réactions: morgyann et EVO
Bonjour à tous,

Voici la suite de ma configuration qui sert (i) à démonter la clé USB lorsque je la débranche manuellement et (ii) supprimer le dossier de montage.
Idéalement, j'aimerais pouvoir lancer le démontage de la clé avant de la débrancher, soit en CLI, soit en créant un plugin qui s'ajoute à l'interface web de OMV.
La deuxième option est la plus conviviale selon moi, mais en dehors de mes compétences. Peut-être que Mistral et ChatGPT m'aideront à nouveau (à suivre).

*****

I. Création d'un script de démontage automatique des périphériques de stockage USB
Bash:
sudo nano /usr/local/bin/unmount_usb.sh
Bash:
#!/bin/bash

LOG_FILE="/var/log/usb_mount.log"

# Function to log messages
log_message() {
    echo "$(date): $1" >> "$LOG_FILE"
}

# Function to unmount USB devices
unmount_usb() {
    DEVNAME=$1
    log_message "Attempting to unmount $DEVNAME"

    # Get the mount point using `findmnt`
    MOUNT_POINT=$(findmnt -n -o TARGET --source "$DEVNAME")

    if [ -n "$MOUNT_POINT" ]; then
        systemd-umount "$MOUNT_POINT"
        sleep 2  # Give time for unmount to complete

        # Check if the directory is empty, then remove it
        if [ -d "$MOUNT_POINT" ]; then
            rm -rf "$MOUNT_POINT"
            log_message "Successfully unmounted and removed $MOUNT_POINT"
        else
            log_message "Unmounted $DEVNAME, but $MOUNT_POINT was already removed"
        fi
    else
        log_message "No mount point found for $DEVNAME"
    fi
}

unmount_usb "$1"

II. Rendre le script executable
Bash:
sudo chmod +x /usr/local/bin/unmount_usb.sh

III. Modification de la règle udev précédemment créée pour appeller le script de démontage lors du débranchement manuelle de la clé USB
YAML:
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z][0-9]", ENV{ID_BUS}=="usb", RUN+="/bin/bash -c 'sleep 2; /usr/local/bin/mount_usb.sh \"/dev/%k\" &'"
ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd[a-z][0-9]", ENV{ID_BUS}=="usb", RUN+="/bin/bash -c '/usr/local/bin/unmount_usb.sh \"/dev/%k\" &'"

IV. Charger les règles udev pour tenir compte du nouvel ajout
Bash:
sudo udevadm control --reload-rules

*****

Désormais, lorsque je branche une clé usb du nom de TEST, elle se monte automatiquement dans un dossier /media/usbdevices/TEST.
Lorsque je la débranche, OMV démonte automatiquement le point de montage /media/usbdevices/TEST et supprime le dossier "TEST".

Pour avoir accès à la clé USB dans une interface similaire à Filestation, j'utilise FileBrowser en docker en montant le chemin d'accès de la clé USB :
YAML:
---
services:
  filebrowser:
    image: hurlenko/filebrowser
    container_name: 02_filebrowser
    environment:
      - FB_BASEURL=/filebrowser
      - PUID=1000
      - PGID=100
    ports:
      - 8080:8080
    volumes:
      - /srv/dev-disk-by-uuid-XXX/docker/filebrowser/config:/config
      - /srv/mergerfs/mergerfs_pool1:/data/01. MergerFS
      - /srv/remotemount:/data/02. Remote mount
      - /:/data/03. System
    restart: unless-stopped
 
Dernière édition par un modérateur:
Bonjour à tous,

Je viens apporter une modification dans la règle udev car je me suis aperçu que la précédente version n'excluait pas les disques sata.
Après un redémarrage, la précédente règle udev montait mes 4 disques sata à l'endroit prévu par la règle et cassait mon pool MergerFS.

Voici la nouvelle règle avec la modification :
YAML:
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z][0-9]", ENV{ID_BUS}=="usb", RUN+="/bin/bash -c 'sleep 2; /usr/local/bin/mount_usb.sh \"/dev/%k\" &'"
ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd[a-z][0-9]", ENV{ID_BUS}=="usb", RUN+="/bin/bash -c '/usr/local/bin/unmount_usb.sh \"/dev/%k\" &'"

Cette modification consiste à ajouter ENV{ID_BUS}=="usb" pour n'inclure que les périphériques USB. Les périphériques sata retournent in ID_BUS=ata et sont exclu de fait.

(Je ne peux plus éditer les messages précédents pour y apporter la correction directement)
 
Merci beaucoup !

C'est une bonne idée que de le poster dans la section tuto. Je vais tester mes scripts un peu plus longtemps pour m'assurer que ça fonctionne comme souhaité avant d'en faire un tuto et éviter de casser les machines de tout le monde :D
 
  • J'aime
Réactions: EVO