[步骤] Linux 内核的修复

正文:

步骤一:挂载官方镜像

(步骤略)

步骤二:登录拯救模式

2.1 选择通过光盘启动

(步骤略)

2.2 进入拯救模式

(步骤略)

2.3 登录拯救模式

rescue login:root

步骤三:在救援模式确定系统的根 “/” 目录分区

(步骤略)


补充:
1) 物理分区可以使用 lsblk 命令、fdisk -l 或 cat /proc/partitions 命令辅助确定
2) 逻辑分区还可以可以使用 pvs 命令、lvs 命令或 lvdisplay 命令辅助确定

步骤四:在救援模式将系统的分区挂载到救援模式的 /mnt 目录

4.1 在救援模式将系统的根 “/” 分区挂载到救援模式的 /mnt 目录

tty1:rescue:~ # mount <root spartition> /mnt


补充:
1) 如果是物理分区,系统的根 “/” 分区就在救援模式的 /dev/ 目录里,例如救援模式的 /dev/sda1
2) 如果是逻辑分区,Rocky Linux & RHEL 的系统根 “/” 分区就是救援模式里的 /dev// 例如救援模式里的 /dev/vg/lv,openSUSE & SLES 的系统根 “/” 分区就是救援模式里的 /dev/mapper/- 例如救援模式里的 /dev/mapper/vg-lv

4.2 在救援模式将救援模式的 /dev 目录关联到救援模式的 /mnt/dev 目录

tty1:rescue:~ # mount --rbind /dev /mnt/dev


补充:
1) 此时所有对救援模式的 /mnt/dev 目录的访问都会变成对救援模式的 /dev 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.3 在救援模式将救援模式的 /proc 目录关联到救援模式的 /mnt/proc 目录

tty1:rescue:~ # mount --rbind /proc /mnt/proc


补充:
1) 此时所有对救援模式的 /mnt/proc 目录的访问都会变成对救援模式的 /proc 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.4 在救援模式将救援模式的 /sys 目录关联到救援模式的 /mnt/sys 目录

tty1:rescue:~ # mount --rbind /sys /mnt/sys


补充:
1) 此时所有对救援模式的 /mnt/sys 目录的访问都会变成对救援模式的 /sys 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.5 在救援模式将救援模式的 /run 目录关联到救援模式的 /mnt/run 目录 (选做)

tty1:rescue:~ # mount --rbind /run /mnt/run

(补充:此时所有对救援模式的 /mnt/run 目录的访问都会变成对救援模式的 /run 目录的访问)

步骤五:将当前的根 “/” 目录从救援模式的根 “/” 目录切换到系统的根 “/” 目录

5.1 将当前的根 “/” 目录从救援模式的根 “/” 目录切换到系统的根 “/” 目录

tty1:rescue:~ # chroot /mnt

(补充:这里以 /mnt 作为系统根 “/” 目录为例)

5.2 在系统模式挂载所有需要开机自动挂载的目录

bash-4.3# mount -a

5.3 在系统模式确认当前根 “/” 目录下的目录

bash-4.3# ls
bin boot dev home lib lib64 mnt opt proc root run sbin selinux srv sys tmp usr var

(补充:这里显示的是常见的 Linux 根 “/” 目录 下的目录)

步骤六:重装 /boot 目录

6.1 在救援模式创建 /mnt/bin 目录

tty1:rescue:~ # mkdir /mnt/bin

6.2 在救援模式挂载官方镜像

6.2.1 在救援模式创建用于挂载镜像的 /media 目录
tty1:rescue:~ # mkdir /media
6.2.2 在救援模式挂将官方镜像挂载到 /media 目录
tty1:rescue:~ # mount /dev/dvd /media

6.3 在救援模式安装 kernel-default 软件

6.3.1 在救援模式拷贝 kernel-default 的 RPM 文件 (软件包) 到当前目录
tty1:rescue:~ # cp /media/suse/x86_64/kernel-default-3.10.0-693.el7.x86_64.rpm .

(补充:这里以拷贝 /media/suse/x86_64/kernel-default-3.10.0-693.el7.x86_64.rpm 为例)

6.3.2 在救援模式安装 kernel-default 的 RPM 文件 (软件包)
tty1:rescue:~ # rpm -ivh kernel-default-3.10.0-693.el7.x86_64.rpm

(补充:这里以安装 /media/suse/x86_64/kernel-default-3.10.0-693.el7.x86_64.rpm 为例)

6.4 将 GRUB2 安装到对应硬盘

6.4.1 在系统模式确定系统的 GRUB2 目录分区

(步骤略)


补充:
1) 物理分区可以使用 lsblk 命令、fdisk -l 或 cat /proc/partitions 命令辅助确定
2) 逻辑分区还可以可以使用 pvs 命令、lvs 命令或 lvdisplay 命令辅助确定

6.4.2 在系统模式修复 GRUB2
bash-4.3# grub2-install <disk which GRUB2 in>

6.5 生成 /boot/grub2/grub.cfg

bash-4.3# grub2-mkconfig -o /boot/grub2/grub.cfg

步骤七:重启系统

7.1 从当前系统的根 “/” 目录切换回救援模式的根 “/” 目录

bash-4.3# exit

7.2 重启系统

tty1:rescue:~ # reboot

补充:boot 分区的文件系统损坏的情况

