Инструменты пользователя

Инструменты сайта


projects:linux:manual_backup_scripts:mount_nas

Это старая версия документа!


Подключение сетевого ресурса

mount_nas.sh
#!/bin/bash
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
# ==DIS/AUTOEXEC==
# === Nas Mount ===
# 02_mount_nas.sh 🛧 Монтирование сетевого ресурса (Windows SMB)
# Скрипт подключает расшаренную папку по SMB в каталог /mnt/backup_nas
#
 
set -euo pipefail
 
# === ░░ БЛОК: ФАЙЛ КОНФИГУРАЦИИ ░░ ===
CONFIG_FILE="$(dirname "$0")/nas_mount.conf"
 
if [[ ! -f "$CONFIG_FILE" ]]; then
  cat > "$CONFIG_FILE" <<EOF
# IP-адрес NAS (в кавычках, например: "192.168.1.100")
NAS_IP="<IP-ADDRESS>"
 
# Имя расшаренной папки (например: "PiBackup")
SHARE_NAME="PiBackup"
 
# Имя пользователя (в кавычках — обязательно, особенно если есть пробелы)
NAS_USER="<USERNAME>"
 
# Пароль (в кавычках — ОБЯЗАТЕЛЬНО, если есть пробелы или спецсимволы)
NAS_PASS="<PASSWORD>"
EOF
 
  echo "⚠️ Создан конфигурационный файл по умолчанию: $CONFIG_FILE"
  echo "✏️  Пожалуйста, отредактируй его или выбери пункт меню 2."
  echo "⚠️ Значения всегда должны быть в кавычках, особенно если в пароле есть !, $, # или пробелы."
fi
# === ░░ КОНЕЦ БЛОКА: ФАЙЛ КОНФИГУРАЦИИ ░░ ===
 
# === ░░ БЛОК: МЕНЮ ПОЛЬЗОВАТЕЛЯ ░░ ===
while true; do
  echo ""
  echo "🛠️ Меню NAS-подключения"
  echo "1 - 🔗 Подключить сетевой диск (по конфигурации)"
  echo "2 - ✏️ Редактировать конфигурацию"
  echo "3 - 🧹 Удалить файл конфигурации"
  echo "4 - 🔓 Разовое подключение (без сохранения)"
  echo "0 - ❌ Выход"
  read -rp "👉 Ваш выбор: " opt
  echo ""
 
  case "$opt" in
    0)
      echo "🚪 Выход."
      exit 0
      ;;
 
    1)
      if [[ ! -f "$CONFIG_FILE" ]]; then
        echo "❌ Файл конфигурации не найден. Сначала создайте его."
        continue
      fi
      # shellcheck disable=SC1090
      source "$CONFIG_FILE"
      if [[ "$NAS_IP" == "<IP-ADDRESS>" || "$NAS_USER" == "<USERNAME>" || "$NAS_PASS" == "<PASSWORD>" ]]; then
        echo "❌ Конфигурация не заполнена. Пожалуйста, отредактируйте $CONFIG_FILE."
        continue
      fi
      ;&
 
    4)
      if [[ "$opt" == 4 ]]; then
        echo "🔓 Разовое подключение без сохранения конфигурации"
        read -rp "🌐 IP NAS-сервера: " NAS_IP
        read -rp "📂 Имя расшаренной папки: " SHARE_NAME
        read -rp "👤 Имя пользователя: " NAS_USER
        read -rsp "🔑 Пароль: " NAS_PASS
        echo ""
      fi
 
      # === ░░ БЛОК: ПОДКЛЮЧЕНИЕ NAS ░░ ===
      MOUNT_POINT="/mnt/backup_nas"
      echo "📁 Проверка каталога: $MOUNT_POINT"
      sudo mkdir -p "$MOUNT_POINT"
 
      echo "🌐 Проверка ресурса //$NAS_IP/$SHARE_NAME..."
      if ! ping -c 1 -W 1 "$NAS_IP" &>/dev/null; then
        echo "❌ Хост $NAS_IP недоступен по сети."
        continue
      fi
 
      if mountpoint -q "$MOUNT_POINT"; then
        CURRENT_SOURCE=$(findmnt -n -o SOURCE --target "$MOUNT_POINT")
        EXPECTED_SOURCE="//$NAS_IP/$SHARE_NAME"
 
        if [[ "$CURRENT_SOURCE" == "$EXPECTED_SOURCE" ]]; then
          echo "✅ Ресурс уже примонтирован: $EXPECTED_SOURCE$MOUNT_POINT"
          echo "ℹ️ Повторное монтирование не требуется."
          continue
        else
          echo "⚠️ Каталог $MOUNT_POINT уже занят другим ресурсом:"
          echo "  Текущее подключение: $CURRENT_SOURCE"
          echo "  Ожидаемое: $EXPECTED_SOURCE"
          echo ""
          echo "1 - 🔄 Отмонтировать и примонтировать заново"
          echo "2 - 📁 Примонтировать в другой каталог"
          echo "0 - ❌ Отмена"
          read -rp "👉 Ваш выбор: " choice
 
          case "$choice" in
            1)
              echo "🔌 Отмонтирование $MOUNT_POINT..."
              sudo umount "$MOUNT_POINT"
              ;;
            2)
              read -rp "📂 Введите альтернативный каталог (например: /mnt/nas_alt): " alt_mount
              [[ -z "$alt_mount" ]] && echo "❎ Пустой путь. Отмена." && continue
              MOUNT_POINT="$alt_mount"
              sudo mkdir -p "$MOUNT_POINT"
              ;;
            *)
              echo "⏭️  Пропуск монтирования."
              continue
              ;;
          esac
        fi
      fi
 
      echo "🔗 Монтирование ресурса..."
      if sudo mount -t cifs "//$NAS_IP/$SHARE_NAME" "$MOUNT_POINT" \
        -o username="$NAS_USER",password="$NAS_PASS",uid=$(id -u),gid=$(id -g),iocharset=utf8; then
        echo "✅ Успешно примонтировано в $MOUNT_POINT"
      else
        echo "❌ Ошибка монтирования."
      fi
      # === ░░ КОНЕЦ БЛОКА: ПОДКЛЮЧЕНИЕ NAS ░░ ===
      ;;
 
    2)
      echo "📝 Открываю конфигурацию в nano..."
      nano "$CONFIG_FILE"
      ;;
 
    3)
      echo "⚠️ Удалить конфигурационный файл $CONFIG_FILE? (y/N)"
      read -r confirm
      if [[ "$confirm" =~ ^[Yy]$ ]]; then
        rm -f "$CONFIG_FILE"
        echo "🗑️ Удалено."
      else
        echo "❎ Отмена удаления."
      fi
      ;;
 
    *)
      echo "❗ Неверный выбор."
      ;;
  esac
 
done
# === ░░ КОНЕЦ БЛОКА: МЕНЮ ПОЛЬЗОВАТЕЛЯ ░░ ===
projects/linux/manual_backup_scripts/mount_nas.1744011075.txt.gz · Последнее изменение: 2025/04/07 10:31 —

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 4.0 International
CC Attribution 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki