Dec 4, 2002

        onlsbc1: コンパクトフラッシュ上のLinuxシステムの読み出し専用化
          			---  RAMディスク(その3) #4
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               (http://www-online.kek.jp/~inoue/para-CAMAC/
                                   Work/SBC-RAM4.html)



                        高エネルギー加速器研究機構
                            素粒子原子核研究所
                         物理、オンライングループ
                                井上 栄二

	目的

            並列CAMACで使用するSBC上のLinuxシステムを、コンパクトフラッシュ上に
          構築した。 コンパクトフラッシュ上に、現在構築してあるLinuxシステムは
            通常のシステムと同じで、システムはコンパクトフラッシュに対して読み
            書きを行っている。 ここで注意すべきことは、コンパクトフラッシュには
            構造上書き込み回数に限界があるという点である。 したがって、コンパク
            トフラッシュ上のシステムは、読み出し専用として構築するのが望ましい。
	    読み出し専用化システムの構築作業をするために、256MBのコンパクトフ
	    ラッシュ上Linuxシステムを構築した。 このコンパクトフラッシュを使っ
	    て読み出し専用化システムを構築する。(その3)


	(1). 方針
	(2). ルートファイルシステムの整備
	(3). RAMディスク化の検討
	(4). /etc/rc.d/rc.sysinit の調査
	(5). /etc/rc.d/rc.sysinit の修正
	(6). ブートテスト

  --------------------------------------------------------------------


 (1). 方針

	コンパクトフラッシュは書き込み回数に限界があるので読み出し専用として使用
	するのが望ましい。 ここでは、コンパクトフラッシュを読み出し専用化する
	ために、/var、/tmp、/etcなどのRAMディスク化について検討する。 テストでは
	256MBのコンパクトフラッシュを使う。 /etc/rc.d下のスクリプト、rc.sysinit
	を修正してRAMディスク化の処理を行う。


 (2). ルートファイルシステムの整備

   (2-1).  コンパクトフラッシュ上のファイル構成

	システムインストール直後の、現在の /ディレクトリ構成は次のとおり。

[root@onlsbc1 mnt1]# df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hdc1              7360792   2217668   4769212  32% /
/dev/hda5             10475668    160168   9783352   2% /home
/dev/hda6              9685276     32828   9160460   1% /home2
/dev/hda7             10080488     32828   9535592   1% /home3
none                    152332         0    152332   0% /dev/shm
/dev/hdc1               241949    219552      9905  96% /mnt1
[root@onlsbc1 mnt1]# pwd
/mnt1
[root@onlsbc1 mnt1]# ls -l
合計 115
drwxr-xr-x    2 root     root         2048 11月 13 19:37 bin
drwxr-xr-x    3 root     root         1024 11月 13 19:40 boot
drwxr-xr-x   18 root     root        82944 11月 15 15:42 dev
drwxr-xr-x   31 root     root         3072 11月 15 15:42 etc
drwxr-xr-x    4 root     root         1024 11月 13 19:47 home
drwxr-xr-x    2 root     root         1024  6月 22  2001 initrd
drwxr-xr-x    6 root     root         3072 11月 13 19:42 lib
drwx------    2 root     root        12288 11月 13 19:12 lost+found
drwxr-xr-x    3 root     root         1024 11月 13 11:15 mnt
drwxr-xr-x    2 root     root         1024  8月 24  1999 opt
drwxr-xr-x    2 root     root         1024 11月 13 19:12 proc
drwxr-x---    2 root     root         1024 11月 13 14:15 root
drwxr-xr-x    2 root     root         3072 11月 13 19:41 sbin
drwxrwxrwt    3 root     root         1024 11月 15 15:11 tmp
drwxr-xr-x   15 root     root         1024 11月 13 19:34 usr
drwxr-xr-x   16 root     root         1024 11月 13 19:42 var
[root@onlsbc1 mnt1]#



   (2-2).  コンパクトフラッシュ上のファイル構成の変更

	/etc/rc.d/rc.sysinitファイルの中で、RAMディスク構築の作業を行うので、
	initrd実行後には /etc下のディレクトリ構造は存在していなければならない。
	図2の構成に変更する。
        
[root@onlsbc1 mnt1]# pwd
/mnt1
[root@onlsbc1 mnt1]# ls -l
合計 115
drwxr-xr-x    2 root     root         2048 11月 13 19:37 bin
drwxr-xr-x    3 root     root         1024 11月 13 19:40 boot
drwxr-xr-x   18 root     root        82944 11月 15 15:42 dev
drwxr-xr-x   31 root     root         3072 11月 15 15:42 etc
drwxr-xr-x    4 root     root         1024 11月 13 19:47 home
drwxr-xr-x    2 root     root         1024  6月 22  2001 initrd
drwxr-xr-x    6 root     root         3072 11月 13 19:42 lib
drwx------    2 root     root        12288 11月 13 19:12 lost+found
drwxr-xr-x    3 root     root         1024 11月 13 11:15 mnt
drwxr-xr-x    2 root     root         1024  8月 24  1999 opt
drwxr-xr-x    2 root     root         1024 11月 13 19:12 proc
drwxr-x---    2 root     root         1024 11月 13 14:15 root
drwxr-xr-x    2 root     root         3072 11月 13 19:41 sbin
drwxrwxrwt    3 root     root         1024 11月 15 15:11 tmp
drwxr-xr-x   15 root     root         1024 11月 13 19:34 usr
drwxr-xr-x   16 root     root         1024 11月 13 19:42 var
[root@onlsbc1 mnt1]#

[root@onlsbc1 mnt1]# mkdir ramfs
[root@onlsbc1 mnt1]# mv etc ramfs
[root@onlsbc1 mnt1]# mv tmp ramfs
[root@onlsbc1 mnt1]# mv var ramfs
[root@onlsbc1 mnt1]# 

	/etc、/tmp、/var から ramfs の下にそれぞれシンボリックリンクを張る。

