Unmount a drive script

From PCLinuxOS Knowledgebase
Jump to navigation Jump to search

YOU ARE HERE :: Main Page >> HowTo >> Unmount a drive script

  • This script is relevant to ALL editions of PCLinuxOS.

To safely unmount any drive using this Linux script

The goal of this script is to:

1. Ensure the drive is not busy: Before unmounting, it's good practice to ensure no process is using the drive.
2. Unmount the drive: Use the umount command to unmount the drive.
3. Include error handling: Check for errors and notify if unmounting fails.

The script using bash.

* Run this script from a konsole window as the root user.
* Change the variable MOUNT_POINT="/mnt/backup" to the actual mount point of your drive.
 #!/bin/bash
 
 # Define the mount point or device name
 MOUNT_POINT="/mnt/backup"
 
 # Check if the mount point is currently in use
 if mountpoint -q "$MOUNT_POINT"; then
    echo "Unmounting $MOUNT_POINT..."
 
    # Attempt to unmount the drive
    if umount "$MOUNT_POINT"; then
        echo "Successfully unmounted $MOUNT_POINT."
    else
        echo "Failed to unmount $MOUNT_POINT. Please check if any processes are using it."
        # Optional: List open files using the mount point (requires lsof)
        lsof +D "$MOUNT_POINT"
    fi
 else
    echo "$MOUNT_POINT is not mounted."
 fi


What this script does:

* mountpoint -q "$MOUNT_POINT": Checks to see if the directory is a mount point.
* umount "MOUNT_POINT": Unmounts the specified directory.
* lsof +D "MOUNT_POINT" (optional) Lists any open files and processes using the mount point if the unmounting fails.

NOTE: The program lsof should already be installed on your system. If for some reason it isn't, lsof can be installed using The Synaptic Package manager.


Here is an improved version that ensure that this script 'can not unmount the drive when it is in use.

 #!/bin/bash
 
 # Define the mount point or device name

 MOUNT_POINT="/mnt/backup"
 
 # Function to check for open files and processes using the mount point
 check_active_processes() {
    local active_processes
    active_processes=$(lsof +D "$MOUNT_POINT" 2>/dev/null)
 
    if [[ -n "$active_processes" ]]; then
        echo "The following processes are using $MOUNT_POINT:"
        echo "$active_processes"
        return 1  # Return non-zero to indicate the drive is busy
    else
        return 0  # Return zero to indicate the drive is not in use
    fi
 }
 
 # Check if the mount point is currently in use
 if mountpoint -q "$MOUNT_POINT"; then
    echo "$MOUNT_POINT is currently mounted. Checking for active processes..."
 
    # Check for active processes and only unmount if there are none
    if check_active_processes; then
        echo "No active processes found. Unmounting $MOUNT_POINT..."
 
        # Attempt to unmount the drive
        if umount "$MOUNT_POINT"; then
            echo "Successfully unmounted $MOUNT_POINT."
        else
            echo "Failed to unmount $MOUNT_POINT. Please check for potential issues."
        fi
    else
        echo "Unmount aborted. $MOUNT_POINT is currently in use by active processes."
    fi
 else
    echo "$MOUNT_POINT is not currently mounted."
  fi

What this improved script does:

* lsof +D "$MOUNT_POINT": Lists open files within the directory, showing processes using the mount point.
* Conditional Check (if [[ -n "$active_processes" ]]): If lsof outputs any active processes, the script will print them and abort the unmount operation.
* Error Handling: The script will exit gracefully if active processes are detected, avoiding data corruption or disruption.

How This Works:

The script first checks if the specified mount point is mounted.

It uses lsof to detect if any processes are using files within the mount point. If processes are detected, it prints them and aborts unmounting.

If no active processes are found, the script proceeds to unmount the drive.

This ensures that the drive is only unmounted when it’s safe to do so.