挂载在树莓派上的硬盘经常自己取消了挂载,就改写了一个自动检测并挂载硬盘的Shell脚本

代码改自:

#!/bin/sh
# 判断是否挂载
IS_MOUNT=`df -h | grep /home/pi/Disk | wc -l`
DISK_NAME=`lsblk -l | awk '{if ($3=="0") print}' | grep sda | awk '{print $1}'`
if [ $IS_MOUNT -eq 0 ]; then
        echo 硬盘未挂载
        # 获取硬盘地址 判断硬盘地址是否存在
        if [ -b /dev/$DISK_NAME ]; then
                echo 硬盘即将挂载
                mount /dev/$DISK_NAME /home/pi/Disk
                sync
        else
                echo 设备不存在
        fi
elif [ $IS_MOUNT -eq 1 ]; then
        echo 硬盘已挂载
else
        echo ERROR
fi

开机自动挂载硬盘

获取硬盘 UUID

blkid -s UUID /dev/sda1

写入配置

vim /etc/fstab

# 配置
UUID=9032ef41-46cf-4bc6-ac01-be54be5f6c49 /data ext4 defaults 0 0

使用UUID挂载

最近新购入了一块硬盘,不知道是树莓派供电不足还是什么原因,开机后硬盘设备不太稳定,有时是 /dev/sda1 有时候又是 /dev/sdb1,之前的脚本就会出现问题

#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH

# 判断硬盘是否已挂载和处理挂载点冲突
TIME=$(date "+%Y-%m-%d %H:%M:%S")
LOG_FILE="/home/zh/sh/.chickDiskLog"
MOUNT_POINT="/mnt/Disk"
UUID="34aada44-e3e6-4a7e-b02d-66e672d3ec24"  # 替换为你的硬盘UUID

# 检查硬盘是否挂载
IS_MOUNT=$(findmnt -rn -S UUID=$UUID -o TARGET)

if [ -z $IS_MOUNT ]; then
    echo "$TIME 硬盘未挂载" >> $LOG_FILE

    # 检查挂载点是否被占用
    MOUNTED=$(mount | grep -w $MOUNT_POINT | wc -l)

    if [ $MOUNTED -ne 0 ]; then
        echo "$TIME 挂载点已被占用,尝试卸载当前设备" >> $LOG_FILE
        umount $MOUNT_POINT
        if [ $? -ne 0 ]; then
            echo "$TIME 卸载失败,挂载中止" >> $LOG_FILE
            exit 1
        fi
        echo "$TIME 卸载成功" >> $LOG_FILE
    fi

    # 判断 UUID 是否存在
    if blkid | grep -q "UUID=\"$UUID\""; then
        # 处理 systemd 提示
        sudo systemctl daemon-reload

        # 挂载设备
        mount UUID=$UUID $MOUNT_POINT
        sync

        if [ $? -eq 0 ]; then
            echo "$TIME 已挂载新设备" >> $LOG_FILE
        else
            echo "$TIME 挂载失败" >> $LOG_FILE
        fi
    else
        echo "$TIME 设备不存在" >> $LOG_FILE
    fi
elif [ "$IS_MOUNT" = "$MOUNT_POINT" ]; then
    echo "$TIME 硬盘已挂载" >> $LOG_FILE
else
    echo "$TIME ERROR" >> $LOG_FILE
fi

代码中的 systemctl daemon-reload 不是必须,

挂载时出现:mount: (hint) your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload. 提示的再添加

最后修改:2024 年 09 月 07 日
如果觉得我的文章对你有用,请随意赞赏