''

Orien Daily

  1. 🔑 write() 成功了,为什么文件还是可能丢?很多人第一次写文件时都会有一个直觉:write() 已经返回成功,数据就应该已经“进硬盘”了

    🔑 write() 成功了,为什么文件还是可能丢?

    很多人第一次写文件时都会有一个直觉:write() 已经返回成功,数据就应该已经“进硬盘”了。这个直觉是错的。write() 在大多数 Unix/Linux 系统里,通常只表示“内核已经收下这段数据”,而不是“存储设备已经真的写好”。内核之所以这样设计,不是偷懒,而是为了性能:如果每次写入都强行等硬盘落盘,程序会慢得像卡住一样。于是操作系统把数据先放进 page cache,等合适的时候再批量刷盘,这样吞吐量高得多。

    这就带来一个非常重要的后果:程序看起来“保存成功”了,机器一断电,文件仍然可能丢,甚至可能只写进去一半。尤其是你在更新配置文件、日志文件、状态文件时,这个坑非常常见。很多人以为“我都 close 了,应该安全了吧”,也不完全对。close() 主要是释放文件描述符,刷盘可能仍然是延后的。真正要逼内核把修改推到稳定存储,通常要显式调用 fsync() 或 fdatasync()。

    这也是为什么很多可靠软件不直接覆盖原文件,而是采用“先写临时文件,再 fsync,再 rename”的套路。因为 rename 在同一文件系统内通常是原子的:要么旧文件还在,要么新文件完整替换上去,不容易出现“文件存在,但内容只剩半截”这种恶心状态。不过这里还有第二层坑:你只 fsync 了文件本身,还不一定够。如果你新建了文件或者依赖目录项变化,目录也可能需要 fsync,否则断电后名字映射未必稳定。设计上这是把“数据内容”和“目录元数据”分开处理,目的是避免每次小改动都付出巨大的同步成本。

    所以,write() 保证的是“本次系统调用把字节交给了内核”,不是“崩溃后这些字节仍然活着”。这套设计很实用,因为大部分写操作根本不值得每次都同步到底层设备;但一旦你在做配置保存、钱包、索引、状态机快照、提交记录这类关键数据,就不能再装作 page cache 和断电不存在。

    🧪 课后一题:一个程序先用 write() 写完 config.json,然后立刻退出,没有调用 fsync()。如果这时机器突然断电,config.json 的新内容一定已经安全保存了吗?答案:write()

    💡 易混淆点:write() 成功、close() 成功、文件“看起来能读出来”这三件事,都不等于“断电后数据仍然存在”。

  2. 📸 @shinji_marosan ×4皆様遅ようございます😊昇段審査も終わり、今朝からウォーキング再開?と朝5時には起きたのですが…スマホいじってたりして、時間経過してセミが鳴き出して、あっ無理!と断念今日は有給休暇を取得させていただきお仕事お休みまずは洗濯から…夜は所属道場 稽古だけど暑いんだろうなぁ😮‍💨 #剣道原文 #剣道

    📸 @shinji_marosan ×4
    皆様遅ようございます😊
    昇段審査も終わり、今朝からウォーキング再開?と朝5時には起きたのですが…
    スマホいじってたりして、時間経過して
    セミが鳴き出して、あっ無理!と断念
    今日は有給休暇を取得させていただき
    お仕事お休み
    まずは洗濯から…
    夜は所属道場 稽古だけど
    暑いんだろうなぁ😮‍💨 #剣道
    原文 #剣道

  3. 🎵 Downtempo Groove — Electronic Chill专辑:3AM Broadcast · 3:15《Downtempo Groove》把鼓点压得很低,合成器和贝斯一层层往外铺,像凌晨电台里慢慢发热的霓虹

    🎵 Downtempo Groove — Electronic Chill
    专辑:3AM Broadcast · 3:15

    《Downtempo Groove》把鼓点压得很低,合成器和贝斯一层层往外铺,像凌晨电台里慢慢发热的霓虹。它不是靠爆点推着你走,而是用松弛又有黏性的律动,把 downtempo 电子那种夜行感稳稳托住。

    🔗 Spotify · #推歌 #电子

  4. 📸 @leoitzyhere0813 ×3260725 KM Taipei Fansign台北簽售皮卡丘小咪🫶260725 KM 台北 Fansign 台北签售皮卡丘小咪🫶 #itzy #있지 #YEJI #예지 #黃禮志 #黄礼志原文 #黄礼志

    📸 @leoitzyhere0813 ×3
    260725 KM Taipei Fansign台北簽售
    皮卡丘小咪🫶

    260725 KM 台北 Fansign 台北签售
    皮卡丘小咪🫶 #itzy #있지 #YEJI #예지 #黃禮志 #黄礼志
    原文 #黄礼志

  5. 📸 @leoitzyhere0813 ×4260725 KM Taipei Fansign台北簽售🦊🐈‍⬛260725 KM 台北 Fansign 台北签售🦊🐈‍⬛ #itzy #있지 #YEJI #예지 #黃禮志 #黄礼志原文 #黄礼志

    📸 @leoitzyhere0813 ×4
    260725 KM Taipei Fansign台北簽售
    🦊🐈‍⬛

    260725 KM 台北 Fansign 台北签售
    🦊🐈‍⬛ #itzy #있지 #YEJI #예지 #黃禮志 #黄礼志
    原文 #黄礼志