mirror of
https://github.com/acedanger/shell.git
synced 2025-12-05 20:40:11 -08:00
feat: Add NAS mount check and setup script for improved backup reliability
This commit is contained in:
@@ -125,7 +125,7 @@ declare -A MEDIA_SERVICES=(
|
||||
["tautulli"]="/config/backups"
|
||||
["sabnzbd"]="/config/sabnzbd.ini"
|
||||
["jellyseerr_db"]="/config/db/"
|
||||
["jellyseerr_settings"]="/config/settings.json"
|
||||
["jellyseerr_settings"]="/data/settings.json"
|
||||
)
|
||||
|
||||
# Service-specific backup destinations
|
||||
@@ -181,6 +181,28 @@ log_info() {
|
||||
echo "[${timestamp}] INFO: $message" >> "${LOG_FILE}" 2>/dev/null || true
|
||||
}
|
||||
|
||||
# Check if NAS mount is accessible
|
||||
check_nas_mount() {
|
||||
local mount_point="/mnt/share/media"
|
||||
|
||||
if ! mountpoint -q "$mount_point"; then
|
||||
log_error "NAS not mounted at $mount_point"
|
||||
log_info "Please mount the NAS first with: sudo mount $mount_point"
|
||||
log_info "Or check the mounting setup guide in docs/nas-mount-setup-guide.md"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Test write access to backup directory
|
||||
if [ ! -w "$BACKUP_ROOT" ]; then
|
||||
log_error "No write access to backup directory: $BACKUP_ROOT"
|
||||
log_info "Check NAS mount permissions and credentials"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_success "NAS mount check passed: $mount_point is accessible"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Performance tracking functions
|
||||
track_performance() {
|
||||
if [ "$PERFORMANCE_MONITORING" != true ]; then
|
||||
@@ -689,6 +711,14 @@ main() {
|
||||
fi
|
||||
|
||||
# Pre-flight checks
|
||||
if ! check_nas_mount; then
|
||||
if [[ "$METRICS_ENABLED" == "true" ]]; then
|
||||
metrics_backup_complete "failed" "NAS mount not accessible"
|
||||
fi
|
||||
send_notification "Media Backup Failed" "NAS mount not accessible at $MOUNT_POINT" "error" 0 1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! check_disk_space; then
|
||||
if [[ "$METRICS_ENABLED" == "true" ]]; then
|
||||
metrics_backup_complete "failed" "Insufficient disk space"
|
||||
@@ -707,6 +737,15 @@ main() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if NAS mount is accessible
|
||||
if ! check_nas_mount; then
|
||||
if [[ "$METRICS_ENABLED" == "true" ]]; then
|
||||
metrics_backup_complete "failed" "NAS mount not accessible"
|
||||
fi
|
||||
send_notification "Media Backup Failed" "NAS mount not accessible" "error" 0 1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local success_count=0
|
||||
local failed_count=0
|
||||
local backup_results=()
|
||||
|
||||
161
docs/nas-mount-setup-guide.md
Normal file
161
docs/nas-mount-setup-guide.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# NAS Mount Setup Guide for Fedora 42
|
||||
|
||||
## Quick Setup Instructions
|
||||
|
||||
Your NAS IP: `192.168.68.51`
|
||||
Mount Point: `/mnt/share/media`
|
||||
|
||||
### Prerequisites (Already Installed)
|
||||
- `cifs-utils` - for SMB/CIFS mounting
|
||||
- `nfs-utils` - for NFS mounting
|
||||
|
||||
### Option 1: Automated Setup (Recommended)
|
||||
|
||||
Run the interactive setup script:
|
||||
```bash
|
||||
./setup-nas-mount.sh
|
||||
```
|
||||
|
||||
This script will:
|
||||
- Test both SMB and NFS connectivity
|
||||
- Guide you through the setup process
|
||||
- Create persistent mount configuration
|
||||
- Set up systemd mount units for reliable boot mounting
|
||||
|
||||
### Option 2: Manual SMB/CIFS Setup
|
||||
|
||||
1. **Test SMB shares first:**
|
||||
```bash
|
||||
# List available shares (you'll need NAS credentials)
|
||||
smbclient -L 192.168.68.51 -U your_username
|
||||
```
|
||||
|
||||
2. **Create credentials file (if using authentication):**
|
||||
```bash
|
||||
sudo tee /etc/nas-credentials << EOF
|
||||
username=your_nas_username
|
||||
password=your_nas_password
|
||||
domain=WORKGROUP
|
||||
EOF
|
||||
sudo chmod 600 /etc/nas-credentials
|
||||
```
|
||||
|
||||
3. **Test mount:**
|
||||
```bash
|
||||
# With credentials
|
||||
sudo mount -t cifs //192.168.68.51/share_name /mnt/share/media -o credentials=/etc/nas-credentials,uid=$(id -u),gid=$(id -g),iocharset=utf8
|
||||
|
||||
# Or for guest access
|
||||
sudo mount -t cifs //192.168.68.51/share_name /mnt/share/media -o guest,uid=$(id -u),gid=$(id -g),iocharset=utf8
|
||||
```
|
||||
|
||||
4. **Add to /etc/fstab for persistence:**
|
||||
```bash
|
||||
# Backup fstab first
|
||||
sudo cp /etc/fstab /etc/fstab.backup
|
||||
|
||||
# Add entry (with credentials)
|
||||
echo "//192.168.68.51/share_name /mnt/share/media cifs credentials=/etc/nas-credentials,uid=$(id -u),gid=$(id -g),iocharset=utf8,noauto,user 0 0" | sudo tee -a /etc/fstab
|
||||
|
||||
# Or for guest access
|
||||
echo "//192.168.68.51/share_name /mnt/share/media cifs guest,uid=$(id -u),gid=$(id -g),iocharset=utf8,noauto,user 0 0" | sudo tee -a /etc/fstab
|
||||
```
|
||||
|
||||
### Option 3: Manual NFS Setup
|
||||
|
||||
1. **Check available NFS exports:**
|
||||
```bash
|
||||
showmount -e 192.168.68.51
|
||||
```
|
||||
|
||||
2. **Test mount:**
|
||||
```bash
|
||||
sudo mount -t nfs 192.168.68.51:/path/to/export /mnt/share/media -o rw,hard,intr
|
||||
```
|
||||
|
||||
3. **Add to /etc/fstab:**
|
||||
```bash
|
||||
echo "192.168.68.51:/path/to/export /mnt/share/media nfs rw,hard,intr,rsize=8192,wsize=8192,timeo=14,noauto,user 0 0" | sudo tee -a /etc/fstab
|
||||
```
|
||||
|
||||
### Systemd Mount Unit (For Reliable Boot Mounting)
|
||||
|
||||
Create `/etc/systemd/system/mnt-share-media.mount`:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Mount NAS Media Share
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Mount]
|
||||
What=//192.168.68.51/share_name
|
||||
Where=/mnt/share/media
|
||||
Type=cifs
|
||||
Options=credentials=/etc/nas-credentials,uid=1000,gid=1000,iocharset=utf8
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Enable it:
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable mnt-share-media.mount
|
||||
sudo systemctl start mnt-share-media.mount
|
||||
```
|
||||
|
||||
### Common Commands
|
||||
|
||||
- **Mount manually:** `sudo mount /mnt/share/media`
|
||||
- **Unmount:** `sudo umount /mnt/share/media`
|
||||
- **Check mount status:** `df -h /mnt/share/media`
|
||||
- **Test systemd mount:** `sudo systemctl start mnt-share-media.mount`
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
1. **Check connectivity:**
|
||||
```bash
|
||||
ping 192.168.68.51
|
||||
```
|
||||
|
||||
2. **Test SMB connection:**
|
||||
```bash
|
||||
nc -zv 192.168.68.51 445
|
||||
```
|
||||
|
||||
3. **Test NFS connection:**
|
||||
```bash
|
||||
nc -zv 192.168.68.51 2049
|
||||
```
|
||||
|
||||
4. **Check mount logs:**
|
||||
```bash
|
||||
journalctl -u mnt-share-media.mount
|
||||
```
|
||||
|
||||
5. **Verify fstab syntax:**
|
||||
```bash
|
||||
sudo mount -a
|
||||
```
|
||||
|
||||
### Security Notes
|
||||
|
||||
- Credentials file should have 600 permissions (readable only by root)
|
||||
- Consider using NFS over SMB for better performance on Linux
|
||||
- Use `noauto` in fstab to prevent boot delays if NAS is unavailable
|
||||
- The `user` option allows regular users to mount/unmount
|
||||
|
||||
### Integration with Your Backup Scripts
|
||||
|
||||
Your `backup-media.sh` script already references `/mnt/share/media/backups`, so once the NAS is mounted, your backups will automatically work with the NAS storage.
|
||||
|
||||
Make sure your backup script has proper error handling for when the NAS is not mounted:
|
||||
|
||||
```bash
|
||||
# Add this check to your backup scripts
|
||||
if ! mountpoint -q /mnt/share/media; then
|
||||
log_error "NAS not mounted at /mnt/share/media"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
446
setup-nas-mount.sh
Executable file
446
setup-nas-mount.sh
Executable file
@@ -0,0 +1,446 @@
|
||||
#!/bin/bash
|
||||
|
||||
# NAS Mount Setup Script for Fedora 42
|
||||
# This script helps set up persistent mounting of your NAS at 192.168.68.51
|
||||
|
||||
set -e
|
||||
|
||||
# Color codes for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
NAS_IP="192.168.68.51"
|
||||
MOUNT_POINT="/mnt/share/media"
|
||||
CREDENTIALS_FILE="/etc/nas-credentials"
|
||||
FSTAB_BACKUP="/etc/fstab.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
# Logging functions
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if running as root
|
||||
check_root() {
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
log_error "This script should not be run as root. Please run as a regular user."
|
||||
log_info "The script will use sudo when needed."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Check prerequisites
|
||||
check_prerequisites() {
|
||||
log_info "Checking prerequisites..."
|
||||
|
||||
# Check if required packages are installed
|
||||
if ! rpm -q cifs-utils >/dev/null 2>&1; then
|
||||
log_error "cifs-utils package is not installed"
|
||||
log_info "Install it with: sudo dnf install cifs-utils"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! rpm -q nfs-utils >/dev/null 2>&1; then
|
||||
log_error "nfs-utils package is not installed"
|
||||
log_info "Install it with: sudo dnf install nfs-utils"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check network connectivity
|
||||
if ! ping -c 1 "$NAS_IP" >/dev/null 2>&1; then
|
||||
log_error "Cannot reach NAS at $NAS_IP"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "All prerequisites met"
|
||||
}
|
||||
|
||||
# Test SMB shares
|
||||
test_smb_shares() {
|
||||
log_info "Testing SMB shares on $NAS_IP..."
|
||||
|
||||
# First try to get shares without credentials (guest access)
|
||||
log_info "Trying guest access first..."
|
||||
if smbclient -L "$NAS_IP" -N 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_info "Guest access failed. Authentication required."
|
||||
echo "Please enter your NAS username:"
|
||||
read -r username
|
||||
|
||||
if [[ -n "$username" ]]; then
|
||||
echo "Enter password for $username:"
|
||||
read -rs password
|
||||
echo ""
|
||||
|
||||
log_info "Listing SMB shares with authentication..."
|
||||
if smbclient -L "$NAS_IP" -U "$username%$password" 2>/dev/null; then
|
||||
# Store credentials for later use
|
||||
SMB_USERNAME="$username"
|
||||
SMB_PASSWORD="$password"
|
||||
return 0
|
||||
else
|
||||
log_warning "Authentication failed or no shares found"
|
||||
log_info "Please check your username and password"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_error "Username is required for this NAS"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Test NFS exports
|
||||
test_nfs_exports() {
|
||||
log_info "Testing NFS exports on $NAS_IP..."
|
||||
|
||||
local exports
|
||||
exports=$(showmount -e "$NAS_IP" 2>/dev/null)
|
||||
|
||||
if [[ -n "$exports" ]]; then
|
||||
echo "$exports"
|
||||
return 0
|
||||
else
|
||||
log_warning "No NFS exports found or access denied"
|
||||
log_info "NFS exports are directory paths on the NAS that are shared via NFS protocol"
|
||||
log_info "Common examples: /volume1/media, /mnt/storage, /export/data"
|
||||
log_info "Your NAS appears to use SMB/CIFS instead of NFS"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Setup SMB mount
|
||||
setup_smb_mount() {
|
||||
local share_name="$1"
|
||||
local username="$2"
|
||||
local password="$3"
|
||||
|
||||
log_info "Setting up SMB mount for share: $share_name"
|
||||
|
||||
# Create credentials file if authentication is needed
|
||||
if [[ -n "$username" ]]; then
|
||||
log_info "Creating credentials file at $CREDENTIALS_FILE"
|
||||
sudo tee "$CREDENTIALS_FILE" >/dev/null <<EOF
|
||||
username=$username
|
||||
password=$password
|
||||
domain=WORKGROUP
|
||||
EOF
|
||||
sudo chmod 600 "$CREDENTIALS_FILE"
|
||||
log_success "Credentials file created"
|
||||
|
||||
# Test mount with credentials
|
||||
local mount_options="credentials=$CREDENTIALS_FILE,uid=$(id -u),gid=$(id -g),iocharset=utf8,file_mode=0644,dir_mode=0755"
|
||||
else
|
||||
# Guest access
|
||||
local mount_options="guest,uid=$(id -u),gid=$(id -g),iocharset=utf8,file_mode=0644,dir_mode=0755"
|
||||
fi
|
||||
|
||||
# Test the mount
|
||||
log_info "Testing SMB mount..."
|
||||
if sudo mount -t cifs "//$NAS_IP/$share_name" "$MOUNT_POINT" -o "$mount_options"; then
|
||||
log_success "Test mount successful"
|
||||
sudo umount "$MOUNT_POINT"
|
||||
|
||||
# Add to fstab
|
||||
setup_fstab_entry "cifs" "//$NAS_IP/$share_name" "$mount_options"
|
||||
else
|
||||
log_error "SMB mount test failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Setup NFS mount
|
||||
setup_nfs_mount() {
|
||||
local export_path="$1"
|
||||
|
||||
log_info "Setting up NFS mount for export: $export_path"
|
||||
|
||||
local mount_options="rw,hard,intr,rsize=8192,wsize=8192,timeo=14"
|
||||
|
||||
# Test the mount
|
||||
log_info "Testing NFS mount..."
|
||||
if sudo mount -t nfs "$NAS_IP:$export_path" "$MOUNT_POINT" -o "$mount_options"; then
|
||||
log_success "Test mount successful"
|
||||
sudo umount "$MOUNT_POINT"
|
||||
|
||||
# Add to fstab
|
||||
setup_fstab_entry "nfs" "$NAS_IP:$export_path" "$mount_options"
|
||||
else
|
||||
log_error "NFS mount test failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Setup fstab entry
|
||||
setup_fstab_entry() {
|
||||
local fs_type="$1"
|
||||
local device="$2"
|
||||
local options="$3"
|
||||
|
||||
log_info "Setting up persistent mount in /etc/fstab"
|
||||
|
||||
# Backup fstab
|
||||
sudo cp /etc/fstab "$FSTAB_BACKUP"
|
||||
log_info "Created fstab backup: $FSTAB_BACKUP"
|
||||
|
||||
# Add entry to fstab
|
||||
local fstab_entry="$device $MOUNT_POINT $fs_type $options,noauto,user 0 0"
|
||||
|
||||
# Check if entry already exists
|
||||
if grep -q "$MOUNT_POINT" /etc/fstab; then
|
||||
log_warning "Mount point already exists in fstab. Updating entry..."
|
||||
sudo sed -i "\|$MOUNT_POINT|d" /etc/fstab
|
||||
fi
|
||||
|
||||
echo "$fstab_entry" | sudo tee -a /etc/fstab >/dev/null
|
||||
log_success "Added mount entry to fstab"
|
||||
|
||||
# Create systemd mount unit for better boot integration
|
||||
create_systemd_mount_unit "$fs_type" "$device" "$options"
|
||||
}
|
||||
|
||||
# Create systemd mount unit
|
||||
create_systemd_mount_unit() {
|
||||
local fs_type="$1"
|
||||
local device="$2"
|
||||
local options="$3"
|
||||
|
||||
local unit_name="mnt-share-media.mount"
|
||||
local unit_file="/etc/systemd/system/$unit_name"
|
||||
|
||||
log_info "Creating systemd mount unit: $unit_name"
|
||||
|
||||
sudo tee "$unit_file" >/dev/null <<EOF
|
||||
[Unit]
|
||||
Description=Mount NAS Media Share
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Mount]
|
||||
What=$device
|
||||
Where=$MOUNT_POINT
|
||||
Type=$fs_type
|
||||
Options=$options
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# Enable the mount unit
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable "$unit_name"
|
||||
|
||||
log_success "Systemd mount unit created and enabled"
|
||||
}
|
||||
|
||||
# Interactive setup
|
||||
interactive_setup() {
|
||||
log_info "=== NAS Mount Setup for $NAS_IP ==="
|
||||
echo ""
|
||||
|
||||
echo "Choose your preferred mounting method:"
|
||||
echo "1) SMB/CIFS (recommended for Windows-based NAS)"
|
||||
echo "2) NFS (recommended for Linux-based NAS)"
|
||||
echo "3) Test both and let me choose"
|
||||
echo ""
|
||||
read -rp "Enter your choice (1-3): " choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
log_info "Setting up SMB/CIFS mount..."
|
||||
log_info "SMB shares are folder names shared by your NAS (like 'media', 'backup', 'public')"
|
||||
echo ""
|
||||
if test_smb_shares; then
|
||||
echo ""
|
||||
echo "Available SMB shares are listed above."
|
||||
read -rp "Enter the share name to mount (e.g., 'media' or 'public'): " share_name
|
||||
|
||||
# Use credentials from test_smb_shares if available
|
||||
local username="${SMB_USERNAME:-}"
|
||||
local password="${SMB_PASSWORD:-}"
|
||||
|
||||
# If no credentials from test, ask again
|
||||
if [[ -z "$username" ]]; then
|
||||
read -rp "Enter username (or press Enter for guest): " username
|
||||
if [[ -n "$username" ]]; then
|
||||
echo "Enter password for $username:"
|
||||
read -rs password
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
|
||||
setup_smb_mount "$share_name" "$username" "$password"
|
||||
else
|
||||
log_error "SMB setup failed"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
log_info "Setting up NFS mount..."
|
||||
log_info "NFS (Network File System) exports are directory paths shared by the NAS"
|
||||
log_info "Examples: /volume1/media, /mnt/storage, /export/data"
|
||||
echo ""
|
||||
if test_nfs_exports; then
|
||||
echo ""
|
||||
echo "Available NFS exports are listed above."
|
||||
read -rp "Enter the export path to mount (e.g., /volume1/media): " export_path
|
||||
setup_nfs_mount "$export_path"
|
||||
else
|
||||
log_error "NFS setup failed - no exports available"
|
||||
log_info "Your NAS likely uses SMB/CIFS instead. Try option 1."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
3)
|
||||
log_info "Testing both protocols..."
|
||||
|
||||
smb_available=false
|
||||
nfs_available=false
|
||||
|
||||
if test_smb_shares; then
|
||||
smb_available=true
|
||||
log_success "SMB/CIFS is available"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
if test_nfs_exports; then
|
||||
nfs_available=true
|
||||
log_success "NFS is available"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
if [[ "$smb_available" == true && "$nfs_available" == true ]]; then
|
||||
echo "Both SMB and NFS are available. NFS typically offers better performance for Linux systems."
|
||||
read -rp "Do you want to use NFS? (Y/n): " use_nfs
|
||||
|
||||
if [[ "$use_nfs" =~ ^[Nn]$ ]]; then
|
||||
read -rp "Enter the SMB share name to mount: " share_name
|
||||
read -rp "Enter username (or press Enter for guest): " username
|
||||
|
||||
if [[ -n "$username" ]]; then
|
||||
echo "Enter password for $username:"
|
||||
read -rs password
|
||||
echo ""
|
||||
fi
|
||||
|
||||
setup_smb_mount "$share_name" "$username" "$password"
|
||||
else
|
||||
echo "Available NFS exports are listed above."
|
||||
read -rp "Enter the NFS export path to mount (e.g., /volume1/media): " export_path
|
||||
setup_nfs_mount "$export_path"
|
||||
fi
|
||||
elif [[ "$smb_available" == true ]]; then
|
||||
log_info "Only SMB is available, proceeding with SMB setup..."
|
||||
read -rp "Enter the share name to mount: " share_name
|
||||
read -rp "Enter username (or press Enter for guest): " username
|
||||
|
||||
if [[ -n "$username" ]]; then
|
||||
echo "Enter password for $username:"
|
||||
read -rs password
|
||||
echo ""
|
||||
fi
|
||||
|
||||
setup_smb_mount "$share_name" "$username" "$password"
|
||||
elif [[ "$nfs_available" == true ]]; then
|
||||
log_info "Only NFS is available, proceeding with NFS setup..."
|
||||
echo "Available NFS exports are listed above."
|
||||
read -rp "Enter the NFS export path to mount (e.g., /volume1/media): " export_path
|
||||
setup_nfs_mount "$export_path"
|
||||
else
|
||||
log_error "Neither SMB nor NFS is available on this NAS"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
log_error "Invalid choice"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Test the mount
|
||||
test_mount() {
|
||||
log_info "Testing the mount..."
|
||||
|
||||
if sudo mount "$MOUNT_POINT"; then
|
||||
log_success "Mount successful!"
|
||||
|
||||
# Test write access
|
||||
test_file="$MOUNT_POINT/.test_write_$(date +%s)"
|
||||
if touch "$test_file" 2>/dev/null; then
|
||||
log_success "Write access confirmed"
|
||||
rm -f "$test_file"
|
||||
else
|
||||
log_warning "Mount is read-only or write access denied"
|
||||
fi
|
||||
|
||||
# Show mount info
|
||||
df -h "$MOUNT_POINT"
|
||||
|
||||
echo ""
|
||||
read -rp "Do you want to unmount for now? (Y/n): " unmount_now
|
||||
if [[ ! "$unmount_now" =~ ^[Nn]$ ]]; then
|
||||
sudo umount "$MOUNT_POINT"
|
||||
log_info "Unmounted. Use 'sudo mount $MOUNT_POINT' to mount manually."
|
||||
fi
|
||||
else
|
||||
log_error "Mount failed!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Show usage instructions
|
||||
show_usage_instructions() {
|
||||
log_success "=== NAS Mount Setup Complete ==="
|
||||
echo ""
|
||||
log_info "Your NAS is now configured for persistent mounting."
|
||||
echo ""
|
||||
echo "Usage instructions:"
|
||||
echo "• Manual mount: sudo mount $MOUNT_POINT"
|
||||
echo "• Manual unmount: sudo umount $MOUNT_POINT"
|
||||
echo "• The mount will be available after reboot via systemd"
|
||||
echo ""
|
||||
echo "Files and locations:"
|
||||
echo "• Mount point: $MOUNT_POINT"
|
||||
echo "• Fstab backup: $FSTAB_BACKUP"
|
||||
if [[ -f "$CREDENTIALS_FILE" ]]; then
|
||||
echo "• Credentials file: $CREDENTIALS_FILE (secure, 600 permissions)"
|
||||
fi
|
||||
echo "• Systemd unit: /etc/systemd/system/mnt-share-media.mount"
|
||||
echo ""
|
||||
log_info "To enable automatic mounting on boot:"
|
||||
echo "sudo systemctl start mnt-share-media.mount"
|
||||
echo ""
|
||||
log_warning "Remember to test the mount after a reboot to ensure it works correctly."
|
||||
}
|
||||
|
||||
# Main function
|
||||
main() {
|
||||
check_root
|
||||
check_prerequisites
|
||||
interactive_setup
|
||||
test_mount
|
||||
show_usage_instructions
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user