前言:软重启,软关机,硬重启,硬关机中的软指的是用命令值型操作,硬指的是直接通过电源硬件操作,软关机中的halt和软重启中的reboot工作流程也基本相同。

测试建议主要针对软重启做测试,硬重启目前没有办法保障文件系统的完整性

文件系统状态在崩溃后的不一致的问题,目前我们上层业务对此问题关注度不大,像做芯片的同事,他们单片机是随时可能掉电的,他们是要保障闪存中的状态是正确的(不能状态中某几个字段是上次的,某几个是这次的),他们解决此类问题的办法一般有两种,第一种是FSCK(硬盘扫描),这种办法耗时较长(几个小时),并且现在都是日志文件系统,所以该方法已被弃用,另一种就是jouranling(核心思想就是wal预写机制,事物和文件系统一样都需要保证一致性,就是在闪存中额外开辟空间,记录预写日志)


特征

软重启 (Reboot)

硬重启 (Cold Reboot)

是否关闭电源



系统状态

保留,不完全关闭

完全关闭并重新初始化

服务和进程

停止并重新启动

停止并重新启动

文件系统状态

不完全卸载,可能保留某些缓存

完全卸载,重新加载

操作过程

通过操作系统重启命令触发

通过硬件电源关闭和重新启动触发

速度

相对较快

取决于硬件,通常较慢

环境变量和会话状态

保留

丢失

用例

希望继续运行现有任务的情况

需要完全关闭和初始化系统的情况

什么是linux的软硬重启

一句话总结:软重启是通过系统命令(多了几个步骤:通知cpu不要干活了,开始杀进程,文件系统赶紧写,最后停止内核),硬重启是通过物理操作(多了几个步骤:bios引导和自检过程)

Linux 操作系统支持软重启和硬重启两种不同的重启机制,以下是它们的流程和简要解释:

软重启(Soft Reboot):

软重启是通过操作系统或软件来重新启动系统的一种方法。它通常涉及到重新初始化操作系统,而不需要关闭服务器的电源。软重启的主要步骤包括:

  1. 用户触发:管理员或用户执行重启命令,如 rebootshutdown -r now,或使用系统管理工具执行软重启操作。
  2. 操作系统关机:操作系统开始关闭当前运行的进程,释放资源,卸载文件系统等。用户会话将被终止,新登录会话将被禁止。
  3. 重新初始化:操作系统重新初始化,重新加载内核和驱动程序。
  4. 重新启动:系统重新启动,引导到操作系统。

注:

按下服务器的电源按钮属于软关机,服务器会执行正常的关机操作,关闭操作系统,停止运行中的应用程序和服务,并关闭硬件。


硬重启(Hard Reboot):

硬重启是通过物理操作来重新启动系统,通常是通过按下服务器的电源按钮或切断服务器的电源,然后再次通电。硬重启的主要步骤包括:

  1. 物理操作:管理员或用户执行物理操作,如切断服务器的电源
  2. 服务器关机:服务器电源被关闭,系统立即停机。
  3. 重新启动:再次通电后,服务器启动自检和引导过程。操作系统重新初始化,重新加载内核和驱动程序。

需要注意的是,硬重启通常是作为最后的手段,用于解决系统崩溃或无响应的情况,因为它可能导致数据损坏或文件系统问题。软重启通常更安全,因为它尝试正常关闭系统,以确保数据的一致性和系统的稳定性。

在生产环境中,执行重启操作前,请务必备份重要数据,确保数据的完整性,并谨慎考虑重启操作的影响。同时,确保按照操作系统的最佳做法和硬件制造商的建议来执行重启操作,以减少潜在的风险。


linux软硬重启的流程图

软重启

Linux软硬重启机制_文件系统

硬重启


Linux软硬重启机制_重新启动_02

软硬重启的区别

断电重启(硬重启):

  1. 停电:硬重启是通过切断系统的电源,然后重新上电来实现的。这将导致整个系统立即停电。
  2. 电源断开:当电源被切断时,所有系统的电路和电源都将关闭,包括CPU、内存、存储设备等。
  3. 初始化:一旦电源重新连接,计算机的BIOS(Basic Input/Output System)将执行POST(Power-On Self-Test)自检,并初始化系统硬件
  4. 引导:BIOS将启动引导设备(通常是硬盘或SSD),以加载操作系统。这个引导过程通常包括硬件自检、启动加载程序(如GRUB)、内核加载和文件系统挂载。
  5. 操作系统启动:一旦引导完成,操作系统将启动并开始运行。