如果以上步骤都不起作用,且 /boot 是单独分区的话,则可能是 boot 分区的文件系统损坏,可以尝试以下补充:

1) 重复本文步骤五和之前步骤的内容
2) 将 /boot 目录里的内容全部拷贝出来
3) 取消挂载 /boot 目录的分区
4) 将挂载 /boot 目录的分区重新格式化成 ext4 格式
5) 格式化后分区的 UUID 会改变,所以需要更新 /etc/fstab 文件中挂载 /boot 目录分区的 UUID
6) 将格式化后的分区重新挂载 /boot 目录
7) 将刚刚从 /boot 目录拷贝出来的内容拷贝回 /boot 目录
8) 重复此文的步骤六

(注意:不建议使用 Btrfs 文件系统给 /boot 目录分区)

参考文献:

https://www.suse.com/support/kb/doc/?id=000018770

[步骤] Wake On Lan (WOL) 功能的开启 ( Rocky Linux & RHEL 版)

步骤一:在 BIOS 开启 Wake On Lan (WOL) 功能

(步骤略)

步骤二:在系统开启 Wake On Lan (WOL) 功能

2.1 确保 net-tools 已经安装

# yum install net-tools

2.2 查看网卡的 Wake On Lan (WOL) 功能状态

2.2.1 Wake On Lan (WOL) 功能状态列表

1) p, Wake on PHY activity
2) u, Wake on unicast messages
3) m, Wake on multicast messages
4) b, Wake on broadcast messages
5) a, Wake on ARP
6) g, Wake on MagicPacket™
7) s, Enable SecureOn™ password for MagicPacket™
8) d, Disable (wake on nothing). This option clears all previous options

2.2.2 查看网卡的 Wake On Lan (WOL) 功能状态
# ethtool enp16s0
Settings for enp16s0:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	Supported pause frame use: Symmetric
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	Advertised pause frame use: Symmetric
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Auto-negotiation: on
	Port: Twisted Pair
	PHYAD: 1
	Transceiver: internal
	MDI-X: off (auto)
	Supports Wake-on: pumbg
	Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
	Link detected: yes


补充:
1) 这里以使用 enp16s0 网卡开启 Wake On Lan (WOL) 功能为例
2) 这里的 Wake On Lan (WOL) 功能状态是 g

2.3 临时开启 Wake On Lan (WOL) 功能

# ethtool -s enp16s0 wol p

(补充:这里以给 enp16s0 网卡开启 Wake On Lan (WOL) 功能为例)

2.4 永久开启 Wake On Lan (WOL) 功能

# vi /etc/sysconfig/network-scripts/ifcfg-enp16s0

添加以下内容:

......
ETHTOOL_OPTS="-s ${DEVICE} wol p"

(补充:这里以给 enp16s0 网卡开启 Wake On Lan (WOL) 功能为例)

Linux 启动顺序

第一步启动:BIOS/UEFI

BIOS (Basic Input Output System) 即基本输入输出系统。

UEFI (Unified Extensible Firmware Interface) 即可扩展固件接口。

它们的主要作用是为计算机提供直接、底层的硬件控制和设置。UEFT 是 BIOS 的升级替代方案。

第二步启动:MBR/GPT

MBR (Master Boot Record) 即主引导记录。MBR 通常和 BIOS 搭配,最大分区容量不能超过 2T,最多可以有 3 个主分区,1 个扩展分区,不过扩展分区里可以有多个逻辑分区。

GPT (GUID Partition Table) 即全局唯一标识分区表。GPT 通常和 UEFI 搭配。

它们都是读取硬盘时最先读取的分区,里面有各自的启动代码。

第三步启动:GRUB2

GRUB2 (GRand Unified Bootloader version 2) 即多操作系统启动程序,可以选择系统分区上不同的系统内核,同时也可以向启动的内核传递参数。

第四步启动:initrd/Kernel

initrd (init ramdisk) 即初始化内存盘,作用是:
1) 提供开机必备的单 kernel 文件 (vmlinuz) 没有提供的驱动模块。
2) 通过引导加载程序加载内存,将内存视为临时根 “/” 目录,从中运行程序,之后再将根 “/” 目录转移到硬盘上真正的根 “/” 目录上。


注意:系统启动 initrd 的时间默认上限是 90 秒钟,如果 initrd 加载的时间超过 90 秒钟,则系统会报以下错误:

Warning: dracut-initqueue timeout - starting timeout scripts

(补充链接:Linux 解决启动时,某个盘挂不上或者报错 “Warning: dracut-initqueue timeout – starting timeout scripts”

第五步启动:systemdprocess

systemdprocess,即启动各类程序和进程。

[命令] Linux 命令 uname (显示系统信息)

内容一:uname 命令的格式

# uname <option>

内容二:uname 命令的选项

1) -a 或者 –all,显示所有系统信息

(补充:如果系统处理器类型和系统硬件平台处于未知状态则不显示)

2) -s 或者 –kernel-name,显示系统内核
3) -n 或者 –nodename,显示系统节点名称
4) -r 或者 –kernel-release,显示系统内核发布版本
5) -m 或者 –machine,显示系统硬件名称
6) -p 或者 –processor,显示系统处理器类型
7) -i 或者 –hardware-platform,显示系统硬件平台
8) –help,显示帮助信息
9) –version,显示 uname 命令版本