磁盘调度器的三十年迷途:从电梯算法到"无调度"的技术突围

2004年,Linux内核开发者面临一个棘手的问题:传统的电梯调度算法在特定工作负载下会导致请求饥饿——某些I/O请求可能永远等不到服务。这个问题的根源在于,当磁盘忙于服务某一方向的请求时,反方向的请求可能被无限期忽略。Jens Axboe设计的Deadline调度器正是为了解决这个问题,它给每个请求设定一个"死线",保证请求不会无限期等待。 ...

12 min · 5556 words

RAID不是备份:为何你的数据保护策略可能正在给你虚假的安全感

2017年1月31日,一个普通的周二,GitLab.com的工程师在尝试修复数据库复制问题时,意外地在主数据库服务器上执行了 rm -rf 命令。大约300GB的数据在几秒钟内被删除。 ...

10 min · 4539 words

Write-Ahead Log:数据库如何在断电瞬间守住数据最后一道防线

1992年3月,ACM Transactions on Database Systems发表了一篇题为《ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging》的论文。这篇由IBM Almaden研究中心的C. Mohan等人撰写的文章,定义了此后三十余年数据库崩溃恢复的基本范式。 ...

13 min · 6282 words

TRIM命令的三大误解:为什么你以为的"数据销毁"其实只是个通知

2014年,某取证实验室收到了一个棘手的案件:嫌疑人删除了大量文件后立即断电,试图销毁证据。按照当时主流认知,SSD启用TRIM后删除的文件应该瞬间消失。然而,取证人员却成功恢复了80%以上的已删除数据。 ...

10 min · 4714 words

fsync()不是你想的那样:数据库持久化的致命误解

2018年3月,PostgreSQL开发者Craig Ringer在邮件列表中披露了一个令人震惊的发现:PostgreSQL对fsync()错误处理不当可能导致数据损坏。这个后来被称为"fsyncgate"的事件揭示了一个更深层的问题——许多开发者对fsync()的语义存在根本性误解。 ...

9 min · 4024 words

Page Cache的阴暗面:为什么write()成功返回数据却可能消失

2009年3月,Ubuntu用户论坛上出现了一连串关于"ext4数据丢失"的报告。用户们描述了一个令人不安的现象:系统正常关机后重启,发现最近编辑的文件变成了零字节。这不是磁盘故障,不是恶意软件,而是Linux内核中一个精心设计的性能优化机制——延迟分配(delayed allocation)——在特定场景下的"副作用"。 ...

11 min · 5510 words