[root@onlsbc1 mnt1]# ln -s ramfs/etc etc
[root@onlsbc1 mnt1]# ln -s ramfs/tmp tmp
[root@onlsbc1 mnt1]# ln -s ramfs/var var
[root@onlsbc1 mnt1]#
[root@onlsbc1 mnt1]# ls -l
合計 111
drwxr-xr-x    2 root     root         2048 11月 13 19:37 bin
drwxr-xr-x    3 root     root         1024 11月 13 19:40 boot
drwxr-xr-x   18 root     root        82944 11月 15 15:42 dev
lrwxrwxrwx    1 root     root            9 11月 20 14:16 etc -> ramfs/etc
drwxr-xr-x    4 root     root         1024 11月 13 19:47 home
drwxr-xr-x    2 root     root         1024  6月 22  2001 initrd
drwxr-xr-x    6 root     root         3072 11月 13 19:42 lib
drwx------    2 root     root        12288 11月 13 19:12 lost+found
drwxr-xr-x    3 root     root         1024 11月 13 11:15 mnt
drwxr-xr-x    2 root     root         1024  8月 24  1999 opt
drwxr-xr-x    2 root     root         1024 11月 13 19:12 proc
drwxr-xr-x    5 root     root         1024 11月 20 14:15 ramfs
drwxr-x---    2 root     root         1024 11月 13 14:15 root
drwxr-xr-x    2 root     root         3072 11月 13 19:41 sbin
lrwxrwxrwx    1 root     root            9 11月 20 14:16 tmp -> ramfs/tmp
drwxr-xr-x   15 root     root         1024 11月 13 19:34 usr
lrwxrwxrwx    1 root     root            9 11月 20 14:16 var -> ramfs/var
[root@onlsbc1 mnt1]# ls -l ramfs
合計 5
drwxr-xr-x   31 root     root         3072 11月 15 15:42 etc
drwxrwxrwt    3 root     root         1024 11月 15 15:11 tmp
drwxr-xr-x   16 root     root         1024 11月 13 19:42 var
[root@onlsbc1 mnt1]#
。

   (2-3).  /mnt1/ramfs/etc の下のシンボリックリンクのチェック

	ルートファイルシステムの構成を変更した際にシンボリックリンクが壊れた
	可能性がある。 シンボリックリンクを調べる。

[root@onlsbc1 etc]# pwd
/mnt1/etc
[root@onlsbc1 etc]# ls -l grub.conf
lrwxrwxrwx    1 root     root           22 11月 13 19:47 grub.conf -> ../boot/gr
ub/grub.conf
[root@onlsbc1 etc]#

	/etc/grub.conf のシンボリックリンクが切れてしまった。 下のディレクトリ
	もチェックしたが、シンボリックリンクが切れたのは grub.confだけであった。
	張りなおす。

[root@onlsbc1 etc]# mv grub.conf grub.conf-old
[root@onlsbc1 etc]# ln -s ../../boot/grub/grub.conf grub.conf
[root@onlsbc1 etc]# ls -l grub*
lrwxrwxrwx    1 root     root           25 11月 20 14:45 grub.conf -> ../../boot
/grub/grub.conf
lrwxrwxrwx    1 root     root           22 11月 13 19:47 grub.conf-old -> ../boo
t/grub/grub.conf
[root@onlsbc1 etc]# ls -lL grub.conf
-rw-------    1 root     root          570 11月 13 19:47 grub.conf
[root@onlsbc1 etc]#


   (2-3-1). /mnt1/ramfs/etc/httpd の下のシンボリックリンクのチェック

[root@onlsbc1 httpd]# pwd
/mnt1/etc/httpd
[root@onlsbc1 httpd]# ls -l
合計 1
drwxr-xr-x    2 root     root         1024 11月 13 19:42 conf
lrwxrwxrwx    1 root     root           19 11月 13 19:42 logs -> ../../var/log/h
ttpd
lrwxrwxrwx    1 root     root           21 11月 13 19:42 modules -> ../..//usr/l
ib/apache
[root@onlsbc1 httpd]#

        /mnt1/ramfs/etc/httpd/modules のシンボリックリンクが切れてしまった。
        張りなおす。

[root@onlsbc1 httpd]# pwd
/mnt1/etc/httpd
[root@onlsbc1 httpd]# mv modules modules-old
[root@onlsbc1 httpd]# ln -s ../../../usr/lib/apache modules
[root@onlsbc1 httpd]# 


   (2-3-2). /mnt1/ramfs/etc/sysconfig/network-scripts の下のシンボリックリンク
            のチェック

        /mnt1/ramfs/etc/sysconfig/network-scripts のシンボリックリンクが切れて
	しまった。 張りなおす。

[root@onlsbc1 network-scripts]# pwd
/mnt1/etc/sysconfig/network-scripts
[root@onlsbc1 network-scripts]# ls -l ifdown
lrwxrwxrwx    1 root     root           20 11月 13 19:37 ifdown -> ../../../sbin
/ifdown
[root@onlsbc1 network-scripts]# 

[root@onlsbc1 network-scripts]# mv ifdown ifdown-old
[root@onlsbc1 network-scripts]# ln -s ../../../../sbin/ifdown ifdown
[root@onlsbc1 network-scripts]# ls -lL ifdown
-rwxr-xr-x    1 root     root         3136  4月 20  2002 ifdown
[root@onlsbc1 network-scripts]#

[root@onlsbc1 network-scripts]# ls -l ifup
lrwxrwxrwx    1 root     root           18 11月 13 19:37 ifup -> ../../../sbin/i
fup
[root@onlsbc1 network-scripts]# mv ifup ifup-old
[root@onlsbc1 network-scripts]# ln -s ../../../../sbin/ifup ifup
[root@onlsbc1 network-scripts]# ls -lL ifup
-rwxr-xr-x    1 root     root         7133  4月 20  2002 ifup
[root@onlsbc1 network-scripts]#


   (2-4). /mnt1/ramfs/tmp の下のシンボリックリンクのチェック

[root@onlsbc1 mnt1]# pwd
/mnt1
[root@onlsbc1 mnt1]# ls -laLR tmp
tmp:
合計 3
drwxrwxrwt    3 root     root         1024 11月 15 15:11 .
drwxr-xr-x    5 root     root         1024 11月 20 14:15 ..
drwxrwxrwx    2 bin      bin          1024 11月 15 15:42 .iroha_unix
srwxrwxr-x    1 inoue    inoue           0 11月 15 15:07 .kon1

tmp/.iroha_unix:
合計 2
drwxrwxrwx    2 bin      bin          1024 11月 15 15:42 .
drwxrwxrwt    3 root     root         1024 11月 15 15:11 ..
[root@onlsbc1 mnt1]#

	/mnt1/ramfs/tmp/.kon1ファイルは削除する。

[root@onlsbc1 mnt1]# rm -f tmp/.kon1
[root@onlsbc1 mnt1]# ls -laRL tmp
tmp:
合計 3
drwxrwxrwt    3 root     root         1024 11月 21 11:09 .
drwxr-xr-x    5 root     root         1024 11月 20 14:15 ..
drwxrwxrwx    2 bin      bin          1024 11月 15 15:42 .iroha_unix

tmp/.iroha_unix:
合計 2
drwxrwxrwx    2 bin      bin          1024 11月 15 15:42 .
drwxrwxrwt    3 root     root         1024 11月 21 11:09 ..
[root@onlsbc1 mnt1]#


   (2-5). /mnt1/ramfs/var の下のシンボリックリンクのチェック

	/mnt1/ramfs/var の下をチェックしたところシンボリックリンクが切れている
	ものはなかった。


 (3). RAMディスク化の検討
	 
   (3-1).  RAMディスク化のための操作手順

	RAMディスク化のためのコマンドは /mnt1/etc/rc.d/rc.sysinitファイルの中に
	追記する。 ここで行う操作は、
	  (1).  RAMディスクを初期化する。
	  (2).  /mnt1/ramfs下のファイルをRAMディスクにコピーする。
	  (3).  RAMディスクを /ramfsにマウントする。
	である。


   (3-2).  カーネルパラメータについてのチェック

	RAMディスク用に確保すべきサイズを調べる。

