커널 오류가 발생한 경우 SSH를 통해 재부팅하는 "최후의 수단" Linux 터미널 명령이 있습니까?

커널 오류가 발생한 경우 SSH를 통해 재부팅하는 "최후의 수단" Linux 터미널 명령이 있습니까?

저는 Ubuntu 10.04가 설치된 작은 서버를 가지고 있으며 다른 컴퓨터에서 서버를 운영하고 ssh있으며 이를 사용하여 nfs파일을 공유하려고 합니다. 이는 기본적으로 클라이언트 중 하나가 제거되고 nfs-kernel-server서버를 종료할 때까지 작동합니다. 멈추는 것이 옳은 것 같지만:

$ sudo service nfs-kernel-server stop
 * Stopping NFS kernel daemon                                                     [ OK ] 
 * Unexporting directories for NFS kernel daemon...                               [ OK ] 

...로그에 다음과 같은 내용이 표시됩니다.

Feb  5 11:50:17 user init: statd main process (3806) killed by KILL signal
Feb  5 11:50:17 user init: statd main process ended, respawning
Feb  5 11:50:17 user init: idmapd main process (3808) killed by KILL signal
Feb  5 11:50:17 user init: idmapd main process ended, respawning
Feb  5 11:50:17 user statd-pre-start: local-filesystems started
Feb  5 11:50:17 user sm-notify[3815]: Already notifying clients; Exiting!
Feb  5 11:50:17 user rpc.statd[3830]: Version 1.1.6 Starting
Feb  5 11:50:17 user rpc.statd[3830]: Flags: 

...이는 일부 nfs 관련 프로세스가 중지하고 다시 생성한다고 해도 상관하지 않는다는 의미입니다. 이 시점에서 다시 ssh를 통해 실행하려고 하면 sudo service nfs-kernel-server start명령이 멈추고 /var/log/syslog다음과 같은 결과가 나타납니다.

Feb  5 11:43:55 user mountd[2045]: authenticated mount request from 192.168.0.2:1005 for /media/disk (/media/disk)
Feb  5 11:45:19 user mountd[2045]: Caught signal 15, un-registering and exiting.
Feb  5 11:45:19 user kernel: [27428.148368] nfsd: last server has exited, flushing export cache
Feb  5 11:45:19 user kernel: [27428.148431] BUG: Dentry d0bc8b28{i=1f6,n=} still in use (1) [unmount of vfat sdd8]
Feb  5 11:45:19 user kernel: [27428.148473] ------------[ cut here ]------------
Feb  5 11:45:19 user kernel: [27428.148481] kernel BUG at /build/buildd/linux-2.6.32/fs/dcache.c:670!
Feb  5 11:45:19 user kernel: [27428.148491] invalid opcode: 0000 [#1] SMP 
Feb  5 11:45:19 user kernel: [27428.148501] last sysfs file: /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq
...
Feb  5 11:45:19 user kernel: [27428.148807] Call Trace:
Feb  5 11:45:19 user kernel: [27428.148824]  [<c024c780>] ? vfs_quota_off+0x0/0x20
Feb  5 11:45:19 user kernel: [27428.148838]  [<c021d4fc>] ? shrink_dcache_for_umount+0x3c/0x50
Feb  5 11:45:19 user kernel: [27428.148852]  [<c020d090>] ? generic_shutdown_super+0x20/0xe0
...
Feb  5 11:45:19 user kernel: [27428.149511] EIP: [<c021d4a9>] shrink_dcache_for_umount_subtree+0x249/0x260 SS:ESP 0068:ccc6de6c
Feb  5 11:45:19 user kernel: [27428.149631] ---[ end trace 6198103bb62887ac ]---
Feb  5 11:49:53 user init: idmapd main process (838) killed by TERM signal
Feb  5 11:49:53 user init: idmapd main process ended, respawning
Feb  5 11:49:53 user rpc.statd[769]: Caught signal 15, un-registering and exiting.
Feb  5 11:49:53 user init: statd main process ended, respawning
Feb  5 11:49:53 user statd-pre-start: local-filesystems started
Feb  5 11:49:53 user sm-notify[3790]: Already notifying clients; Exiting!
Feb  5 11:49:53 user rpc.statd[3806]: Version 1.1.6 Starting
Feb  5 11:49:53 user rpc.statd[3806]: Flags: 
...

문제는 다음과 같습니다. 이 오류가 발생한 후에도 서버의 ssh서버는 (어떤 이유로든) 일반적으로 여전히 "활성" 상태이므로 다시 로그인하여 ssh프로세스를 닫으려고 시도할 수 있습니다(그리고 종료가 불가능하다는 것을 깨닫게 됩니다) /usr/sbin/rpc.nfsd 8. 교수형).

그러나 이 시점에서 SSH를 통해 재부팅을 시도하면 sudo shutdown -r now && exit서버 PC가 재부팅 프로세스를 시작하지만아니요완료하면 터미널로 이동하고 일부 오류 메시지가 표시되며 그대로 유지됩니다.:(

문제는 서버 PC가 접근하기 매우 어려운 위치에 있고 제대로 재부팅하기 위해 그곳으로 가서 Alt+SysRq + REISUB를 수행해야 한다는 것입니다(커널이 해당 키 조합에 반응하는 경우, 그렇지 않으면 하드 전원 끄기).

그래서 제 질문은 – Linux에 커널 오류가 발생하더라도 컴퓨터가 (그냥 정지/멈추는 대신) 재부팅되도록 "보장"하는 "하드 재부팅" 명령이 있습니까? - 이것을 전달할 수 있습니까 ssh? 하드 전원 끄기(즉, 전원 버튼을 10초 이상 눌러 전원을 끄는 것)와 하드 전원 켜기의 의미는 무엇입니까?

답변1

무슨 일이 있어도 시스템이 재부팅되도록 하기 위해 저는 항상 다음 순서를 수행합니다.

# echo s > /proc/sysrq-trigger
# echo u > /proc/sysrq-trigger
# echo s > /proc/sysrq-trigger
# echo b > /proc/sysrq-trigger

이를 위해서는 커널이 다음을 수행해야 합니다.

  • 블록 장치의 비상 동기화
  • 모든 파일 시스템을 읽기 전용으로 마운트
  • 다시 동기화
  • o강제로 즉시 시작하거나 종료하는 데 사용할 수도 있습니다 .

예를 들어 참조하십시오.여기이 기능을 설명하기 위해.

답변2

파일 시스템 마운트 해제, 데몬 중지 등의 정상적인 종료 프로세스를 우회해야 합니다. 여기서 중지됩니다. 프로세스를 안전하게 중지할 수 없습니다. 필요한 것은 reboot -f무엇이든 달성하고 싶은 것입니다(예: poweroff -f일부 init 시스템은 자체 명령을 가져올 수 있습니다). systemd"강제" 기능은 일반적인 종료 프로세스를 건너뛰고 바로 하드웨어 재부팅을 진행합니다.

관련 정보