自动摘要
正在生成中……
深受openwrt系统重启变只读的困扰 ,https://d.cellmean.com/p/2032fa8fe88c
我又没时间重装,找chatgpt写了个开机重新挂载的脚本:
你可以将之前的定时任务脚本逻辑整合进 /etc/init.d/remountscript
中,并使其在系统启动时执行。以下是完整步骤和脚本内容:
1. 创建或编辑 /etc/init.d/remountscript
文件:
在 /etc/init.d/
下创建新的启动脚本,或者直接编辑已有的启动脚本。
vi /etc/init.d/remountscript
2. 编写启动脚本:
将之前的重新挂载逻辑放入这个启动脚本中,并确保 START
参数设置得足够小,使其在其他服务(如 Samba4、vsftpd)之前执行。
下面是更新后的脚本:
#!/bin/sh /etc/rc.common
START=10 # 设置启动优先级,确保该脚本在其他服务之前运行
STOP=99 # 停止优先级
USE_PROCD=1
start() {
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 尝试创建文件,检查文件系统是否为只读
/bin/touch /root/remount.log 2>&1 | grep -q "Read-only file system"
if [ $? -eq 0 ]; then
echo "$current_time - File system is read-only, remounting as read-write..." >> /root/remount.log
# 重新挂载根文件系统为读写模式
/usr/bin/mount -o remount,rw /
# 检查挂载是否成功并记录结果
if [ $? -eq 0 ]; then
echo "$current_time - Remounted successfully." >> /root/remount.log
else
echo "$current_time - Failed to remount." >> /root/remount.log
fi
fi
}
stop() {
echo "Stopping remountscript service..."
}
3. 赋予脚本执行权限:
为脚本赋予执行权限,以便系统可以调用它。
chmod +x /etc/init.d/remountscript
4. 启用启动脚本:
启用脚本,使其在每次系统启动时自动运行。
/etc/init.d/remountscript enable
5. 验证其他服务的启动顺序:
你可以使用 grep
检查其他服务(如 Samba4、vsftpd)的启动优先级,确保 START=10
足够小,确保你的脚本在它们之前运行。
grep START /etc/init.d/samba4
grep START /etc/init.d/vsftpd
如果其他服务的 START
值较大,你的脚本会先执行,并在启动时检查并重新挂载文件系统为读写模式。
6. 测试启动顺序:
重启 OpenWrt 系统,确保脚本在启动时正确执行并在文件系统为只读时成功重新挂载。
reboot
总结:
这个方法会在系统启动时优先执行你的重新挂载脚本,确保文件系统在其他服务启动前切换为读写模式,不再需要定时任务来定期检查。
实测更新
重启后并没有执行,先手动执行一次挂载:
/usr/bin/mount -o remount,rw /
同时修改前面启动脚本的优先级为49,即START=49
然后打开openwrt的网页管理后台,找到系统启动项
,找到remountscript
,点击前面禁用的按钮进行启用,现在下面这个是成功启用状态的图。