[root@onlsbc1 ramfs]# pwd
/mnt1/ramfs
[root@onlsbc1 ramfs]# ls -l
合計 5
drwxr-xr-x   31 root     root         3072 11月 20 14:45 etc
drwxrwxrwt    3 root     root         1024 11月 21 11:09 tmp
drwxr-xr-x   16 root     root         1024 11月 13 19:42 var
[root@onlsbc1 ramfs]# du -k
121     ./etc/sysconfig/network-scripts
1       ./etc/sysconfig/console
			:
261     ./var/www
22753   ./var
24881   .
[root@onlsbc1 ramfs]#

	ramfs下の etc、tmp、varを収めるRAMディスクのサイズは約25MB必要である。
	しかし、カーネルが作成できるRAMディスクの最大サイズは、標準では4MBで
	ある。 Red Hat Linux ディストリビューションで採用されているカーネル
	組み込み型のドライバの場合は、カーネル起動時に "ramdisk_size=32" の
	ようにオプションを渡せば、最大サイズを変更できる。 この例では32MBの
	最大サイズに変更したことになる。

	チェック:
	256MBのコンパクトフラッシュ上のLinuxシステムを、"ramdisk_size=32"の
	オプションで起動し直して、実際に使用できるRAMディスクのサイズを確かめて
	みる。 /boot/grub/grub.conf を以下のように、RAMディスクの拡張オプション
	を付加した項目を追加する。


   (3-2-1). /mnt1/boot/grub/grub.confファイルの修正

[root@onlsbc1 grub]# pwd
/mnt1/boot/grub
[root@onlsbc1 grub]# ls
device.map     ffs_stage1_5  menu.lst           splash.xpm.gz  vstafs_stage1_5
e2fs_stage1_5  grub.conf     minix_stage1_5     stage1         xfs_stage1_5
fat_stage1_5   jfs_stage1_5  reiserfs_stage1_5  stage2
[root@onlsbc1 grub]# vi grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel /boot/vmlinuz-version ro root=/dev/hdc1
#          initrd /boot/initrd-version.img
#boot=/dev/hdc
default=0
timeout=10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-3)
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hdc1
        initrd /boot/initrd-2.4.18-3.img

title 32MB RAM Disk, Red Hat Linux (2.4.18-3)
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hdc1 ramdisk_size=32768
        initrd /boot/initrd-2.4.18-3.img
~
"grub.conf" 22L, 740C written
[root@onlsbc1 grub]#

	システムをリブートする。

[root@onlsbc1 grub]# reboot

Broadcast message from root (pts/1) (Tue Nov 26 16:35:32 2002):

The system is going down for reboot NOW!
[root@onlsbc1 grub]#

	256MB のコンパクトフラッシュ上のLinuxシステムが立ち上がった。

[inoue@onlpara .ssh]$ ssh onlsbc1
The authenticity of host 'onlsbc1 (130.87.153.3)' can't be established.
RSA key fingerprint is 0b:79:9e:79:ac:c3:9e:10:c6:98:cc:7c:46:3e:96:3e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'onlsbc1,130.87.153.3' (RSA) to the list of known hos
ts.
inoue@onlsbc1's password:
Last login: Tue Nov 26 16:54:17 2002
[inoue@onlsbc1 inoue]$ ls -l
合計 0
[inoue@onlsbc1 inoue]$ df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hdc1               241949    219611      9846  96% /
none                    152332         0    152332   0% /dev/shm
[inoue@onlsbc1 inoue]$


   (3-2-2). RAMディスクを作成する

[root@onlsbc1 inoue]# /sbin/mke2fs /dev/ram0 32768
mke2fs 1.27 (8-Mar-2002)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
8192 inodes, 32768 blocks
1638 blocks (5.00%) reserved for the super user
First data block=1
4 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@onlsbc1 inoue]#

	ok.  32MB のRAMディスクを作ることができた。


   (3-2-3). RAMディスクを一旦、/mnt にマウントして必要なファイルを書き込む

[root@onlsbc1 inoue]# ls -l /mnt
合計 1
drwxr-xr-x    2 root     root         1024 11月 13 11:15 floppy
[root@onlsbc1 inoue]#
[root@onlsbc1 inoue]# mount -n -o rw /dev/ram0 /mnt
[root@onlsbc1 inoue]# df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hdc1               241949    219611      9846  96% /
none                    152332         0    152332   0% /dev/shm
[root@onlsbc1 inoue]#
[root@onlsbc1 inoue]# ls -l /mnt
合計 12
drwx------    2 root     root        12288 11月 26 16:57 lost+found
[root@onlsbc1 inoue]#

	/ramfs 下のファイルを RAMディスクにコピーする。

[root@onlsbc1 /]# pwd
/
[root@onlsbc1 /]# ls -l
合計 110
drwxr-xr-x    2 root     root         2048 11月 13 19:37 bin
drwxr-xr-x    3 root     root         1024 11月 13 19:40 boot
drwxr-xr-x   18 root     root        82944 11月 26 16:53 dev
lrwxrwxrwx    1 root     root            9 11月 20 14:16 etc -> ramfs/etc
drwxr-xr-x    4 root     root         1024 11月 13 19:47 home
drwxr-xr-x    2 root     root         1024  6月 22  2001 initrd
drwxr-xr-x    6 root     root         3072 11月 13 19:42 lib
drwx------    2 root     root        12288 11月 13 19:12 lost+found
drwxr-xr-x    3 root     root         1024 11月 27 09:57 mnt
drwxr-xr-x    2 root     root         1024  8月 24  1999 opt
dr-xr-xr-x   44 root     root            0 11月 27 01:51 proc
drwxr-xr-x    5 root     root         1024 11月 20 14:15 ramfs
drwxr-x---    2 root     root         1024 11月 13 14:15 root
drwxr-xr-x    2 root     root         3072 11月 13 19:41 sbin
lrwxrwxrwx    1 root     root            9 11月 20 14:16 tmp -> ramfs/tmp
drwxr-xr-x   15 root     root         1024 11月 13 19:34 usr
lrwxrwxrwx    1 root     root            9 11月 20 14:16 var -> ramfs/var
[root@onlsbc1 /]#
[root@onlsbc1 /]# cp -pdr ramfs/etc /mnt
[root@onlsbc1 /]# cp -pdr ramfs/tmp /mnt
cp: cannot open `ramfs/tmp/.iroha_unix/IROHA' for reading: そのようなデバイスや
アドレスはありません
cp: cannot open `ramfs/tmp/.kon1' for reading: そのようなデバイスやアドレスはあ
りません
[root@onlsbc1 /]# cp -pdr ramfs/var /mnt
[root@onlsbc1 /]#
[root@onlsbc1 /]# ls -l /mnt
合計 17
drwxr-xr-x   31 root     root         3072 11月 26 16:52 etc
drwx------    2 root     root        12288 11月 26 16:57 lost+found
drwxrwxrwt    3 root     root         1024 11月 27 04:02 tmp
drwxr-xr-x   16 root     root         1024 11月 13 19:42 var
[root@onlsbc1 /]#
[root@onlsbc1 /]# cd /mnt
[root@onlsbc1 mnt]# du -k
12      ./lost+found
121     ./etc/sysconfig/network-scripts
		:
