拍视频版本
This commit is contained in:
162
bash/disk_tool.sh
Normal file
162
bash/disk_tool.sh
Normal file
@@ -0,0 +1,162 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ================= 配置区 =================
|
||||
# 注意:这里不再硬编码 /dev/sda1,脚本会自动检测第一个非系统盘的 SATA/USB 设备
|
||||
TARGET_LABEL=""
|
||||
MOUNT_POINT="/videos"
|
||||
FSTAB_FILE="/etc/fstab"
|
||||
# ==========================================
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 1. 检查 Root 权限
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo -e "${RED}❌ 权限不足!请使用 sudo 运行此脚本${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. 自动检测硬盘设备 (智能查找)
|
||||
# 逻辑:查找名为 sda1, sdb1, sdc1 等且不是根分区的设备
|
||||
detect_device() {
|
||||
# 尝试找 sda1
|
||||
if [ -b "/dev/sda1" ] && [ "$(df /dev/sda1 2>/dev/null | tail -1 | awk '{print $NF}')" != "/" ]; then
|
||||
echo "/dev/sda1"
|
||||
return
|
||||
fi
|
||||
# 尝试找 sdb1
|
||||
if [ -b "/dev/sdb1" ]; then
|
||||
echo "/dev/sdb1"
|
||||
return
|
||||
fi
|
||||
# 尝试找 mmcblk 以外的第一个大容量分区 (针对更复杂情况)
|
||||
lsblk -ndpo NAME,TYPE,SIZE,MOUNTPOINT | grep -E "part|disk" | grep -v "mmcblk" | head -n 1 | awk '{print $1}'
|
||||
}
|
||||
|
||||
DEVICE=$(detect_device)
|
||||
|
||||
if [ -z "$DEVICE" ]; then
|
||||
echo -e "${RED}❌ 未检测到可用的外接硬盘设备 (sda1/sdb1 等)。请检查硬件连接。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. 获取 UUID (核心步骤)
|
||||
UUID=$(blkid -s UUID -o value "$DEVICE" 2>/dev/null)
|
||||
|
||||
if [ -z "$UUID" ]; then
|
||||
echo -e "${RED}❌ 无法获取设备 $DEVICE 的 UUID。可能文件系统损坏或未格式化。${NC}"
|
||||
echo "提示:尝试执行 'sudo mkfs.ext4 $DEVICE' 进行格式化 (数据会丢失!)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取文件系统类型
|
||||
FS_TYPE=$(blkid -s TYPE -o value "$DEVICE" 2>/dev/null)
|
||||
|
||||
echo -e "${GREEN}✅ 检测到设备:${NC} $DEVICE"
|
||||
echo -e "${GREEN}✅ 文件系统:${NC} $FS_TYPE"
|
||||
echo -e "${GREEN}✅ UUID:${NC} $UUID"
|
||||
echo ""
|
||||
|
||||
# 4. 确保挂载点目录存在
|
||||
if [ ! -d "$MOUNT_POINT" ]; then
|
||||
echo "正在创建挂载点: $MOUNT_POINT"
|
||||
mkdir -p "$MOUNT_POINT"
|
||||
chmod 777 "$MOUNT_POINT"
|
||||
fi
|
||||
|
||||
# 5. 菜单界面
|
||||
echo "=========================================="
|
||||
echo " RK3588 硬盘挂载工具"
|
||||
echo "=========================================="
|
||||
echo "目标设备: $DEVICE ($FS_TYPE)"
|
||||
echo "设备 UUID: $UUID"
|
||||
echo "挂载目录: $MOUNT_POINT"
|
||||
echo "------------------------------------------"
|
||||
echo " 1) 立即挂载硬盘 (Mount Now)"
|
||||
echo " 2) 立即取消挂载 (Unmount Now)"
|
||||
echo " 3) 开启开机自动挂载 (Enable Auto-Mount via UUID)"
|
||||
echo " 4) 取消开机自动挂载 (Disable Auto-Mount)"
|
||||
echo " 5) 查看当前磁盘状态 (Status)"
|
||||
echo " 6) 退出 (Exit)"
|
||||
echo "=========================================="
|
||||
read -p "请输入选项 [1-6]: " choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
echo "正在挂载 UUID=$UUID 到 $MOUNT_POINT ..."
|
||||
# 使用 UUID 挂载命令
|
||||
mount -U "$UUID" "$MOUNT_POINT"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 挂载成功!${NC}"
|
||||
df -h | grep "$MOUNT_POINT"
|
||||
else
|
||||
echo -e "${RED}❌ 挂载失败!${NC}"
|
||||
echo "可能原因:文件系统类型不支持或需要 fsck 修复。"
|
||||
echo "尝试手动修复:sudo fsck -y $DEVICE"
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
echo "正在卸载 $MOUNT_POINT ..."
|
||||
umount "$MOUNT_POINT"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ 卸载成功!${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 卸载失败!${NC} 可能有程序正在使用该目录 (如日志写入、视频录制)。"
|
||||
echo "提示:使用 'lsof +D $MOUNT_POINT' 查看占用进程。"
|
||||
fi
|
||||
;;
|
||||
3)
|
||||
# 检查 fstab 中是否已经存在该 UUID 的记录
|
||||
if grep -q "$UUID" "$FSTAB_FILE"; then
|
||||
echo -e "${YELLOW}⚠️ 开机自动挂载已存在 (基于 UUID),无需重复设置。${NC}"
|
||||
else
|
||||
# 构造 fstab 行:UUID=xxxx /videos auto defaults,nofail,x-systemd.device-timeout=30 0 2
|
||||
FSTAB_ENTRY="UUID=$UUID $MOUNT_POINT $FS_TYPE defaults,nofail,x-systemd.device-timeout=30 0 2"
|
||||
|
||||
echo "即将写入配置:"
|
||||
echo " $FSTAB_ENTRY"
|
||||
read -p "确认写入?(y/n): " confirm
|
||||
if [ "$confirm" == "y" ] || [ "$confirm" == "Y" ]; then
|
||||
echo "$FSTAB_ENTRY" >> "$FSTAB_FILE"
|
||||
echo -e "${GREEN}✅ 开机自动挂载已启用!${NC}"
|
||||
|
||||
# 尝试立即应用配置测试
|
||||
echo "正在测试配置有效性..."
|
||||
umount "$MOUNT_POINT" 2>/dev/null
|
||||
if mount -a; then
|
||||
echo -e "${GREEN}✅ 配置测试通过,mount -a 执行成功。${NC}"
|
||||
else
|
||||
echo -e "${RED}⚠️ 警告:mount -a 测试失败,请检查 /etc/fstab 格式。${NC}"
|
||||
fi
|
||||
else
|
||||
echo "操作已取消。"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
4)
|
||||
# 删除包含该 UUID 的行
|
||||
if grep -q "$UUID" "$FSTAB_FILE"; then
|
||||
sed -i "/$UUID/d" "$FSTAB_FILE"
|
||||
echo -e "${GREEN}✅ 开机自动挂载已清理!${NC}"
|
||||
else
|
||||
echo "未找到该 UUID 的配置记录。"
|
||||
fi
|
||||
;;
|
||||
5)
|
||||
echo "--- 当前磁盘使用情况 ---"
|
||||
df -hT | grep -E "Filesystem|$MOUNT_POINT|/dev/sd"
|
||||
echo ""
|
||||
echo "--- /etc/fstab 内容预览 ---"
|
||||
tail -n 5 "$FSTAB_FILE"
|
||||
;;
|
||||
6)
|
||||
echo "退出脚本。"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}❌ 错误:输入无效。${NC}"
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user