저는 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
"강제" 기능은 일반적인 종료 프로세스를 건너뛰고 바로 하드웨어 재부팅을 진행합니다.