Files
Linux/Docs/Linux触发软重启.md
offends cee91802b3
Some checks failed
continuous-integration/drone Build is failing
synchronization
2025-08-25 15:57:40 +08:00

59 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> 本文作者:丁辉
# Linux触发软重启
## 使用 SysRq 触发软重启
> 这个操作会立刻让系统重新启动,跳过正常的关机流程,包括运行关机脚本和同步磁盘等,所以在使用前确保所有重要数据已经保存。
1. 启用 SysRq 功能
> 默认情况下出于安全考虑SysRq 功能可能被部分或完全禁用。可以通过以下命令启用所有 SysRq 功能
```bash
echo 1 > /proc/sys/kernel/sysrq
```
2. 触发重启
> 通过向 `/proc/sysrq-trigger` 写入 `b` 来触发立即重启
```bash
echo b > /proc/sysrq-trigger
```
### 注意事项:
- **数据丢失**:使用 SysRq 功能触发的软重启相当于突然断电,可能导致未保存的数据丢失和文件系统损坏。
- **安全风险**:开启 SysRq 功能可能会带来安全风险,因为任何拥有物理访问权限的人都可能使用这个功能。
## 使用 kexec 重启内核的步骤如下:
1. 安装 kexec 工具
```bash
apt-get install kexec-tools
```
2. 加载新内核
> 使用 kexec 命令加载你想要启动的新内核。你需要指定内核文件和对应的初始化内存盘initrd和内核参数。
> 这里的 `/path/to/vmlinuz` 和 `/path/to/initrd.img` 需要替换为实际的文件路径。`root=/dev/sda1 ro quiet` 是内核启动参数,需要根据实际情况进行调整。
```bash
kexec -l /path/to/vmlinuz --initrd=/path/to/initrd.img --append="root=/dev/sda1 ro quiet"
```
3. 触发快速重启
> 这将跳过 BIOS/UEFI 初始化和硬件检测,直接启动新的内核。
```bash
kexec -e
```
### 注意事项:
- **数据丢失风险**:使用 kexec 重启内核,类似于正常重启,所有未保存的数据都可能丢失。确保在执行此操作前保存所有重要数据。
- **环境影响**:这种重启方式不会重新初始化硬件设备,某些由硬件状态异常引起的问题可能不会被解决。
- **兼容性和支持**:并非所有的 Linux 发行版都默认支持 kexec可能需要核实你的系统环境和内核配置。