When examining Linux system reboots at the kernel level, we encounter two distinct approaches for immediate system restarts that bypass normal shutdown procedures:
# Method 1: SysRq trigger
echo b > /proc/sysrq-trigger
# Method 2: Reboot command
reboot -n
The sysrq-trigger approach directly invokes kernel panic handling routines. This is what happens internally:
- Immediately triggers a CPU reset through arch-specific low-level code
- Completely bypasses all filesystem synchronization
- No attempt to communicate with init system
In contrast, reboot -n operates through the normal syscall path but with modifications:
SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg)
{
if (!(cmd & LINUX_REBOOT_CMD_NO_SYNC))
kernel_power_off();
Consider these examples where the difference matters:
Filesystem Corruption Risk:
On an ext4 filesystem with journaling:
$ strace reboot -n
...
sync() # Still occurs at driver level
reboot(LINUX_REBOOT_CMD_RESTART) # Final syscall
Versus sysrq-trigger which shows zero sync activity in kernel logs.
Use echo b > /proc/sysrq-trigger
when:
- Debugging kernel panics
- Testing crash recovery systems
- Emergency hardware resets
Use reboot -n
for:
- Fast restarts during development
- When some driver-level syncing is acceptable
- Scripted reboots needing partial cleanup
Behavior has evolved across kernel versions:
Kernel Version | sysrq-trigger | reboot -n |
---|---|---|
<4.10 | Full bypass | Partial sync |
4.11-5.3 | Full bypass | Driver-dependent |
5.4+ | Full bypass | Configurable via sysctl |
For emergency reboot scripts:
#!/bin/bash
# Prefer sysrq for true emergency cases
if [ "$EMERGENCY" = "true" ]; then
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
else
reboot -n
fi
When you need to force an immediate reboot on Linux systems (particularly RHEL-based distros like CentOS and Fedora), two common commands emerge:
# Method 1: Using reboot command
sudo reboot -n
# Method 2: Using sysrq trigger
echo b > /proc/sysrq-trigger
Both methods skip the normal filesystem sync operations, but with crucial differences:
- reboot -n: The
-n
flag tells the system not to explicitly callsync()
, but the kernel and storage drivers may still perform synchronization. - sysrq trigger: The 'b' command forces an immediate hardware-level reboot, bypassing all higher-level shutdown procedures.
The sysrq method operates at a lower level in the kernel's emergency management system:
# Check if sysrq is enabled (should return 1)
cat /proc/sys/kernel/sysrq
# Enable all sysrq functions temporarily
echo 1 > /proc/sys/kernel/sysrq
When to use reboot -n:
- When you need a quick reboot but want to maintain some system integrity
- For controlled testing environments
When to use sysrq trigger:
- During kernel panics when normal reboot fails
- For hardware testing that requires complete bypass of software layers
- Emergency situations where system is completely unresponsive
Both methods can lead to filesystem corruption. Always consider these alternatives first:
# Fast but safer reboot
sudo systemctl reboot --force --no-sync
# Emergency reboot with logging
echo s > /proc/sysrq-trigger # sync disks
echo u > /proc/sysrq-trigger # remount read-only
echo b > /proc/sysrq-trigger # reboot
Modern systems using systemd handle these commands differently:
# View systemd's reboot behavior
systemctl show reboot.target
# Alternative systemd emergency reboot
systemctl --force --force reboot