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 —