이상하게도
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


...중략...


# Stuff to do before rebooting

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시키는 코드가 들어있었다. 빼도박도 못하게... 온달님 나빠 -_-;


마치기 전에..
누군가 캐삽질 시키려거든 이렇게 코딩하십시오.
온달님. 화이팅 -_-;


+ Recent posts