diff --git a/scripts/autoupdate-bash.sh b/scripts/autoupdate-bash.sh index 705d4be..db5cd59 100644 --- a/scripts/autoupdate-bash.sh +++ b/scripts/autoupdate-bash.sh @@ -75,13 +75,33 @@ if cat /proc/mounts | grep -q ${lodev}p2; then umount ${lodev}p2; fi e2fsck -yf ${lodev}p2 || true resize2fs ${lodev}p2 -losetup -d $lodev +losetup -d "$lodev" + echo -e '\e[92m正在打包...\e[0m' echo -e '\e[92m开始写入,请勿中断...\e[0m' + if [ -f FriendlyWrt.img ]; then - echo 1 > /proc/sys/kernel/sysrq - echo u > /proc/sysrq-trigger && umount / || true - dd if=FriendlyWrt.img of=/dev/$block_device - echo -e '\e[92m刷机完毕,正在重启...\e[0m' - echo b > /proc/sysrq-trigger + # убедимся, что ничего с целевого диска не смонтировано (mmcblk0/1/sdX) + dev="/dev/$block_device" + awk -v d="$(basename "$dev")" '$1 ~ "^/dev/" d {print $2}' /proc/mounts \ + | sort -r | while read -r m; do + umount "$m" 2>/dev/null || umount -l "$m" 2>/dev/null || true + done + + # remount всех ФС в read-only, без попытки умонтировать корень + echo 1 > /proc/sys/kernel/sysrq + echo u > /proc/sysrq-trigger + sync + + # прошивка диска + # (если есть pv и coreutils dd — удобно так; иначе убери pv и status) + if command -v pv >/dev/null; then + pv FriendlyWrt.img | dd of="$dev" bs=4M conv=fsync + else + dd if=FriendlyWrt.img of="$dev" bs=4M conv=fsync + fi + + echo -e '\e[92m刷机完毕,正在重启...\e[0m' + echo b > /proc/sysrq-trigger fi +