Skip to main content

Create the Backup Script

Prerequisites

Before setting up the backup script, ensure you have the following:

  • The source directory you want to back up.
  • Access to an SMB share where you want to store the backups.
  • SMB credentials (username and password) for authentication.

Create the Backup Script

You can create a Bash script for this purpose. Save the following code in a file, e.g., weekly_backup.sh:

#!/bin/bash

# Source directory to be backed up
source_dir="/path/to/source_directory"

# SMB share URL where you want to store the backups
smb_share="smb://username@hostname/share_name"

# Destination directory on the SMB share
smb_dir="/path/to/smb/directory"

# Define a timestamp for the current date
timestamp=$(date "+%Y%m%d")

# Set the backup directory name with the timestamp
backup_dir="${smb_dir}/backup_${timestamp}"

# Check if the destination directory exists, and create it if not
if ! smbclient -L "${smb_share}" -U username%password >/dev/null 2>&1; then
    echo "Error: Unable to access the SMB share. Please check the SMB share URL, username, and password."
    exit 1
fi

# Perform the backup using rsync
rsync -avz --no-links --exclude-from=/path/to/exclude_list.txt "$source_dir" "$backup_dir"

# Check if the rsync command was successful
if [ $? -eq 0 ]; then
    echo "Backup completed successfully."
else
    echo "Backup failed."
    exit 1
fi

exit 0

Replace the placeholders in the script with your actual values:

  • /path/to/source_directory: The directory you want to back up.
  • smb://username@hostname/share_name: The SMB share URL where you want to store the backups.
  • /path/to/smb/directory: The destination directory on the SMB share.
  • username and password: Your SMB credentials.
  • /path/to/exclude_list.txt: Optionally, you can create an exclude list file to specify files or directories to exclude from the backup.

Make the script executable with the following command:

chmod +x weekly_backup.sh

Schedule the Script

To run the script automatically on a weekly basis, use a scheduling tool like cron. Edit your crontab using the crontab -e command and add a line like this to run the script every Sunday at midnight:

0 0 * * 0 /path/to/weekly_backup.sh

This schedules the script to run every Sunday at midnight, creating a new backup directory with a timestamp to avoid overwriting old backups.

Now, you have a weekly backup script in place to safeguard your data on an SMB share.