이상하게도
reboot을 하면 reboot이 되어야지
reboot은 안되고 shutdown만 되는겁니다.
이상하지요...kernel 을 의심해 봅니다.
그런데 더 이상한 것은 ramdisk에서 reboot을 입력할 경우에만 shutdown되는 겁니다.
아하.
부팅될 때 언놈이 뭔짓(?) 을 하는구나...
man페이지에서 reboot 명령을 찾아보니
reboot이란 놈은 reboot 과 shutdown 기능을 하고 있답니다.
reboot(8) reboot(8)
NAME
reboot, halt, poweroff - reboot or stop the system
SYNOPSIS
reboot [OPTION]...
halt [OPTION]...
poweroff [OPTION]...
DESCRIPTION
These programs allow a system administrator to reboot, halt or poweroff the system.
When called with --force or when in runlevel 0 or 6, this tool invokes the reboot(2) system
call itself and directly reboots the system. Otherwise this simply invokes the shutdown(8)
tool with the appropriate arguments.
Before invoking reboot(2), a shutdown time record is first written to /var/log/wtmp
runlevel이 0 혹은 6이거나 --force 옵션을 주면 reboot을 한다고 적혀있습니다.
잠깐 생각좀 해 봅시다...
생각....
생각...
runlevel이라는 키워드에 주목을 해 보죠.
마구 의심됩니다요.
runlevel이 현재 몇으로 설정되어 있나....?
$ runlevel
Unknown
이런.
Unknown이래...
inittab을 열어보자.!!
<inittab>
# /etc/inittab
#
# Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
#
# Note: BusyBox init doesn't support runlevels. The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id == tty to run on, or empty for /dev/console
# runlevels == ignored
# action == one of sysinit, respawn, askfirst, wait, and once
# process == program to run
...중략...
null::shutdown:/root/sys_shutdown.sh
...중략....
아뿔사...
BusyBox님 께서 runlevel을 무시한다고 하십니다요.
그리고 어떤 온달님이 shutdown 액션을 하면 sys_shutdown.sh 를 실행하게 해 두었습니다.
온달님의 의도가 무엇이었던 간에 지금 문제는 ramdisk에서 reboot을 하면 shutdown된다는 것!!
핫스팟은 빨간색으로 표시한 영역입니다.
reboot을 실행했는데 왜 shutdown이 호출되지? 하는 의문이 생깁니다.
답은 아까 reboot의 man페이지에서 보았던 내용 중에 있습니다.
다시 한번 보시죠.
When called with --force or when in runlevel 0 or 6, this tool invokes the reboot(2) system
call itself and directly reboots the system. Otherwise this simply invokes the shutdown(8)
tool with the appropriate arguments.
runlevel이 0, 6이 아니면 shutdown이 호출된답니다. -_-;
이제 모든 의문이 풀렸습니다.
문제의 원인을 정리하자면 다음과 같습니다.
1. runlevel을 무시하는 BusyBox를 사용하고있었다.
-> 그러므로 운이 좋으면 reboot되고 아니면 shutdown되었다.
2. 혹은, initrd로 부팅을 하면 runlevel이 0, 6이 아닌 상태가 된다.
-> reboot -f 는 정상동작 하였다.
3. shutdown시 sys_shutdown.sh 가 실행되었다.
-> 사실, 이 스크립트안에 system을 완전 halt시키는 코드가 들어있었다. 빼도박도 못하게... 온달님 나빠 -_-;
마치기 전에..
누군가 캐삽질 시키려거든 이렇게 코딩하십시오.
온달님. 화이팅 -_-;