261     ./var/www
22820   ./var
24960   .
[root@onlsbc1 mnt]#

	/mntにマウントしてあるRAMディスクに、約25MBのファイルを書き込んだ。


   (3-2-4). /mntをアンマウントして、/ramfs にマウントし直す

[root@onlsbc1 /]# pwd
/
[root@onlsbc1 /]# umount /mnt
[root@onlsbc1 /]# mount -n -o rw /dev/ram0 /ramfs
[root@onlsbc1 /]# ls -l
合計 110
drwxr-xr-x    2 root     root         2048 11月 13 19:37 bin
drwxr-xr-x    3 root     root         1024 11月 13 19:40 boot
drwxr-xr-x   18 root     root        82944 11月 26 16:53 dev
lrwxrwxrwx    1 root     root            9 11月 20 14:16 etc -> ramfs/etc
drwxr-xr-x    4 root     root         1024 11月 13 19:47 home
drwxr-xr-x    2 root     root         1024  6月 22  2001 initrd
drwxr-xr-x    6 root     root         3072 11月 13 19:42 lib
drwx------    2 root     root        12288 11月 13 19:12 lost+found
drwxr-xr-x    3 root     root         1024 11月 13 11:15 mnt
drwxr-xr-x    2 root     root         1024  8月 24  1999 opt
dr-xr-xr-x   44 root     root            0 11月 27 01:51 proc
drwxr-xr-x    6 root     root         1024 11月 27 10:01 ramfs
drwxr-x---    2 root     root         1024 11月 13 14:15 root
drwxr-xr-x    2 root     root         3072 11月 13 19:41 sbin
lrwxrwxrwx    1 root     root            9 11月 20 14:16 tmp -> ramfs/tmp
drwxr-xr-x   15 root     root         1024 11月 13 19:34 usr
lrwxrwxrwx    1 root     root            9 11月 20 14:16 var -> ramfs/var
[root@onlsbc1 /]# df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hdc1               241949    219622      9835  96% /
none                    152332         0    152332   0% /dev/shm
[root@onlsbc1 /]# ls -l /mnt
合計 1
drwxr-xr-x    2 root     root         1024 11月 13 11:15 floppy
[root@onlsbc1 /]# ls -l ramfs
合計 17
drwxr-xr-x   31 root     root         3072 11月 26 16:52 etc
drwx------    2 root     root        12288 11月 26 16:57 lost+found
drwxrwxrwt    3 root     root         1024 11月 27 04:02 tmp
drwxr-xr-x   16 root     root         1024 11月 13 19:42 var
[root@onlsbc1 /]#

	ok.  これで /ramfs の下はRAMディスクに置き換わった。

[root@onlsbc1 /]# pwd
/
[root@onlsbc1 /]# ls -lLR tmp
tmp:
合計 0
[root@onlsbc1 /]# touch /tmp/test
[root@onlsbc1 /]# ls -lLR /tmp
/tmp:
合計 0
-rw-r--r--    1 root     root            0 11月 27 10:14 test
[root@onlsbc1 /]# umount /ramfs
[root@onlsbc1 /]# ls -lLR /tmp
/tmp:
合計 0
[root@onlsbc1 /]#

	ok.  コンパクトフラッシュには書き込みは行われていない。
	上記でやったことをブート時のスクリプトに追記すれば、/etc、/tmp、/var の
	RAMディスク化は達成できる。


 (4). /mnt1/etc/rc.d/rc.sysinit の調査

	/mnt1/etc/rc.d/rc.sysinitファイルの内容をチェックする。

[root@onlsbc1 rc.d]# df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hdc1               241949    219622      9835  96% /
none                    152332         0    152332   0% /dev/shm
[root@onlsbc1 rc.d]# pwd
/etc/rc.d
[root@onlsbc1 rc.d]# ls
init.d  rc.local    rc0.d  rc2.d  rc4.d  rc6.d
rc      rc.sysinit  rc1.d  rc3.d  rc5.d
[root@onlsbc1 rc.d]#

[inoue@onlsbc1 rc.d]$ vi rc.sysinit
#!/bin/bash
#
# /etc/rc.sysinit - run once at boot time
		:
# Rerun ourselves through initlog
		:
# If we're using devfs, start devfsd now - we need the old device names
		:
# Set the path
		:
# Read in config data.
		:
# Source functions
		:
# Print a banner. ;)
		:
# Fix console loglevel
		:
# Mount /proc (done here so volume labels can work with fsck)
		:
# Unmount the initrd, if necessary
		:
# Configure kernel parameters
		:
# Set the system clock.
		:
 # Load keymap
		:
 # Load system font
		:
# Start up swapping.
		:
# Set the hostname.
		:
# Initialize USB controller and HID devices
		:
# Possibly update quotas if fsck was run on /.
		:
# check for arguments passed from kernel
		:
# set up pnp
		:
# Remount the root filesystem read-write.
		:
# LVM initialization
		:
# Clear mtab
		:
# Remove stale backups
		:
# Enter root, /proc and (potentially) /proc/bus/usb and devfs into mtab.
		:
# The root filesystem is now read-write, so we can now log via syslog() directly
		:
# Our modutils don't support it anymore, so we might as well remove
# the preferred link.
		:
# tweak isapnp settings if needed.
		:
# Load sound modules iff they need persistent DMA buffers
		:
# Load modules (for backward compatibility with VARs)
		:
# Add raid devices
		:
# LVM initialization, take 2 (it could be on top of RAID)
		:
# Check filesystems
		:
# Mount all other filesystems (except for NFS and /proc, which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.
		:
# check remaining quotas other than root
		:
# Configure machine if necessary.
		:
# Clean out /etc.
		:
# Do we need (w|u)tmpx files? We don't set them up, but the sysadmin might...
		:
# Clean up /var
# I'd use find, but /usr may not be mounted.
		:
# Reset pam_console permissions
		:
# Clean up utmp/wtmp
		:
# Delete X locks
		:
# Delete VNC & X locks
		:
# Delete Postgres sockets
		:
# Now turn on swap in case we swap to files.
		:
# Initialize the serial ports.
		:
# If a SCSI tape has been detected, load the st module unconditionally
# since many SCSI tapes don't deal well with st being loaded and unloaded
		:
# Load usb storage here, to match most other things
		:
# If they asked for ide-scsi, load it
		:
# Turn off DMA on CD-ROMs. It more often than not causes problems.
		:
# Turn on harddisk optimization
# There is only one file /etc/sysconfig/harddisks for all disks
# after installing the hdparm-RPM. If you need different hdparm parameters
# for each of your disks, copy /etc/sysconfig/harddisks to
# /etc/sysconfig/harddiskhda (hdb, hdc...) and modify it.
# Each disk which has no special parameters will use the defaults.
# Each non-disk which has no special parameters will be ignored.
		:
