×

临时性解决 Openwrt Read-only file system 问题

Falcon 2024-09-27 views:
摘要

正在生成中……

深受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,点击前面禁用的按钮进行启用,现在下面这个是成功启用状态的图。

本文收录于