打开网易新闻 查看更多图片

Linux的创始开发者Linus Torvalds在昨天发给Linux内核邮件列表的一封邮件中警告全世界,别使用其公共git树中的5.12-rc1内核。

你们中一些人可能已经注意到,在我的公共git树中,“v5.12-rc1”标记已神奇地改名为“v5.12-rc1-dontuse”。它仍然是同一个对象,在内部仍显示“v5.12-rc1”,并且仍由我签名,但是该标记的用户可见称已更改。

事实证明,Linus Torvalds将某些代码标为dontuse(别使用)时,他确实是当真的——这个5.12发行候选版本存在的问题非常严重地破坏了交换文件(swapfile)处理。具体来说,更新后的代码会丢失指向交换文件开头的适当偏移量。再次用Torvalds自己的话来说:“交换仍进行,但出现在文件系统不该交换的部分,因而酿成明显的灾难性后果。”

这意味着当内核将内存中内容分页到磁盘上时,数据会落在交换文件所在的同一磁盘和分区的随机部分上——请注意,不是与文件在同一磁盘和分区上,而是与直接发送到磁盘上原始扇区的垃圾内容在同一磁盘和分区上。这意味着不仅覆盖现有文件中的数据,还覆盖大段的元数据 ,这些元数据的损坏可能导致整个文件系统无法 挂载、 无法使用。

Torvalds进而指出,如果你根本不使用交换,这个问题不会困扰你。如果你在使用交换分区而不是交换文件,同样不会受到影响。遗憾的是,他随后提醒我们,虽然他绝对通晓内核,但不一定完全很熟悉普通最终用户关心的所有底层问题:

而且据我所知,所有平常的发行版通过交换分区而不是文件来处理事情,因为坦率地讲,交换文件往往速度较慢,且存在其他各种复杂性问题。

许多发行版仍然默认使用交换分区,而不是文件。但是四年多来,Ubuntu(也许是全球部署最广泛的一种Linux发行版)一直在默认安装交换文件。如果你使用Ubuntu(或使用从Ubuntu衍生而来的发行版,比如Mint),你可能有交换文件,这个bug可能会破坏整个根文件系统。

然而Torvalds的警告很重要,并不仅限于个人用户对发行候选版本内核所做的事情。更为严峻的是,内核开发人员可能会将一个非常严重的bug保留到以后。

我想确保没有人使用该5.12-rc1标记开启新的主题分支。我知道有几位开发人员往往这样:“OK,rc1已发布,我将所有开发工作都放入到该合并窗口中,现在我将快速前进到rc1,将其用作下一个版本的基础。”这回别这么做。由于你拥有通用分区设置,它可能对你来说效果很好,但是对于可能最终将该区域一分二为的其他人来说,它到头来会是糟糕的基础。

这也引出了我自己向其他Linux用户经常发出的一个警告:别盲目地使用尚未经过充分测试的二流代码。Linux内核发行候选版本通常非常可靠,因此谁都忍不住想尽早体验一把新功能,但是这么做可能会带来非常严重的后果。如果当初先等代码可以进入到生产环境,或许可以避免许多后果。