# Generate a header that defines the boot kernel.
		:
# Adjust symlinks as necessary in /boot to keep system services from
# spewing messages about mismatched System maps and so on.
		:
# The special Red Hat kernel library symlink must point to the right library
# We need to deal with cases where there is no library, and we need to
# deal with any version numbers that show up.
		:
# Now that we have all of our basic modules loaded and the kernel going,
# let's dump the syslog ring somewhere so we can find it later
		:
# Also keep kernel symbols around in case we need them for debugging
		:
# create the crash indicator flag to warn on crashes, offer fsck with timeout
		:
[inoue@onlsbc1 rc.d]$


 (5). /mnt1/etc/rc.d/rc.sysinit の修正

   (5-1).  RAMディスク化のための変更

	rc.sysinitファイルの記述の中の以下の部分に、RAMディスク化のためのコマン
	ドを追記する。

# Mount all other filesystems (except for NFS and /proc, which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.
                :
                        <--- この部分にRAMディスク化のためのコマンドを追記
                :
# check remaining quotas other than root

[root@onlsbc1 rc.d]# pwd
/etc/rc.d
[root@onlsbc1 rc.d]# ls -l
合計 36
drwxr-xr-x    2 root     root         1024 11月 13 19:42 init.d
-rwxr-xr-x    1 root     root         3108  9月 22  2001 rc
-rwxr-xr-x    1 root     root          220  7月 11  2001 rc.local
-rwxr-xr-x    1 root     root        22379  4月 19  2002 rc.sysinit
drwxr-xr-x    2 root     root         1024 11月 13 19:42 rc0.d
drwxr-xr-x    2 root     root         1024 11月 13 19:42 rc1.d
drwxr-xr-x    2 root     root         1024 11月 13 19:42 rc2.d
drwxr-xr-x    2 root     root         1024 11月 13 19:42 rc3.d
drwxr-xr-x    2 root     root         1024 11月 13 19:42 rc4.d
drwxr-xr-x    2 root     root         1024 11月 13 19:42 rc5.d
drwxr-xr-x    2 root     root         1024 11月 13 19:42 rc6.d
[root@onlsbc1 rc.d]#
[root@onlsbc1 rc.d]# vi rc.sysinit
			:
# Mount all other filesystems (except for NFS and /proc, which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.
action $"Mounting local filesystems: " mount -a -t nonfs,smbfs,ncpfs -O no_netde
v

# <-- by E.Inoue : from here
/sbin/mke2fs -q /dev/ram0 32768
mount -n -o rw /dev/ram0 /mnt
cp -pdr ramfs/etc /mnt
cp -pdr ramfs/tmp /mnt
cp -pdr ramfs/var /mnt
umount /mnt
mount -n -o rw /dev/ram0 /ramfs
# --> to here

# check remaining quotas other than root
if [ X"$_RUN_QUOTACHECK" = X1 -a -x /sbin/quotacheck ]; then
			:
"rc.sysinit" 791L, 22598C written
[root@onlsbc1 rc.d]# ls -l rc.sysinit
-rwxr-xr-x    1 root     root        22598 11月 27 16:13 rc.sysinit
[root@onlsbc1 rc.d]#

	注意.
	      RAMディスク化したのは、システムが書き込む可能性があるディレクトリ
	   のみである。 この他にもユーザおよびルートが書き込む可能性がある
	   ディレクトリとして /home、/root がある。 ここは、他のマシンの
	   ディレクトリをNFSマウントして使う等の処置をしてもらうことにする。
	   ここでは、この部分については何もしない。


   (5-2).  /ramfs/tmp 下のファイルの削除

[root@onlsbc1 tmp]# pwd
/ramfs/tmp
[root@onlsbc1 tmp]# ls -lRa
.:
合計 3
drwxrwxrwt    3 root     root         1024 11月 27 04:02 .
drwxr-xr-x    5 root     root         1024 11月 20 14:15 ..
drwxrwxrwx    2 bin      bin          1024 11月 26 16:53 .iroha_unix
srwxrwxr-x    1 inoue    inoue           0 11月 26 16:54 .kon1

./.iroha_unix:
合計 2
drwxrwxrwx    2 bin      bin          1024 11月 26 16:53 .
drwxrwxrwt    3 root     root         1024 11月 27 04:02 ..
srwxrwxrwx    1 bin      bin             0 11月 26 16:53 IROHA
[root@onlsbc1 tmp]#
[root@onlsbc1 tmp]# rm -f .iroha_unix/IROHA
[root@onlsbc1 tmp]# rm -f .kon1
[root@onlsbc1 tmp]# ls -lRa
.:
合計 3
drwxrwxrwt    3 root     root         1024 11月 27 16:21 .
drwxr-xr-x    5 root     root         1024 11月 20 14:15 ..
drwxrwxrwx    2 bin      bin          1024 11月 27 16:21 .iroha_unix

./.iroha_unix:
合計 2
drwxrwxrwx    2 bin      bin          1024 11月 27 16:21 .
drwxrwxrwt    3 root     root         1024 11月 27 16:21 ..
[root@onlsbc1 tmp]#


 (6). ブートテスト

   (6-1).  コンパクトフラッシュ上のLinuxシステムを立ち上げる

[root@onlsbc1 /]# reboot

Broadcast message from root (pts/0) (Wed Nov 27 16:31:09 2002):

The system is going down for reboot NOW!
[root@onlsbc1 /]#

        MBR部のGRUBが起動し、以下のメニューが表示された。

                |
                V
        RAM SIZE=32MB, Red Hat Linux 7.3 (2.4.18-3)
        RAM SIZE=32MB, Compact Flash Red Hat Linux 7.3 (2.4.18-3) <-- この項目
                                                                        を選択

                |
                V
        /dev/hdc1部のGRUBが起動し、以下のメニューが表示された。

                |
                V
        32MB RAM Disk, Red Hat Linux (2.4.18-3)<--- この項目を選択

                |
                V
        ブート処理は進んで、INITが実行されRAMディスク作成も正常に実行できた。


	システムはシャットダウンした後、正常に立ち上がった。

