这篇文章距离最后更新已过190 天,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
挂载在树莓派上的硬盘经常自己取消了挂载,就改写了一个自动检测并挂载硬盘的Shell脚本
代码改自:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#!/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
1
|
blkid -s UUID /dev/sda1
|
写入配置
1 2 3 4
|
vim /etc/fstab
# 配置
UUID=9032ef41-46cf-4bc6-ac01-be54be5f6c49 /data ext4 defaults 0 0
|
使用UUID挂载
最近新购入了一块硬盘,不知道是树莓派供电不足还是什么原因,开机后硬盘设备不太稳定,有时是 /dev/sda1
有时候又是 /dev/sdb1
,之前的脚本就会出现问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
#!/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.
提示的再添加
暂无评论