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

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


projects:linux:manual_backup_scripts:mount_nas

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

Входит в набор rPi Seal

Монтирование сетевого ресурса.
Можно подключить единоразово без сохранения конфигурации или прописать конфигурацию чтобы в будущем не вводить вручную.
Файл конфигурации (представлен ниже) создается автоматически при запуске скрипта.

# IP-адрес NAS (в кавычках, например: "192.168.1.100")
NAS_IP="<IP-ADDRESS>"
 
# Имя расшаренной папки (например: "PiBackup")
SHARE_NAME="PiBackup"
 
# Имя пользователя (в кавычках — обязательно, особенно если есть пробелы)
NAS_USER="<USERNAME>"
 
# Пароль (в кавычках — ОБЯЗАТЕЛЬНО, если есть пробелы или спецсимволы)
NAS_PASS="<PASSWORD>"
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
 
# Проверка наличия утилиты mount.cifs
if ! command -v mount.cifs >/dev/null 2>&1; then
  echo "❌ Не установлена утилита mount.cifs (пакет cifs-utils)."
  echo "📦 Установите её с помощью: sudo apt install cifs-utils"
  exit 1
fi
 
# === ░░ БЛОК: ФАЙЛ КОНФИГУРАЦИИ ░░ ===
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
# === ░░ КОНЕЦ БЛОКА: ФАЙЛ КОНФИГУРАЦИИ ░░ ===
 
# === ░░ ФУНКЦИЯ МОНТИРОВАНИЯ NAS ░░ ===
mount_nas() {
  local 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 недоступен по сети."
    return
  fi
 
  if mountpoint -q "$mount_point"; then
    local current_source expected_source
    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 "ℹ️ Повторное монтирование не требуется."
      return
    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 "❎ Пустой путь. Отмена." && return
          mount_point="$alt_mount"
          sudo mkdir -p "$mount_point"
          ;;
        *)
          echo "⏭️  Пропуск монтирования."
          return
          ;;
      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),vers=3.0,iocharset=utf8; then
    echo "✅ Успешно примонтировано в $mount_point"
  else
    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
      mount_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
      ;;
 
    4)
      echo "🔓 Разовое подключение без сохранения конфигурации"
      read -rp "🌐 IP NAS-сервера: " NAS_IP
      read -rp "📂 Имя расшаренной папки: " SHARE_NAME
      read -rp "👤 Имя пользователя: " NAS_USER
      read -rsp "🔑 Пароль: " NAS_PASS
      echo ""
      mount_nas
      ;;
 
    *)
      echo "❗ Неверный выбор."
      ;;
  esac
 
done
# === ░░ КОНЕЦ БЛОКА: МЕНЮ ПОЛЬЗОВАТЕЛЯ ░░ ===

*******

projects/linux/manual_backup_scripts/mount_nas.txt · Последнее изменение: 2025/04/11 17:40 —

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