generated from zj/archlinux-pkg
update
This commit is contained in:
76
tms-bbt-config/manual_usb_check.sh
Normal file
76
tms-bbt-config/manual_usb_check.sh
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 定义你的修复脚本路径
|
||||
FIX_SCRIPT="/home/smart/.tms3/starter/usb_disk_fix_script.sh"
|
||||
LOG_FILE="/var/log/usb_disk_fix.log" # 这个日志文件路径和修复脚本中的一致
|
||||
|
||||
echo "----------------------------------------------------"
|
||||
echo "$(date): Manual USB disk check started."
|
||||
echo "----------------------------------------------------"
|
||||
|
||||
# 检查修复脚本是否存在
|
||||
if [ ! -x "$FIX_SCRIPT" ]; then
|
||||
echo "错误:修复脚本 '$FIX_SCRIPT' 不存在或没有执行权限。"
|
||||
echo "请确保脚本已正确放置并设置了可执行权限。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 查找所有 USB 分区
|
||||
USB_PARTITIONS_TO_CHECK=""
|
||||
|
||||
# 1. 首先,识别所有传输类型为 'usb' 的磁盘 (例如 /dev/sdc)
|
||||
# -o NAME,TYPE,TRAN -p -n: 输出设备名、类型、传输协议,完整路径,不显示标题
|
||||
# awk '$2 == "disk" && $3 == "usb" {print $1}': 过滤出类型为 'disk' 且传输协议为 'usb' 的设备名
|
||||
USB_DISK_NAMES=$(lsblk -o NAME,TYPE,TRAN -p -n | awk '$2 == "disk" && $3 == "usb" {print $1}')
|
||||
|
||||
if [ -z "$USB_DISK_NAMES" ]; then
|
||||
echo "$(date): 未发现任何 USB 磁盘。"
|
||||
else
|
||||
echo "$(date): 发现以下 USB 磁盘: $USB_DISK_NAMES"
|
||||
for disk_name in $USB_DISK_NAMES; do
|
||||
# 2. 对于每个 USB 磁盘,找到它下面的所有分区 (例如 /dev/sdc1)
|
||||
# -o NAME,TYPE -p -n "$disk_name": 列出指定磁盘下的设备名和类型
|
||||
# awk '$2 == "part" {gsub(/^[[:space:]]*[├└][─]*/, "", $1); print $1}': 过滤出类型为 'part' 的分区名
|
||||
# 并使用 gsub() 函数去除 lsblk 输出中的前导字符 (如 '└─')
|
||||
PARTITIONS_ON_DISK=$(lsblk -o NAME,TYPE -p -n "$disk_name" | awk '$2 == "part" {gsub(/^[[:space:]]*[├└][─]*/, "", $1); print $1}')
|
||||
USB_PARTITIONS_TO_CHECK="$USB_PARTITIONS_TO_CHECK $PARTITIONS_ON_DISK"
|
||||
done
|
||||
fi
|
||||
|
||||
# 去除重复的设备路径,并确保路径是唯一的
|
||||
USB_PARTITIONS_TO_CHECK=$(echo "$USB_PARTITIONS_TO_CHECK" | tr ' ' '\n' | sort -u | tr '\n' ' ')
|
||||
|
||||
if [ -z "$USB_PARTITIONS_TO_CHECK" ]; then
|
||||
echo "$(date): 未发现任何 USB 分区需要检查。"
|
||||
echo "----------------------------------------------------"
|
||||
echo "$(date): Manual USB disk check finished."
|
||||
echo "----------------------------------------------------"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "$(date): 发现以下 USB 分区,将逐一进行检查:"
|
||||
echo "$USB_PARTITIONS_TO_CHECK"
|
||||
echo ""
|
||||
|
||||
for dev_path in $USB_PARTITIONS_TO_CHECK; do
|
||||
# 确保 dev_path 不为空或只包含空格
|
||||
if [ -n "$dev_path" ]; then
|
||||
echo "----------------------------------------------------"
|
||||
echo "$(date): 正在检查分区: $dev_path"
|
||||
echo "----------------------------------------------------"
|
||||
# 调用你的修复脚本。现在修复脚本会直接将输出打印到终端。
|
||||
# 确保当前脚本也以 sudo 运行,或者修复脚本已经配置为无密码 sudo。
|
||||
# 最简单的方式是直接让用户以 sudo 运行此脚本。
|
||||
"$FIX_SCRIPT" "$dev_path"
|
||||
# 更新此消息,因为输出现在在终端可见
|
||||
echo "$(date): 对 $dev_path 的检查已完成。详细信息请查看终端输出和日志文件: $LOG_FILE"
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
echo "----------------------------------------------------"
|
||||
echo "$(date): 所有发现的 USB 分区检查已完成。"
|
||||
echo "$(date): 详细的修复进度和结果已显示在终端,并记录在 '$LOG_FILE' 中。"
|
||||
echo "----------------------------------------------------"
|
||||
|
||||
sleep 5 # 保持终端窗口打开,以便用户查看最终消息
|
||||
Reference in New Issue
Block a user