[inoue@onlpara inoue]$ ssh onlsbc1
inoue@onlsbc1's password:
Last login: Wed Nov 27 16:36:21 2002 from onlnote2.kek.jp
[inoue@onlsbc1 inoue]$ df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hdc1               241949    219621      9836  96% /
none                    152332         0    152332   0% /dev/shm
[inoue@onlsbc1 inoue]$ ls -l /
合計 110
drwxr-xr-x    2 root     root         2048 11月 13 19:37 bin
drwxr-xr-x    3 root     root         1024 11月 13 19:40 boot
drwxr-xr-x   18 root     root        82944 11月 27 16:34 dev
lrwxrwxrwx    1 root     root            9 11月 20 14:16 etc -> ramfs/etc
drwxr-xr-x    4 root     root         1024 11月 13 19:47 home
drwxr-xr-x    2 root     root         1024  6月 22  2001 initrd
drwxr-xr-x    6 root     root         3072 11月 13 19:42 lib
drwx------    2 root     root        12288 11月 13 19:12 lost+found
drwxr-xr-x    3 root     root         1024 11月 13 11:15 mnt
drwxr-xr-x    2 root     root         1024  8月 24  1999 opt
dr-xr-xr-x   40 root     root            0 11月 28  2002 proc
drwxr-xr-x    6 root     root         1024 11月 27 16:33 ramfs
drwxr-x---    2 root     root         1024 11月 13 14:15 root
drwxr-xr-x    2 root     root         3072 11月 13 19:41 sbin
lrwxrwxrwx    1 root     root            9 11月 20 14:16 tmp -> ramfs/tmp
drwxr-xr-x   15 root     root         1024 11月 13 19:34 usr
lrwxrwxrwx    1 root     root            9 11月 20 14:16 var -> ramfs/var
[inoue@onlsbc1 inoue]$ ls -l /ramfs
合計 17
drwxr-xr-x   31 root     root         3072 11月 27 16:33 etc
drwx------    2 root     root        12288 11月 27 16:33 lost+found
drwxrwxrwt    3 root     root         1024 11月 27 16:21 tmp
drwxr-xr-x   16 root     root         1024 11月 13 19:42 var
[inoue@onlsbc1 inoue]$

	ok.  RAMディスクがマウントされている。


   (6-2).  リブートする

[root@onlsbc1 inoue]# reboot

Broadcast message from root (pts/0) (Wed Nov 27 16:51:19 2002):

The system is going down for reboot NOW!
[root@onlsbc1 inoue]#

		:
		:
Stopping crond:							[ OK ]
Shutting down APM daemon:						[ OK ]
Saving random seed:						[ OK ]
Stopping portmapper:						[ OK ]
Shutting down kernel logger:					[ OK ]
Shutting down system logger:					[ OK ]
Shutting down interface eth0:					[ OK ]
Shutting down loopback interface:					[ OK ]
Flushing all chains:						[ OK ]
Removing user defined chains:					[ OK ]
Resetting built-in chains to the default ACCEPT policy			[ OK ]
Starting killall:							[ OK ]
Sending all process TERM signal... su(pam_unix)[986]: session closed for user 
root								[ OK ]
Sending all process KILL signal... md: recovery thread got woken up...
md: recovery thread finised:					[ OK ]
Syncing hardware clock to system time				[ OK ]
Turning off quotas:						[ OK ]
Unmounting file systems: umount2: Device or resource busy
unmount: /ramfs: Illegal seek
								[ FAILED ]
INIT: no more processes left in this runlevel
	ここで停止している。

	/ramfs のアンマウントが考慮されてない。 シャットダウン時の /ramfs の
	アンマウントの処置が必要だ。


   (6-3).  シャットダウン時の手続きを調べる

	Shutdownはinitプロセスにシグナルを送りランレベ ルの変更を依頼する。
	  o  ランレベル0はシステムを停止する
	  o  ランレベル6はシステムをリブートす る
	  o  ランレベル1はシステムの管理業務が行なえる状態(シングルユーザモード)
	     にする

	システムの停止又はリブート時にどのような動作がなされるかは、/etc/inittab
	ファイル中のそれぞれのランレベルの適切なエントリーを参照。

[root@onlsbc1 etc]# cat /etc/inittab
#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, 
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Things to run in every runlevel.
ud::once:/sbin/update

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm -nodaemon
[root@onlsbc1 etc]#

	halt および reboot 時の処理は rc0.d および rc6.d 下のスクリプトの中で
	やればよいことがわかる。 実際には、rc0.d および rc6.d 下のファイルは全て
	/etc/rc.d/init.d 下のファイルへのシンボリックリンクであるから、
	/etc/rc.d/init.d 下のスクリプトを修正することになる。


   (6-4).  init.d 下のスクリプトのチェック

	上記の項目(6-2)の実行結果の記録に注目。 

		:
		:
Syncing hardware clock to system time                           [ OK ]
Turning off quotas:                                             [ OK ]
Unmounting file systems: umount2: Device or resource busy
unmount: /ramfs: Illegal seek
                                                                [ FAILED ]
INIT: no more processes left in this runlevel

	umount のエラーを表示している直前のメッセージを出力しているスクリプトを
	確認する。

[inoue@onlsbc1 rc.d]$ pwd
/etc/rc.d
[inoue@onlsbc1 rc.d]$ grep Syncing */*
init.d/halt:runcmd $"Syncing hardware clock to system time" /sbin/hwclock $CLOCK
FLAGS
rc0.d/S01halt:runcmd $"Syncing hardware clock to system time" /sbin/hwclock $CLO
CKFLAGS
rc6.d/S01reboot:runcmd $"Syncing hardware clock to system time" /sbin/hwclock $C
LOCKFLAGS
[inoue@onlsbc1 rc.d]$
[inoue@onlsbc1 rc.d]$ grep Turning */*
init.d/halt:[ -n "$SWAPS" ] && runcmd $"Turning off swap: " swapoff $SWAPS
init.d/halt:[ -x /sbin/quotaoff ] && runcmd $"Turning off quotas: " /sbin/quotao
ff -aug
rc0.d/S01halt:[ -n "$SWAPS" ] && runcmd $"Turning off swap: " swapoff $SWAPS
rc0.d/S01halt:[ -x /sbin/quotaoff ] && runcmd $"Turning off quotas: " /sbin/quot
aoff -aug
rc6.d/S01reboot:[ -n "$SWAPS" ] && runcmd $"Turning off swap: " swapoff $SWAPS
rc6.d/S01reboot:[ -x /sbin/quotaoff ] && runcmd $"Turning off quotas: " /sbin/qu
otaoff -aug
[inoue@onlsbc1 rc.d]$

	rc0.d/S01halt および rc6.d/S01reboot のスクリプトの中で、"Turning off 
	quotas:" のメッセージを出力している。 

[inoue@onlsbc1 rc.d]$ pwd
/etc/rc.d
[inoue@onlsbc1 rc.d]$ ls -l rc0.d/S01halt
lrwxrwxrwx    1 root     root           14 11月 28 09:44 rc0.d/S01halt -> ../ini
t.d/halt
[inoue@onlsbc1 rc.d]$ ls -l rc6.d/S01reboot
lrwxrwxrwx    1 root     root           14 11月 28 09:44 rc6.d/S01reboot -> ../i
nit.d/halt
[inoue@onlsbc1 rc.d]$

	つまり、/etc/rc.d/init.d/haltスクリプトが "Turning off quotas:" の
	メッセージを出力している。 この処理をした直後に /ramfs の umount を行う
	ように修正しよう。


   (6-5).  /etc/rc.d/init.d/haltスクリプトの修正

	現在、使用している onlsbc1 のLinuxシステムは、コンパクトフラッシュ上の
	ものである。 つまり、/etcディレクトリ等はRAMディスクになっているので
	/etc下のファイルを修正しても、システムを立ち上げ直すと修正した部分は
	消えてしまい反映されない。 そこで、一旦、2.5"のIDEディスク上のLinuxシス
	テムを立ち上げてコンパクトフラッシュ上のファイルシステムをマウントして
	修正することにする。
	
