2004年8月22日

リモートサーバに適したリブート時のfsck設定

某所に置いているhis.luky.orgが今朝方にハングアップしていたようである。
pingには応答するし、nmapで見ても各種開放ポートには答えようとしているようだが実際にはサービス停止していた。

リセットや電源OFF/ONをお願いしたが、復旧しないため現地に行ってみた。

ハングアップの原因は不明であるが、結果としてはブート時のfsckでオペレータ判断待ちで止まっていた。

#まぁ、想定通り。

どうせfsckを手動で行うときも-yオプションを付けてやるので、起動の都度そうするべくrcSなどをいじろうと思ってちょっと調べた。

ちなみに、his.luky.orgはDebian/GNU Linux の woodyをベースにしている。

/etc/inittabを見ると、ブート時には/etc/init.d/rcSが動くようになっている。
そこで、/etc/init.d/rcSを見ると、/etc/default/rcSを評価した後に
/etc/rcS.d/配下のスクリプトを、スクリプト名が若い順番に実行している。

etc/rcS.d/直下でgrep -r fsck *を実行すると、S10checkroot.shとS30checkfs.shが引っかかった。
S10checkroot.shは/etc/init.d/checkroot.shへのシンボリックリンクなので、実体の方を見てみると、

[前略]
. /etc/default/rcS
[中略]
#
# Check the root file system.
#
if [ -f /fastboot ] || [ $rootcheck = no ]
then
  [ $rootcheck = yes ] && echo "Fast boot, no file system check"
else
  #
  # Ensure that root is quiescent and read-only before fsck'ing.
  #
  mount -n -o remount,ro /
  if [ $? = 0 ]
  then
    if [ -f /forcefsck ]
    then
	force="-f"
    else
	force=""
    fi
    if [ "$FSCKFIX" = yes ]
    then
	fix="-y"
    else
    else
	fix="-a"
    fi
    spinner="-C"
    case "$TERM" in
        dumb|network|unknown|"") spinner="" ;;
    esac
    [ `uname -m` = s390 ] && spinner="" # This should go away
    echo "Checking root file system..."
    fsck $spinner $force $fix /
    #
    # If there was a failure, drop into single-user mode.
    #
    # NOTE: "failure" is defined as exiting with a return code of
    # 2 or larger.  A return code of 1 indicates that file system
    # errors were corrected but that the boot may proceed.
    #
    if [ $? -gt 1 ]
    then
      # Surprise! Re-directing from a HERE document (as in
      # "cat << EOF") won't work, because the root is read-only.
      echo
      echo "fsck failed.  Please repair manually and reboot.  Please note"
      echo "that the root file system is currently mounted read-only.  To"
      echo "remount it read-write:"
      echo
      echo "   # mount -n -o remount,rw /"
      echo
      echo "CONTROL-D will exit from this shell and REBOOT the system."
      echo
      # Start a single user shell on the console
      /sbin/sulogin $CONSOLE
      reboot -f
    fi
[後略]
と言うように、fsck -yにするための仕掛けも盛り込まれており、オペレータプロンプトを出すところも書かれていた。

fsck -yとするには if [ "$FSCKFIX" = yes ] が成立すればよい。
そこで、/etc/配下で grep -r FSCKFIX * を実行したところ、
/etc/default/rcSで設定していることが分かった。

現時点では、/etc/default/rcSを以下のように一番最後の1行だけnoからyesに変更している。

#
#	Defaults for the boot scripts in /etc/rcS.d
#

# Time files in /tmp are kept in days.
TMPTIME=0
# Set to yes if you want sulogin to be spawned on bootup
SULOGIN=no
# Set to no if you want to be able to login over telnet/rlogin
# before system startup is complete (as soon as inetd is started)
DELAYLOGIN=yes
# Set UTC=yes if your system clock is set to UTC (GMT), and UTC=no if not.
UTC=no
# Set VERBOSE to "no" if you would like a more quiet bootup.
VERBOSE=yes
# Set EDITMOTD to "no" if you don't want /etc/motd to be editted automatically
EDITMOTD=yes
# Set FSCKFIX to "yes" if you want to add "-y" to the fsck at startup.
FSCKFIX=yes

投稿者 his : 2004年8月22日 01:21
このエントリーのトラックバックURL: http://hoop.euqset.org/blog/mt-tb2006.cgi/599
コメント
コメントする









名前、アドレスを登録しますか?





画像の中に見える文字を入力してください。