由四条内存引起的事故
昨天新买的四条服务器内存到了,于是早上去安装一下。
很不幸的是,关机安装完内存条后,系统起不来。第一反应是内存没有插好。
拔下所有新装的内存,先试试能不能开机,结果不能。
系统一直卡在一个光标闪烁的状态。
由于一直就很想重做这个服务器的系统,当时装的时候,忘记做LVM了,
所以这次故障也懒得修了,直接开始重做系统。
花了2个小时,把基础系统做完,重启了几遍看看有没有什么问题,一切正常。
看到内存插满主板达到256G顶值后,心里美滋滋,心想这下可以大开杀戒了。
结果下午回到家,没安装几个服务,主机就挂了。
由于我的服务器电源连接在米家的电源开关上,所以我进行了远程重新断电上电操作。
通过米家可以看到机器自动启动成功了,但是一直连不上,怕是系统又进不去了。
折腾了半天没有成功后,不得不再回去看看是什么情况。
重新接上显示器后,发现跟早上的情况一个样,目测应该是硬盘有问题。打开 BIOS 看了下,果然
一共三块硬盘,只识别出来了两块,最关键的那块带这 grub 引导的硬盘没有识别出来。
考虑到新系统上了 LVM ,我这块没有识别出来的硬盘(金士顿)和另外一块东芝的做成了一个逻辑组,
所以在考虑能不能把金士顿这块从逻辑组里踢出去。
但是我重启引导进U盘里的系统后,发现并没有金士顿那个硬盘
有点慌!既然系统间歇性能启动起来,那看来硬盘坏的不严重。
估计重启几次,肯定会有一次能挂上。在重启了三四次后,终于检测出来了。
好,既然监测出来了,让我先理顺一下目前的情况。
1.当前是金士顿(/dev/sdb1
)和东芝(/dev/sdc1
)做了一个逻辑组 /dev/vssd
2.然后在 /dev/vssd
这个逻辑组上划分了两个逻辑卷 /dev/vssd/vboot
和 /dev/vssd/vmain
3.系统有两个分区,/
挂在 /dev/vssd/vmain
上,/boot
挂在 /dev/vssd/vboot
上。
尝试了挂载 /
和 /boot
,发现 /
挂载成功,/boot
挂载失败,提示磁盘有错误。
系统目前不超过 7G 大。
情况理顺完,我们的思路也就有了。
- 把
/dev/vssd/vmain
缩小到/dev/sdc1
的大小以内, - 从
/dev/vssd
中把/dev/vssd/vboot
删除, - 把
/dev/sdb1
这个pv
从/dev/vssd
逻辑组中删除,这个时候,逻辑组里就没有金士顿硬盘了, - 在逻辑组
/dev/vssd
中再新建一个/dev/vssd/vboot
逻辑卷, - 重新调整
/dev/vssd/vmain
的大小,让其把剩余所有的空间占有, - 重新挂在
/dev/vssd/vmain
和/dev/vssd/vboot
,在/dev/vssd/vboot
上安装内核, - 重新生成
fstab
- 重新安装
Grub
到/dev/sdc
上,并生成新的grub.cfg
存储到/dev/vssd/vboot
上。
开始实施。
1.缩小 /dev/vssd/vmain
,需要先监测才能缩小
1 | w2fsck -f /dev/vssd/vmain |
执行缩小,由于我的东芝是400多G,那么我只要缩小到400G内就好了,懒得计算,取了个整 300G
1 | # 先缩小文件系统 |
三步操作如下图
2.从 /dev/vssd
中把 /dev/vssd/vboot
删除,
1 | lvremove /dev/vssd/vboot |
3.从逻辑组中移除金士顿硬盘
1 | vgreduce vssd /dev/sdb1 |
操作完可以看到逻辑组(VG)里只有一个 PV 了,并且 VG 的容量跟东芝的硬盘一样大了
4.新建 /dev/vssd/vboot
1 | lvcreate -L 200M vssd -n vboot |
5.扩容 /dev/vssd/vmain
1 | # 注意这里参数是小写L |
6.格式化 /dev/vssd/vboot
后,重新挂载
1 | mkfs.ext2 /dev/vssd/vboot |
重新安装内核
1 | pacstrap /mnt linux linux-firmware |
7.生成新的 fstab
由于 /dev/vssd/vboot
是新创建的,所以原来分区的 UUID
也就不存在了,因此需要更新 fstab
,
否则启动的时候会找不到分区。(通过截图可以看到原来的 UUID
)
1 | genfstab -U /mnt > /mnt/etc/fstab |
8.重新安装 Grub ,生成新的 grub.cfg
1 | # 进入chroot |
9.所有操作结束后,退出 chroot
,卸载所有已挂载分区,重启。