[inoue@onlpara inoue]$ ssh onlsbc1
The authenticity of host 'onlsbc1 (130.87.153.3)' can't be established.
RSA key fingerprint is 83:6d:2a:db:5b:38:f4:65:0c:b8:bd:eb:c2:e7:87:a9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'onlsbc1,130.87.153.3' (RSA) to the list of known hos
ts.
inoue@onlsbc1's password:
Last login: Thu Nov 28 09:40:51 2002
[inoue@onlsbc1 inoue]$ su
Password:
[root@onlsbc1 inoue]# mount -t ext3 /dev/hdc1 /mnt1
[root@onlsbc1 inoue]# df -k
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hdc1              7360792   2216068   4770812  32% /
/dev/hda5             10475668    166124   9777396   2% /home
/dev/hda6              9685276     32828   9160460   1% /home2
/dev/hda7             10080488     32828   9535592   1% /home3
none                    152332         0    152332   0% /dev/shm
/dev/hdc1               241949    219621      9836  96% /mnt1
[root@onlsbc1 inoue]#

[root@onlsbc1 init.d]# pwd
/mnt1/etc/rc.d/init.d
[root@onlsbc1 init.d]# ls
anacron  canna      gpm    ipchains   keytable  netfs    random      single
apmd     crond      halt   iptables   killall   network  rawdevices  sshd
atd      functions  httpd  kdcrotate  kudzu     portmap  sendmail    syslog
[root@onlsbc1 init.d]# mv halt BACK-halt
[root@onlsbc1 init.d]# cp BACK-halt halt
[root@onlsbc1 init.d]# ls -l
合計 81
-rwxr-xr-x    1 root     root         5153  3月 28  2002 BACK-halt
-rwxr-xr-x    1 root     root          934  6月 25  2001 anacron
-rwxr-xr-x    1 root     root         1458  4月 15  2002 apmd
-rwxr-xr-x    1 root     root         1176  1月 18  2002 atd
-rwxr-xr-x    1 root     root         1319  4月 10  2002 canna
-rwxr-xr-x    1 root     root         1316  4月 15  2002 crond
-rwxr-xr-x    1 root     root         9962  3月 13  2002 functions
-rwxr-xr-x    1 root     root         1541  4月 10  2002 gpm
-rwxr-xr-x    1 root     root         5153 11月 29 11:00 halt
-rwxr-xr-x    1 root     root         2188  4月 10  2002 httpd
-rwxr-xr-x    1 root     root         3313  2月 22  2002 ipchains
-rwxr-xr-x    1 root     root         5528  3月  4  2002 iptables
-rwxr-xr-x    1 root     root         1084  3月  1  2002 kdcrotate
-rwxr-xr-x    1 root     root         1273  4月 15  2002 keytable
-rwxr-xr-x    1 root     root          487  1月 31  2001 killall
-rwxr-xr-x    1 root     root         1919  4月 18  2002 kudzu
-rwxr-xr-x    1 root     root         5104  3月 13  2002 netfs
-rwxr-xr-x    1 root     root         6390  4月 13  2002 network
-rwxr-xr-x    1 root     root         1831  2月 28  2002 portmap
-rwxr-xr-x    1 root     root         1544  3月 13  2001 random
-rwxr-xr-x    1 root     root         2295  1月 31  2001 rawdevices
-rwxr-xr-x    1 root     root         1830  4月  8  2002 sendmail
-rwxr-xr-x    1 root     root         1329  2月 28  2001 single
-rwxr-xr-x    1 root     root         2647  4月  5  2002 sshd
-rwxr-xr-x    1 root     root         1369  4月 18  2002 syslog
[root@onlsbc1 init.d]#
[root@onlsbc1 init.d]# vi halt
			:
# Turn off swap, then unmount file systems.
SWAPS=`awk '! /^Filename/ { print $1 }' /proc/swaps`
[ -n "$SWAPS" ] && runcmd $"Turning off swap: " swapoff $SWAPS

[ -x /sbin/quotaoff ] && runcmd $"Turning off quotas: " /sbin/quotaoff -aug

# Unmount file systems, killing processes if we have to.
# Unmount loopback stuff first

# <-- by E.Inoue : from here
umount /ramfs
# --> to here

remaining=`awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/moun
ts`
			:
"halt" 216L, 5212C written
[root@onlsbc1 init.d]#


   (6-6).  ブートの実行(その2)

	2.5"IDEディスク上のLinuxシステムを reboot する。

[root@onlsbc1 init.d]# reboot
Broadcast message from root (pts/0) (Fri Nov 29 11:08:17 2002):

The system is going down for reboot NOW!
Read from remote host onlsbc1: Connection reset by peer
Connection to onlsbc1 closed.
[inoue@onlpara inoue]$

	コンパクトフラッシュ上のシステムが立ち上がった。

[inoue@onlpara inoue]$ ssh onlsbc1
The authenticity of host 'onlsbc1 (130.87.153.3)' can't be established.
RSA key fingerprint is 0b:79:9e:79:ac:c3:9e:10:c6:98:cc:7c:46:3e:96:3e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'onlsbc1,130.87.153.3' (RSA) to the list of known hos
ts.
inoue@onlsbc1's password:Last login: Wed Nov 27 08:53:50 2002 from onlnote2.kek.jp
[inoue@onlsbc1 inoue]$
[inoue@onlsbc1 init.d]$ pwd
/etc/rc.d/init.d
[inoue@onlsbc1 init.d]$ ls -l
合計 81
-rwxr-xr-x    1 root     root         5153  3月 28  2002 BACK-halt
-rwxr-xr-x    1 root     root          934  6月 25  2001 anacron
-rwxr-xr-x    1 root     root         1458  4月 15  2002 apmd
-rwxr-xr-x    1 root     root         1176  1月 18  2002 atd
-rwxr-xr-x    1 root     root         1319  4月 10  2002 canna
-rwxr-xr-x    1 root     root         1316  4月 15  2002 crond
-rwxr-xr-x    1 root     root         9962  3月 13  2002 functions
-rwxr-xr-x    1 root     root         1541  4月 10  2002 gpm
-rwxr-xr-x    1 root     root         5212 11月 29 11:03 halt
-rwxr-xr-x    1 root     root         2188  4月 10  2002 httpd
-rwxr-xr-x    1 root     root         3313  2月 22  2002 ipchains
-rwxr-xr-x    1 root     root         5528  3月  4  2002 iptables
-rwxr-xr-x    1 root     root         1084  3月  1  2002 kdcrotate
-rwxr-xr-x    1 root     root         1273  4月 15  2002 keytable
-rwxr-xr-x    1 root     root          487  1月 31  2001 killall
-rwxr-xr-x    1 root     root         1919  4月 18  2002 kudzu
-rwxr-xr-x    1 root     root         5104  3月 13  2002 netfs
-rwxr-xr-x    1 root     root         6390  4月 13  2002 network
-rwxr-xr-x    1 root     root         1831  2月 28  2002 portmap
-rwxr-xr-x    1 root     root         1544  3月 13  2001 random
-rwxr-xr-x    1 root     root         2295  1月 31  2001 rawdevices
-rwxr-xr-x    1 root     root         1830  4月  8  2002 sendmail
-rwxr-xr-x    1 root     root         1329  2月 28  2001 single
-rwxr-xr-x    1 root     root         2647  4月  5  2002 sshd
-rwxr-xr-x    1 root     root         1369  4月 18  2002 syslog
[inoue@onlsbc1 init.d]$ vi halt
			:
