Ubuntu插入usb时自动挂载硬盘到mnt,拔出时自动卸载

/etc/udev/rules.d/99-usb-mount.rules

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/usr/local/bin/usb-mount.sh"
ACTION=="remove", SUBSYSTEMS=="usb", RUN+="/usr/local/bin/usb-umount.sh"

无注释版

/usr/local/bin/usb-mount.sh

#!/bin/bash

MOUNT_POINT="/mnt"

devices=$(lsblk -no NAME,TRAN | grep usb | awk '{print $1}')
for device in $devices; do
    partitions=$(lsblk -no NAME,TRAN,PARTLABEL $device | grep -v usb | grep -v "Microsoft reserved partition" | sed "s/└─//g" | awk '{print $1}')
    for partition in $partitions; do
        [ ! -d "$MOUNT_POINT/$partition" ] && mkdir -p "$MOUNT_POINT/$partition"
        if ! mountpoint -q "$MOUNT_POINT/$partition"; then
            mount -o uid=$(id -u),gid=$(id -g),umask=000 /dev/$partition "$MOUNT_POINT/$partition"
        fi
    done
done

/usr/local/bin/usb-umount.sh

#!/bin/bash

MOUNT_POINT="/mnt"

mounted_devices=$(awk '/\/mnt/ {print $1}' /proc/mounts | sed "s/\/dev\///g")
for device in $mounted_devices; do
    if ! lsblk -o NAME,TRAN | grep -q "$device"; then
        umount "/dev/$device"
        rmdir "$MOUNT_POINT/$device"
    fi
done

说明

mount -o uid=$(id -u),gid=$(id -g),umask=000 /dev/$partition "$MOUNT_POINT/$partition"

这里是因为exFAT等格式不支持权限,如果直接chmod虽然不会报错但也没法改,只能模拟权限。
如果只需要读取的话可以删掉命令参数,改成:

mount /dev/$partition "$MOUNT_POINT/$partition"

有注释版(可以不看)

/usr/local/bin/usb-mount.sh

#!/bin/bash

# 定义挂载点和日志文件路径
MOUNT_POINT="/mnt"
LOG_FILE="/usr/local/bin/usb.log"

# 获取所有USB设备
devices=$(lsblk -no NAME,TRAN | grep usb | awk '{print $1}')

for device in $devices; do
    echo "$(date) - Detected USB device: $device" >> "$LOG_FILE"

    # 获取设备的所有分区
    partitions=$(lsblk -no NAME,TRAN,PARTLABEL /dev/sda | grep -v usb | grep -v "Microsoft reserved partition" | sed "s/└─//g" | awk '{print $1}')

    for partition in $partitions; do
        echo "$(date) - Detected partition: $partition" >> "$LOG_FILE"

        # 检查挂载点是否存在,如果不存在则创建
        [ ! -d "$MOUNT_POINT/$partition" ] && mkdir -p "$MOUNT_POINT/$partition" && echo "$(date) - Created mount point: $MOUNT_POINT/$partition" >> "$LOG_FILE"

        # 尝试挂载分区
        if ! mountpoint -q "$MOUNT_POINT/$partition"; then
            mount -o uid=$(id -u),gid=$(id -g),umask=000 /dev/$partition "$MOUNT_POINT/$partition" && echo "$(date) - Partition $partition mounted on $MOUNT_POINT/$partition" >> "$LOG_FILE" || echo "$(date) - Failed to mount $partition on $MOUNT_POINT/$partition" >> "$LOG_FILE"
        else
            echo "$(date) - Partition $partition is already mounted" >> "$LOG_FILE"
        fi
    done
done
echo "$(date) - USB mount process completed" >> "$LOG_FILE"

/usr/local/bin/usb-umount.sh

#!/bin/bash

# 定义挂载点和日志文件路径
MOUNT_POINT="/mnt"
LOG_FILE="/usr/local/bin/usb.log"

echo "$(date) - Starting USB unmount process" >> "$LOG_FILE"

# 获取当前挂载的USB设备
mounted_devices=$(awk '/\/mnt/ {print $1}' /proc/mounts | sed "s/\/dev\///g")

for device in $mounted_devices; do
    echo "$(date) - Checking device: $device" >> "$LOG_FILE"

    # 检查设备是否仍然存在
    if ! lsblk -o NAME,TRAN | grep -q "$device"; then
        # 卸载设备
        umount "/dev/$device" && echo "$(date) - Device $device unmounted" >> "$LOG_FILE" || echo "$(date) - Failed to unmount $device" >> "$LOG_FILE"
        rmdir "$MOUNT_POINT/$device"
    else
        echo "$(date) - Device $device alive" >> "$LOG_FILE"
    fi
done
echo "$(date) - USB unmount process completed" >> "$LOG_FILE"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值