V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
halk
V2EX  ›  Android

安卓系统启动/关闭过程中断电,会不会造成系统文件损坏?

  •  
  •   halk · 2024-09-04 09:16:32 +08:00 · 6903 次点击
    这是一个创建于 370 天前的主题,其中的信息可能已经有所发展或是发生改变。

    安卓工控机,有断电重启的业务需求。

    有三个时间点:

    1. 系统启动或关闭过程中
    2. 系统启动完成,业务 app 启动中
    3. 系统启动完成,且业务 app 启动完成

    哪一种风险更高? 不考虑系统/业务 app 版本升级 升级的场景

    20 条回复    2024-09-05 21:10:07 +08:00
    kokerkov
        1
    kokerkov  
       2024-09-04 09:25:39 +08:00
    安卓关于文件存储这种低级活动是内核 linux 处理的,所以应该等同于 linux 。

    这题我不会。请高人
    cheng6563
        2
    cheng6563  
       2024-09-04 09:27:26 +08:00
    写数据时还是可能会炸,需要你应用 App 做好处理,比如写备份数据库,App 启动时自动校验并使用备份数据
    paopjian
        3
    paopjian  
       2024-09-04 09:30:06 +08:00
    好多安卓手机都有双系统备份,一个系统更新炸了启动不起来就切备用的?
    LLaMA2
        4
    LLaMA2  
       2024-09-04 09:34:55 +08:00
    1.出问题概率最大.所以你编译系统的时候要做好容错恢复处理

    2.和 3. 基本不会,
    除非你能修改操作系统的某些配置.一般情况下自己 app 要做容错处理

    目前 android 系统有 a/b 机制.你得和供货厂家确认,和网友确认是不靠谱的
    PTLin
        5
    PTLin  
       2024-09-04 09:39:07 +08:00
    f2fs 这种带日志的说实话真彻底挂掉的概率是很小的,随时断电的场景下 100%没问题是不可能的,但就迭代了这么多年,加上个人的经验,99%没问题倒是可以。
    halk
        6
    halk  
    OP
       2024-09-04 09:46:26 +08:00
    安卓定制工控

    1. 发生过业务 app 文件( so 文件)损坏,导致应用无法启动的情况,没有定位到具体原因
    2. 还没有发生过系统文件损坏,导致系统无法启动的情况

    对于第 1 中,也比较奇怪,因为对应用对 so 文件只是加载,并不会修改
    luny
        7
    luny  
       2024-09-04 10:07:53 +08:00
    只要是基于通用文件系统,比如 ext4 ,都会存在掉电一致性问题,所以一般针对嵌入式场景,都会尽量减少可写入文件系统的占比,能用只读的比如 squashfs ,尽量用只读。另外像企业级固态硬盘,都会有很大的电容做掉电保护,也说明文件系统是不可靠的。
    jiabing520a
        8
    jiabing520a  
       2024-09-04 12:04:06 +08:00
    会出现问题基本是因为断电时正在读写,所以楼上说的搞成只读的,确实是一个方向
    location123
        9
    location123  
       2024-09-04 13:24:39 +08:00
    目前在做的 Android 屏关机方式就是直接断电 遇到过 直接断电后 数据库插入更新数据丢失 写完的文件丢失 现在解决方案就是在重要的节点调用 sync 同步、备份数据下次开始时检测文件完整性
    tool2dx
        10
    tool2dx  
       2024-09-04 13:29:25 +08:00
    别说安卓了,就算成熟的 PC 你直接断电,都有可能出现问题。

    有一种古老的技术叫 ramos ,那个不太怕掉电。当然数据安全要自己处理的。
    janus77
        11
    janus77  
       2024-09-04 13:55:12 +08:00
    安卓设备不是有电池吗?为什么会出现你说的这种情况?你们把电池拆了?
    如果拆了,最好的办法就是装电池
    yuchenr
        12
    yuchenr  
       2024-09-04 14:57:48 +08:00
    就不能用正常的重启吗?
    idealhs
        13
    idealhs  
       2024-09-04 15:04:04 +08:00
    不如加个 UPS
    R4rvZ6agNVWr56V0
        14
    R4rvZ6agNVWr56V0  
       2024-09-04 15:04:24 +08:00
    系统启动完成,且业务 app 启动完成后的风险
    我认为这个阶段的风险最高,主要原因:

    所有系统和应用都已完全运行。用户正在进行实际操作。
    数据库连接、网络通信等关键服务都已建立。
    用户正在执行各种业务操作,数据正在被读写。

    如果此时断电,很可能会导致数据丢失、事务中断等意外问题,会影响到业务系统依赖的环境。
    binsys
        15
    binsys  
       2024-09-04 15:08:26 +08:00
    工业应用考虑上只读文件系统+AB 分区。
    用一些手段提高可靠性。

    单纯 EXT4 问题肯定多。
    halk
        16
    halk  
    OP
       2024-09-04 17:05:51 +08:00
    @janus77 工控配有 UPS ,有些场景(例如设备无网络),需要进行断电重启处理
    Zy143L
        17
    Zy143L  
       2024-09-05 02:44:26 +08:00
    系统挂的概率不高 system 基本上都是只读的 你更多得考虑你的软件在写数据中断造成的文件异常
    Chinsung
        18
    Chinsung  
       2024-09-05 09:47:56 +08:00
    一般现在基于日志的文件系统都是按页来的,数据可能会丢
    那么出现文件损坏的情况,一般就是对文件完整性要求比较高(比如用大 json 存,保存时直接一段没保存上,json 格式被破坏了),或者存储方式没有使用日志,否则也应该只是丢数据而且不是文件直接损坏
    从这个角度看,业务 app 可以尽可能保持两种方式去保存数据:对文件完整性要求不高的、基于日志的存储(类似于 ext 的 log ,或者 mysql 的 redolog )
    halk
        19
    halk  
    OP
       2024-09-05 17:32:58 +08:00
    @Chinsung 遇到的问题,不是 json 等数据文件损坏,而是 apk 的 so 文件损坏了
    应用不会对这个文件进行 w ,只有 r
    fugu37
        20
    fugu37  
       2024-09-05 21:10:07 +08:00
    @halk #19

    存储设备出问题也会导致文件系统上文件损坏
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3121 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:41 · PVG 20:41 · LAX 05:41 · JFK 08:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.