# Unmount file systems, killing processes if we have to.
# Unmount loopback stuff first

# <-- by E.Inoue : from here
umount /ramfs
# --> to here

remaining=`awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/moun
ts`
			:
[inoue@onlsbc1 init.d]$

	コンパクトフラッシュ上のシステムを reboot する。

[root@onlsbc1 init.d]# reboot

Broadcast message from root (pts/0) (Fri Nov 29 14:48:10 2002):

The system is going down for reboot NOW!
[root@onlsbc1 init.d]#


                :
Syncing hardware clock to system time                           [ OK ]
Turning off quotas:                                             [ OK ]
Unmounting file systems: umount2: Device or resource busy
unmount: /ramfs: Illegal seek
                                                                [ FAILED ]
INIT: no more processes left in this runlevel

	症状は変わらない。 スクリプトのこの時点で /ramfs をアンマウントできない
	としても何も問題はない。 スクリプトの実行を中断しないで、処理を先に
	進めてやるようにしよう。

[root@onlsbc1 init.d]# pwd
/mnt1/etc/rc.d/init.d
[root@onlsbc1 init.d]# vi halt
		:
# Unmount file systems, killing processes if we have to.
# Unmount loopback stuff first

# <-- by E.Inoue : from here
#umount /ramfs
# --> to here

remaining=`awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/moun
ts`
		:
        if [ "$retry" -lt 3 ]; then
                LANG=C runcmd $"Unmounting file systems (retry): "  umount -f $r
emaining
        else
                LANG=C runcmd $"Unmounting file systems: "  umount -f $remaining
        fi
        sleep 2
        remaining=`halt_get_remaining | sort -r`

# <-- by E.Inoue : from here
#       echo $"$remaining"
        ["$remaining" = /ramfs ] && break
# --> to here

        [ -z "$remaining" ] && break
        /sbin/fuser -k -m $sig $remaining >/dev/null
		:
"halt" 222L, 5314C written
[root@onlsbc1 init.d]#

	2.5"IDEディスク上のLinuxシステムを reboot する。

[root@onlsbc1 init.d]# reboot

Broadcast message from root (pts/0) (Fri Nov 29 17:16:09 2002):

The system is going down for reboot NOW!
[root@onlsbc1 init.d]#

	コンパクトフラッシュ上のシステムが立ち上がった。
	コンパクトフラッシュ上のシステムを reboot する。

		:
Unmounting file systems: umount2: Device or resource busy
unmount: /ramfs: Illegal seek
								[ FAILED ]
/etc/rc6.d/S01reboot:[/ramfs: No such file or directory
INIT: no more processes left in this runlevel

	となった。 $remaining をクリアしておかないと、スクリプトの後ろの方で、
	再度マウントしようとするので上記のようなメッセージが出力される。

[root@onlsbc1 init.d]# pwd
/mnt1/etc/rc.d/init.d
[root@onlsbc1 init.d]# vi halt
			:
# <-- by E.Inoue : from here
#       echo $"$remaining"
        ["$remaining" = /ramfs ] && $remaining < /dev/null ; break
# --> to here
			:
"halt" 222L, 5339C written
[root@onlsbc1 init.d]#

[root@onlsbc1 init.d]# reboot

Broadcast message from root (pts/0) (Fri Nov 29 17:53:03 2002):

The system is going down for reboot NOW!
[root@onlsbc1 init.d]#

	ok.  [FAILED] のメッセージを表示した後、スクリプトの処理は進んで、Linux
	システムはリブートした。


   (6-7).  [FAILED] のメッセージを表示しないで処理を進めるように修正

[root@onlsbc1 init.d]# pwd
/mnt1/etc/rc.d/init.d
[root@onlsbc1 init.d]# vi halt
			:
sig=
retry=3
remaining=`halt_get_remaining | sort -r`

# <-- by E.Inoue : from here
#echo $"$remaining"
if [ ${remaining:1:5} = ramfs ]; then
#   echo "eqaul"
   ["$remaining" = /ramfs ] && $remaining < /dev/null
else
#   echo " not eqaul"
# --> to here

while [ -n "$remaining" -a "$retry" -gt 0 ]
do
        if [ "$retry" -lt 3 ]; then
                LANG=C runcmd $"Unmounting file systems (retry): "  umount -f $r
emaining
        else
                LANG=C runcmd $"Unmounting file systems: "  umount -f $remaining
        fi
        sleep 2
        remaining=`halt_get_remaining | sort -r`

# <-- by E.Inoue : from here
#       echo $"$remaining"
#       ["$remaining" = /ramfs ] && $remaining < /dev/null ; break
# --> to here

        [ -z "$remaining" ] && break
        /sbin/fuser -k -m $sig $remaining >/dev/null
        sleep 5
        retry=$(($retry-1))
        sig=-9
done
# <-- by E.Inoue : from here
fi
# --> to here

[ -f /proc/bus/usb/devices ] && umount /proc/bus/usb

# remove the crash indicator flag
			:
"halt" 235L, 5586C written
[root@onlsbc1 init.d]#

	立ち上げ直す。

[root@onlsbc1 init.d]# reboot

Broadcast message from root (pts/1) (Wed Dec  4 14:20:23 2002):

The system is going down for reboot NOW!
[root@onlsbc1 init.d]#

	コンパクトフラッシュ上のシステムが立ち上がった。
	コンパクトフラッシュ上のシステムを reboot する。

		:
Syncing hardware clock to system time                           [ OK ]
Turning off quotas:                                             [ OK ]
/etc/rc.d/S01halt: [/ramfs: No such file or drectory
Rebooting system...
		:

	ok.   [FAILED] のメッセージを表示しないでリブートは実行された。
	シャットダウンした場合について確認する。
	

ot@onlsbc1 init.d]# /sbin/shutdown -h now
			:
Syncing hardware clock to system time                           [ OK ]
Turning off quotas:                                             [ OK ]
/etc/rc.d/S01halt: [/ramfs: No such file or dirctory
Halting system...
md: stopping all md devices.
flushing ide devices: hda hdc
Power down.

	ok.   正常にシャットダウンできた。 これで、Linuxシステムの一部を
	RAMディスク化する作業は完了。


---xxxx