Lazy Samba Bash Skript pro Linux: Jednoduché a spolehlivé řešení připojování vzdálených složek

Pokud pravidelně pracujete s NAS úložišti nebo jinými vzdálenými servery, pravděpodobně jste narazili na problém s připojováním a odpojováním vzdálených složek. Tradičně se v Linuxu využívá souboru fstab pro trvalé připojení sdílených složek, například přes protokol SAMBA. Bohužel, tento způsob má jednu zásadní nevýhodu – pokud se vzdálené připojení přeruší, systém může "zamrznout", zejména pokud aplikace závisí na těchto souborových systémech. To vede k frustraci uživatelů, kdy jsou nuceni čekat, než se spojení obnoví, nebo než systém přestane pokusy o znovupřipojení.

Jak to řeší Lazy Samba Bash skript?

Tento Bash skript pro Linux, který jsem nazval Lazy Samba, je jednoduché a efektivní řešení pro připojování a odpojování vzdálených SAMBA složek. Skript je navržen tak, aby kontroloval přístupnost cílové IP adresy a podle toho rozhodoval, zda připojit, nebo odpojit vzdálenou složku. Hlavní výhodou je, že tímto způsobem nedochází k zamrzání systému, pokud dojde k selhání připojení.

Proč nepoužívat fstab?

Použití fstab pro připojení SAMBA sdílených složek je běžným řešením, ale má své úskalí. Jakmile se vzdálené připojení přeruší, nástroj CIFS (Common Internet File System), který zajišťuje SAMBA spojení, se může zaseknout ve snaze obnovit připojení. To způsobuje, že grafické aplikace, které závisí na těchto souborových systémech, se stávají neodpovídajícími. Uživatelé jsou nuceni čekat, dokud se CIFS buď připojí, nebo dokud systém "přestane čekat". Tento problém může být obzvlášť frustrující, pokud k tomu dochází často.

Výhody použití skriptu

Lazy Samba Bash skript tento problém efektivně řeší. Neustále monitoruje, zda je cílová IP adresa dostupná, a pokud ne, skript vzdálenou složku automaticky odpojí. Jakmile je IP opět dostupná, složka se automaticky znovu připojí. Díky tomu se zabrání problémům se zasekáváním aplikací a systém zůstává plynulý a spolehlivý.

Ukázka skriptu

Zde je kód samotného skriptu:

#!/bin/bash
# Tomas Mark 2024 (tomas@digitalspace.name)

log() {
    if [ "$DEBUG" ]; then
        echo "-> $1"
    fi
}

umount_samba() {
    sudo umount -f -l "$MOUNT_POINT" >/dev/null 2>&1 

    if [ $? -eq 0 ]; then
        log "Samba share was successfully unmounted from $MOUNT_POINT."
    else
        log "Samba share was already unmounted from $MOUNT_POINT."
    fi
}

mount_samba() {
    CREDENTIAL_FILE=$1
    SAMBA_SHARE=$2
    TARGET_IP=$3
    MOUNT_POINT=$4
    DEBUG=$5
    LOCK_FILE="/tmp/mount_samba.lock"

    if [ -f "$LOCK_FILE" ]; then
        log "Skript je již spuštěn nebo nebyl korektně ukončen."
        exit 1
    else
        touch "$LOCK_FILE"
    fi

    if ping -c 1 -W 1 "$TARGET_IP" >/dev/null; then
        log "The destination IP $TARGET_IP is accessible, connecting to Samba share..."

        if mountpoint -q "$MOUNT_POINT"; then
            log "Samba share $SAMBA_SHARE already connected to $MOUNT_POINT."
        else
            sudo mount -t cifs -o noatime,guest,_netdev,vers=3.0,noauto,credentials=$CREDENTIAL_FILE,uid=1000,gid=1000,iocharset=utf8,sec=ntlmssp,nofail,soft,noperm "$SAMBA_SHARE" "$MOUNT_POINT"

            if [ $? -eq 0 ]; then
                log "Samba share $SAMBA_SHARE was successfully connected to $MOUNT_POINT."
            else
                log "Samba share $SAMBA_SHARE was unsuccessfully connected to $MOUNT_POINT. (Failed)"
            fi
        fi
    else
        log "The destination IP $TARGET_IP is not accessible."
        sudo umount -f -l "$MOUNT_POINT"
    fi

    rm -f "$LOCK_FILE"
}

echo ""
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "Script started at $timestamp"

mount_samba "/root/credential2nas" "//192.168.79.11/homes" "192.168.79.11" "/mnt/nas/" 1
mount_samba "/root/credential2nas" "//192.168.79.11/music" "192.168.79.11" "/mnt/nas/music" 1
mount_samba "/root/credential2nas" "//192.168.79.11/video" "192.168.79.11" "/mnt/nas/video" 1
mount_samba "/root/credential2nas" "//192.168.79.11/NetBackup" "192.168.79.11" "/mnt/nas/NetBackup" 1
mount_samba "/root/credential2pc" "//192.168.79.111/c" "192.168.79.111" "/mnt/pc/c" 1
mount_samba "/root/credential2pc" "//192.168.79.111/f" "192.168.79.111" "/mnt/pc/f" 1

Osobní zkušenost

Tento skript používám již asi půl roku a mohu potvrdit jeho spolehlivost na svém pracovním zařízení. Umožňuje plynulé připojování a odpojování vzdálených složek bez zamrzání systému a odstraňuje problémy, které často doprovázejí připojování pomocí fstab.

Pokud tedy pracujete se SAMBA sdílenými složkami a hledáte spolehlivý způsob, jak se vyhnout zamrzání systému při ztrátě spojení, Lazy Samba Bash skript je jednoduchým, ale velmi účinným řešením.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *