运维日常1 (platform serial8250: Resource错误+/boot目录满 处理)

本问题涉及Linux系统运维,特写此文档,方便将来处理类似问题参照,也为后人提供解决方案。
本人才疏学浅,文档难免有错漏与不妥之处,欢迎与本人进行交流。

问题描述

项目硬件涉及若干个Linux工控板,早上到实验室上电后,发现使用Xshell无法连接上其中三块板卡,使用ping命令不通。使用nmap工具扫描目标ip也显示Host Down。于是怀疑是系统出了问题,即使用图形界面登录排查问题。

三块板卡症状相同,先对其中一块进行分析。上电后,设备首先进入GRUB界面。看到有很多GRUB项,共有29个,初步怀疑这可能是问题原因所在。为不同的Ubuntu16.04内核版本以及若干个Memory Check系统。

选择Ubuntu 16.04 4.15.0-112-generic的normal boot后,设备加载到[3.017529] platform serial8250: Resource字段后,卡住不动。直接断电,再重新上电,再次进入GRUB界面,选择Ubuntu 16.04 4.15.0-112-generic的recovery mode后,设备继续加载,到读取USB设备(具体字段没保存,也忘了)的时候继续卡住不动。只能继续断电,寻找其他的解决方案。

再次重新上电,在GRUB界面选择最下面的Ubuntu 16.04 4.15.0-45-generic的normal boot,设备成功启动进入验证界面。弹出对话框“系统出现问题,是否发送问题报告”,且光标变成叉状。点击“否”后,光标恢复正常,再次弹出对话框“系统出现问题,是否发送问题报告”。于是查看了详细的日志报告。为/boot 目录已写满。

使用df -h命令查看磁盘使用量,结果为

udev            3.9G     0  3.9G    0% /dev
tmpfs           787M  9.3M  778M    2% /run
/dev/sda5        36G   21G   13G   62% /
tmpfs           3.9G  168K  3.9G    1% /dev/shm
tmpfs           5.0M  8.0K  5.0M    1% /run/lock
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda6        93M  1.6M   85M    2% /d1
/dev/sda10      969M  1.3M  902M    1% /d5
/dev/sda8       380M  2.3M  354M    1% /d3
/dev/sda9       772M  808K  715M    1% /d4
/dev/sda7       190M  1.6M  175M    1% /d2
/dev/sda2       1.9G  1.4G  348M   81% /home
/dev/sda1       464M  453M     0  100% /boot
tmpfs           787M   44K  787M    1% /run/user/1000
overlay          36G   21G   13G   62% /var/lib/docker/overlay2/4bb03fc3532859aba272a19f7dc196a7cb78895e390b7b68a23611c5746643c4/merged
shm              64M     0   64M    0% /var/lib/docker/containers/5b4633ddc35f1caf1cf82532dbf4be70a589430104a2605ab3de4b74821385ca/mounts/shm
overlay          36G   21G   13G   62% /var/lib/docker/overlay2/e4412fc8db8bdf88265cfaa376f2f2793f04f216a04f9096ea35ccdaf012dbe2/merged
shm              64M     0   64M    0% /var/lib/docker/containers/969882567b3b87403667ec094723972a26e52e4cfafe9f2572d61224fa4a4d17/mounts/shm
tmpfs           787M     0  787M    0% /run/user/0

于是想到今天同时三块板卡出现了该情况,原因可能是系统自动更新内核开启,且/boot目录分配空间过少,导致该目录写满报错。在图形界面下查看右上角齿轮图标,选择“设置”->“软件与更新”选项,确认了系统的确启用了自动更新,且频率为每天,这使我倒吸一口冷气,在追求极致稳定性的生产环境下自动更新是绝对不允许的。经查阅资料,可以在控制台修改自动更新选项:

使用vim /etc/apt/apt.conf.d/10periodic指令进入配置文件修改界面

默认配置文件为:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";

将其修改为

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";

可取消自动更新。

接下来处理无法新版本内核自动启动且/boot目录写满的问题。想到一个可行的解决方案:配置/etc/default/grub的启动项,将其设置为老版内核版本,同时删掉/boot目录下新版内核的内容。在/boot目录下使用指令ll,查看到为以下内容:

root@pc-desktop:/boot# ll
总用量 454080
drwxr-xr-x  4 root root     3072 728 15:48 ./
drwxr-xr-x 30 root root     4096 726 15:02 ../
-rw-r--r--  1 root root   217457 511 22:08 config-4.15.0-101-generic
-rw-r--r--  1 root root   217481 65 00:56 config-4.15.0-106-generic
-rw-r--r--  1 root root   217481 612 13:11 config-4.15.0-107-generic
-rw-r--r--  1 root root   217481 710 13:51 config-4.15.0-112-generic
-rw-r--r--  1 root root   217027 130  2019 config-4.15.0-45-generic
-rw-r--r--  1 root root   217468 1127  2019 config-4.15.0-72-generic
-rw-r--r--  1 root root   217503 1218  2019 config-4.15.0-74-generic
-rw-r--r--  1 root root   217503 212  2020 config-4.15.0-88-generic
-rw-r--r--  1 root root   217465 229 01:24 config-4.15.0-91-generic
-rw-r--r--  1 root root   217465 41 13:44 config-4.15.0-96-generic
-rw-r--r--  1 root root   217466 423 10:36 config-4.15.0-99-generic
drwxr-xr-x  5 root root     1024 415 08:54 grub/
-rw-r--r--  1 root root 55855274 1217  2019 initrd.img-4.15.0-45-generic
-rw-r--r--  1 root root 55894198 1217  2019 initrd.img-4.15.0-72-generic
-rw-r--r--  1 root root 55898990 36 09:47 initrd.img-4.15.0-74-generic
-rw-r--r--  1 root root 55909404 36 09:48 initrd.img-4.15.0-88-generic
-rw-r--r--  1 root root 55909376 327 09:49 initrd.img-4.15.0-91-generic
-rw-r--r--  1 root root 55902357 415 08:54 initrd.img-4.15.0-96-generic
drwx------  2 root root    12288 85  2019 lost+found/
-rw-r--r--  1 root root   182704 128  2016 memtest86+.bin
-rw-r--r--  1 root root   184380 128  2016 memtest86+.elf
-rw-r--r--  1 root root   184840 128  2016 memtest86+_multiboot.bin
-rw-------  1 root root  4070409 511 22:08 System.map-4.15.0-101-generic
-rw-------  1 root root  4071267 65 00:56 System.map-4.15.0-106-generic
-rw-------  1 root root  4071450 612 13:11 System.map-4.15.0-107-generic
-rw-------  1 root root  4071496 710 13:51 System.map-4.15.0-112-generic
-rw-------  1 root root  4048670 130  2019 System.map-4.15.0-45-generic
-rw-------  1 root root  4064436 1127  2019 System.map-4.15.0-72-generic
-rw-------  1 root root  4066237 1218  2019 System.map-4.15.0-74-generic
-rw-------  1 root root  4067466 212  2020 System.map-4.15.0-88-generic
-rw-------  1 root root  4067536 229 01:24 System.map-4.15.0-91-generic
-rw-------  1 root root  4068326 41 13:44 System.map-4.15.0-96-generic
-rw-------  1 root root  4069610 423 10:36 System.map-4.15.0-99-generic
-rw-------  1 root root  8200672 513 04:13 vmlinuz-4.15.0-101-generic
-rw-------  1 root root  8199584 610 01:54 vmlinuz-4.15.0-106-generic
-rw-------  1 root root  8198944 613 22:08 vmlinuz-4.15.0-107-generic
-rw-r--r--  1 root root  8128088 85  2019 vmlinuz-4.15.0-45-generic
-rw-------  1 root root  8185592 1127  2019 vmlinuz-4.15.0-72-generic
-rw-------  1 root root  8187192 1219  2019 vmlinuz-4.15.0-74-generic
-rw-------  1 root root  8193496 212  2020 vmlinuz-4.15.0-88-generic
-rw-------  1 root root  8193432 31 18:28 vmlinuz-4.15.0-91-generic
-rw-------  1 root root  8191544 47 00:08 vmlinuz-4.15.0-96-generic
-rw-------  1 root root  8202744 429 02:14 vmlinuz-4.15.0-99-generic

于是使用简单的rm命令分辨删除config文件,initrd.img文件,System.map文件和vmlinuz文件。(注意千万别删除了自己想保留的版本,否则只能重装系统了)

再使用grep menuentry /boot/grub/grub.cfg指令来查看可使用的启动项,

输出如下:

root@pc-desktop:/boot# grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
submenu 'Ubuntu 高级选项' $menuentry_id_option 'gnulinux-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu,Linux 4.15.0-96-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-96-generic-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-96-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-96-generic-init-upstart-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-96-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-96-generic-recovery-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu,Linux 4.15.0-91-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-91-generic-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-91-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-91-generic-init-upstart-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-91-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-91-generic-recovery-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu,Linux 4.15.0-88-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-88-generic-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-88-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-88-generic-init-upstart-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-88-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-88-generic-recovery-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu,Linux 4.15.0-74-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-74-generic-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-74-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-74-generic-init-upstart-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-74-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-74-generic-recovery-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu,Linux 4.15.0-72-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-72-generic-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-72-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-72-generic-init-upstart-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-72-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-72-generic-recovery-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu,Linux 4.15.0-45-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-45-generic-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-45-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-45-generic-init-upstart-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
	menuentry 'Ubuntu, with Linux 4.15.0-45-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-45-generic-recovery-b475d3af-b5ea-4caf-a539-b5b1778920fa' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {

/etc/default/grub下的GRUB_DEFAULT=0修改为: GRUB_DEFAULT='gnulinux-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa>gnulinux-4.15.0-45-generic-advanced-b475d3af-b5ea-4caf-a539-b5b1778920fa'

其格式为GRUB_DEFAULT='%Ubuntu高级选项上一行的带uuid的内核序列号的字段内容>%下面menuentry表内欲设置启动的ubuntu内核版本带uuid的内核序列号的字段内容'

然后使用指令update-grub指令来更新最新的grub配置。

重启动发现系统正常启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值