开篇废话
发现之前做的系统模版好久没更新了,这里来闲得蛋疼更新一下。
另外此文章就是个排错指南,主要是展示一下我的思路为主。
主要是应该也没人碰见这么奇怪的问题
遇到问题
之前一直没有做的原因是 grub 不知道为什么死活都报错,提示
unknown filesystem
于是我去搜索了一下,发现是 ext4 版本的特性 grub 可能还不支持的原因导致 grub 不认识这个文件系统。
参考 Arch Linux wiki
这个错误也可能是因为一个 ext4 文件系统拥有 GRUB 不支持的特性:
- large_dir - 不被支持。
- metadata_csum_seed - GRUB 2.11 将会支持(commit)。
经过检查,发现确实是为 ext4 分区带上了 metadata_csum_seed
导致的问题,而目前 debian10/11 的 grub 版本都在 2.05,因此 grub 没能安装上。
解决方案
强行安装 2.05 版本的 grub
评价是不用试了,grub 不认识就是不认识…
手动安装更新版本 grub
此方案被我废弃,因为用户可能会自己装 grub,我们做模版原则都是最小改动系统。
这样强行 break 软件(特别是 deb 系列的 apt 我就根本不会修软件依赖)感觉还是太奇妙。
因此放弃。
tune2fs
tune2fs -O ^metadata_csum_seed /dev/sda1
grub 测试是可以正常安装的,但是系统启动后会因为一些奇怪的错误什么的变成 ro ,因此继续放弃。
因为是去除特性,但是我们没有完整的过一遍同步之类的,所以出现问题感觉也很正常。
也许 ro 后运行 fsck 什么的重新检查一遍就行。
但是还是不能最小地改系统,因此此方案也抛弃。
/etc/mke2fs.conf
这里又找了个配置方法,就是编辑 /etc/mke2fs.conf 文件,
我们编辑,手动去掉 ,metadata_csum_seed
这样我们执行 mkfs 的时候就不会带上 metadata_csum_seed 特性了,经过测试是正常的。
还没有结束!
上面这些个特性的话,肯定还是越新越好,因此我们最好是通过模版里面的文件直接复制过去,按照常理来说各个发行版这些 bug 还是能解决的,而我们碰到这个 bug 纯粹是因为我们执行 mkfs 的系统和实际的系统不一样而导致的。
这里给个 ubuntu 模版打包的例子:
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64-root.tar.xz -O1.tar.xz
rm /etc/mke2fs.conf
tar -xvf /tmp/1.tar.xz -C / -k etc/mke2fs.conf
mkfs.ext4 /dev/sda1
这样就差不多解决了….
总结
这简单来说就是软件版本的小问题,不过还是困扰了我好几个月,今天终于解决了还是挺开心的。
然后大概两三年前遇到过类似的情况,一台服务器的各种软件版本太老(毕竟是 Centos6),需要开个不带 journal (tune2fs -O ^has_journal) 的 ext4 才能让模版正常跑,目测是因为软件不支持 journal 特性导致文件写不进去或者读取不了….
完