reboot重启(软重启):

  1. 软重启命令:通过执行reboot命令或在操作系统中选择重新启动选项来执行软重启。这个过程是由操作系统控制的。
  2. 停止进程:在软重启期间,操作系统会优雅地停止正在运行的进程,关闭文件系统,并将所有未保存的数据刷新到磁盘。
  3. 系统内核保持运行:在软重启期间,计算机的硬件和内核仍然保持运行状态。只有用户空间进程被重新启动
  4. 重新引导:在软重启期间,操作系统将重新加载内核,但硬件保持打开状态。这是与硬重启的关键区别。
  5. 操作系统重新启动:一旦内核重新加载,操作系统会再次启动,并重新初始化用户空间进程。


内核不完全停止:

内核本身通常不会被停止或卸载。相反,它会继续运行,但某些系统服务和应用程序可能会在重新启动期间重新初始化。这有助于加速重新启动过程,因为内核和核心系统状态保持不变,无需重新加载。


总的来说,硬重启是通过切断电源并重新上电来实现的,而软重启是通过操作系统控制重新启动,而不涉及切断电源。硬重启会导致整个系统的完全关闭和重新启动,而软重启只涉及操作系统和用户空间进程的重启。在大多数情况下,软重启是更安全和更温和的重启方式,因为它可以避免数据丢失和文件系统损坏的风险。


重启操作命令

shutdown halt poweroff init0区别

一句话总结:halt调用的是shutdown -h,poweroff是halt的链接,reboot和halt的工作流程类似,包括init它们都是软关机或者软重启


halt在特殊的嵌入式系统中,只是将系统停止,不关闭电源,在linux发型版中halt配置为执行完全的系统关闭和关闭电源操作。


命令

主要用途

影响

示例

备注

poweroff

完全关闭系统并关闭电源

- 停止并关闭所有正在运行的进程<br> - 卸载文件系统<br> - 关机操作

sudo poweroff 或 sudo shutdown -h now

确保系统彻底关闭,适用于关闭电源的情况

halt

关机操作

- 停止并关闭所有正在运行的进程<br> - 不一定关闭电源

sudo halt

行为可能因系统而异,不一定关闭电源

reboot

重启操作

- 停止并关闭所有正在运行的进程<br> - 卸载文件系统<br> - 重新启动操作

sudo reboot 或 sudo shutdown -r now

用于重启系统

shutdown

关机或重启操作

- 停止并关闭所有正在运行的进程<br> - 卸载文件系统<br> - 关机或重启操作

sudo shutdown -h now (关机) 或 sudo shutdown -r now (重启)

可以用于关机或重启操作

init 0

切换到运行级别 0

- 停止并关闭所有正在运行的进程<br> - 卸载文件系统<br> - 关机操作

sudo init 0

在某些系统中等同于 "poweroff"

halt:halt被称为最简单的关机命令,它会通知硬件停止所有的CPU功能,执行时会杀死进程,执行sync系统调用文件系统写操作,完成后就会停止内核。

#halt -p相当于poweroff

#halt -f强制关机

#halt -i关机或重启前关闭所有网络接口

poweroff:关机同时关闭电源,会发送一个ACPI信号通知系统关机,在多用户方式下(run level3)下不建议使用。

#poweroff -f 强制关机

shutdown:关机同时关闭电源,只有拥有root权限的用户才可以执行(普通用户需要root授权),发送信号给init,使之改变运行级别(run level)来实现关机,关机或重启实质上就是运行级别的调整,所以也可以直接使用# init 0来关机,#init 6来重启。shutdown可设置广播信息来通知已登录的用户将关机,且会创建/run/nologin文件,禁止新用户登录。也就给了一定时间给给进程进行保存操作,被视为安全的关机命令。加参数时为如下意义:

#shutdown -r ###重启

#shutdown -P相当于poweroff

#shutdown -H相当于hatl

#shutdown -k不关机但是发送警告给用户

#shutdown 加时间,如# shutdown now / # shutdown 22:22可以在指定时间关机,在关机前,也可以执行#shutdown -c取消关机。

但是此指令没有-f强制参数

init:所有进程的祖先,进程号永远为1,linux系统操作中不可缺少的程序之一,所有发送TERM信号给init会终止所有用户进程、守护进程等。init定义了8个运行级别,这里相关的主要是0关机,6重启。


安全重启(reboot为例)

普通的reboot是通过busybox为入口,进入halt_main函数,然后给init进程发送SIGTERM信号,init进程接收到信号后给其他进程发送终止信号,最后调用C库函数reboot,reboot通过系统调用sys_reboot进入内核,内核将整个系统重启。其中在shell中执行reboot –f则通过halt_main直接调用C函数reboot,不经过init进程。

这里可以用systemd reboot的before做安全重启脚本,在重启之前先关闭容器,关闭kubelet docker等服务。

如果调用了安全重启脚本后还是不能正常关机,可能需要根据系统日志对业务分析,或者将卡住的程序直接喂狗(watchdog)

Linux软硬重启机制_重启_03


安全脚本demo如下:

#!/bin/bash


Set the KUBECONFIG environment variable to the location of your kubeconfig file

export KUBECONFIG=/path/to/your/kubeconfig.yaml


Gracefully drain and delete pods in each node

for node in $(kubectl get nodes --no-headers -o custom-columns=NAME:.metadata.name); do

echo "Draining node $node..."

kubectl drain $node --ignore-daemonsets --delete-local-data --force --grace-period=30

done


Delete the control plane components and etcd data (if necessary)

kubeadm reset -f


Remove Docker containers, images, and volumes (if using Docker)

docker stop $(docker ps -q)

docker rm $(docker ps -aq)

docker rmi -f $(docker images -q)

docker volume prune -f


Delete CNI network plugins (e.g., Calico, Cilium, etc.)

Example for Calico:

kubectl delete -f calico.yaml


Delete persistent volumes and claims (if needed)

Example for NFS-based storage:

kubectl delete pv --all

kubectl delete pvc --all


Delete ConfigMaps, Secrets, and other resources

kubectl delete configmaps --all

kubectl delete secrets --all

kubectl delete customresourcedefinitions --all


Finally, delete the kubeconfig file

rm $KUBECONFIG


echo "Kubernetes cluster is now safely shut down."

# stop k8s && docker


busybox入口原因:

这可能是因为BusyBox用作系统工具集的一部分,以提供基本的系统命令,包括重新启动。

BusyBox具有相对较小的二进制文件大小和资源消耗,因此适合嵌入式系统和资源受限的环境。这也使得它成为嵌入式Linux系统中的常见选择。在这种情况下,"reboot"命令只是BusyBox中的一个标准命令,用于管理系统的重新启动操作。


缺陷评审会议

序号

问题描述

问题解决

责任人

DDL

1

明确软硬重启硬标准

硬指标为硬件是否断电。


软重启是通过管理工具(控制台)或者操作系统命令触发的重启操作,断电为硬重启。这里按下服务器电源按钮可能是软重启也可能是硬重启,例如按下并释放(会触发关机操作,流程和软关机一样),按下并持续一段时间(为硬关机,强制关闭电源)

田茂维


10/23


2

软硬重启对环境变量影响

软重启不会主动清除内存中的环境变量,内存中的环境变量存储在当前的shell连接进程上,但是reboot后连接会断开

田茂维


10/23

3

什么是不完全内核重启


完全重新加载内核是指关闭当前运行的内核,并加载一个全新的内核映像,这意味着所有内核模块、驱动程序和系统状态都会被重新加载


而不完全内核重启指的是,执行一个内核级别的重启操作,该操作涉及将内核的某些部分重置为初始状态,例如清除内核数据结构等操作

田茂维


10/23


4

硬重启关闭硬件具体指什么

硬关机:关闭cpu,内存,硬盘驱动,电源单元,主板,扩展卡,风扇,其他硬件

田茂维

10/23