Nov 8, 2002 onlsbc1: コンパクトフラッシュ上のLinuxシステムの読み出し専用化 --- RAMディスク #2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/para-CAMAC/ Work/SBC-RAM2.html) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 目的 並列CAMACで使用するSBC上のLinuxシステムを、コンパクトフラッシュ上に 構築した。 コンパクトフラッシュ上に、現在構築してあるLinuxシステムは 通常のシステムと同じで、システムはコンパクトフラッシュに対して読み 書きを行っている。 ここで注意すべきことは、コンパクトフラッシュには 構造上書き込み回数に限界があるという点である。 したがって、コンパク トフラッシュ上のシステムは、読み出し専用として構築するのが望ましい。 読み出し専用化システムの構築作業をするために、256MBのコンパクトフ ラッシュ上Linuxシステムを構築した。 このコンパクトフラッシュを使っ て読み出し専用化システムを構築する。 (1). 方針 (2). /etc/rc.d/rc.sysinit の調査 (3). /etc/rc.d/rc.sysinit の修正 (4). ブートテスト -------------------------------------------------------------------- (1). 方針 コンパクトフラッシュは書き込み回数に限界があるので読み出し専用として使用 するのが望ましい。 ここでは、コンパクトフラッシュを読み出し専用化する ために、/var、/tmp、/etcなどのRAMディスク化について検討する。 テストでは 256MBのコンパクトフラッシュを使う。 /etc/rc.d下のスクリプト、rc.sysinit を修正してRAMディスク化の処理を行う。 (1-1). コンパクトフラッシュ上のファイル構成 ./SBC-RAM1.html で処理後の、現在の /ディレクトリ構成は次のとおり。 [root@onlsbc1 mnt1]# df -k Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda2 7360792 2217228 4769652 32% / /dev/hda5 10475668 159388 9784132 2% /home none 152332 0 152332 0% /dev/shm /dev/hdc1 241949 223070 6387 98% /mnt1 [root@onlsbc1 mnt1]# pwd /mnt1 [root@onlsbc1 mnt1]# ls -l 合計 113 drwxr-xr-x 2 root root 2048 10月 24 22:53 bin drwxr-xr-x 3 root root 1024 10月 29 09:50 boot drwxr-xr-x 18 root root 82944 10月 30 15:45 dev lrwxrwxrwx 1 root root 9 10月 28 15:22 etc -> ramfs/etc drwxr-xr-x 4 root root 1024 10月 24 23:02 home drwxr-xr-x 2 root root 1024 6月 22 2001 initrd drwxr-xr-x 6 root root 3072 10月 24 22:58 lib drwx------ 2 root root 12288 10月 24 22:28 lost+found drwxr-xr-x 3 root root 1024 10月 24 14:07 mnt drwxr-xr-x 2 root root 1024 10月 24 15:15 mnt1 drwxr-xr-x 2 root root 1024 10月 24 16:21 mnt2 drwxr-xr-x 2 root root 1024 8月 24 1999 opt drwxr-xr-x 2 root root 1024 10月 24 22:28 proc drwxr-xr-x 5 root root 1024 10月 28 15:21 ramfs drwxr-x--- 2 root root 1024 10月 24 14:26 root drwxr-xr-x 2 root root 3072 10月 24 22:57 sbin lrwxrwxrwx 1 root root 9 10月 28 15:22 tmp -> ramfs/tmp drwxr-xr-x 15 root root 1024 10月 24 22:50 usr lrwxrwxrwx 1 root root 9 10月 28 15:22 var -> ramfs/var [root@onlsbc1 mnt1]# (1-2). コンパクトフラッシュ上のファイル構成の変更 /etc/rc.d/rc.sysinitファイルの中で、RAMディスク構築の作業を行うので、 initrd実行後には /etc下のディレクトリ構造は存在していなければならない。 図2の構成に変更する。 (1-2-1). /mnt1/mnt/ramfsディレクトリ以下を削除 [root@onlsbc1 mnt1]# rmdir /mnt1/mnt/ramfs [root@onlsbc1 mnt1]# (1-2-2). /mnt1/etc、/mnt1/tmp、/mnt1/varシンボリックリンクの変更 [root@onlsbc1 mnt1]# pwd /mnt1 [root@onlsbc1 mnt1]# ls -l 合計 113 drwxr-xr-x 2 root root 2048 10月 24 22:53 bin drwxr-xr-x 3 root root 1024 10月 29 09:50 boot drwxr-xr-x 18 root root 82944 10月 30 15:45 dev lrwxrwxrwx 1 root root 9 10月 28 15:22 etc -> ramfs/etc drwxr-xr-x 4 root root 1024 10月 24 23:02 home drwxr-xr-x 2 root root 1024 6月 22 2001 initrd drwxr-xr-x 6 root root 3072 10月 24 22:58 lib drwx------ 2 root root 12288 10月 24 22:28 lost+found drwxr-xr-x 3 root root 1024 10月 31 17:20 mnt drwxr-xr-x 2 root root 1024 10月 24 15:15 mnt1 drwxr-xr-x 2 root root 1024 10月 24 16:21 mnt2 drwxr-xr-x 2 root root 1024 8月 24 1999 opt drwxr-xr-x 2 root root 1024 10月 24 22:28 proc drwxr-xr-x 5 root root 1024 10月 28 15:21 ramfs drwxr-x--- 2 root root 1024 10月 24 14:26 root drwxr-xr-x 2 root root 3072 10月 24 22:57 sbin lrwxrwxrwx 1 root root 9 10月 28 15:22 tmp -> ramfs/tmp drwxr-xr-x 15 root root 1024 10月 24 22:50 usr lrwxrwxrwx 1 root root 9 10月 28 15:22 var -> ramfs/var [root@onlsbc1 mnt1]# すでにramfs下にシンボリックリンクされている。 (1-3). RAMディスク化のための操作手順 RAMディスク化のためのコマンドは /mnt1/etc/rc.d/rc.sysinitファイルの中に 追記する。 ここで行う操作は、 (1). RAMディスクを初期化する。 (2). /mnt1/ramfs下のファイルをRAMディスクにコピーする。 (3). RAMディスクを /ramfsにマウントする。 である。 (1-4). カーネルパラメータについてのチェック RAMディスク用に確保すべきサイズを調べる。 [root@onlsbc1 ramfs]# pwd /mnt1/ramfs [root@onlsbc1 ramfs]# ls -l 合計 5 drwxr-xr-x 31 root root 3072 10月 30 15:45 etc drwxrwxrwt 3 root root 1024 10月 30 15:37 tmp drwxr-xr-x 16 root root 1024 10月 24 22:58 var [root@onlsbc1 ramfs]# du -k 121 ./etc/sysconfig/network-scripts 1 ./etc/sysconfig/console 1 ./etc/sysconfig/networking/devices : 261 ./var/www 23145 ./var 28286 . [root@onlsbc1 ramfs]# ramfs下の etc、tmp、varを収めるRAMディスクのサイズは約28.3MB必要である。 カーネルが作成できるRAMディスクの最大サイズは、標準では4MBである。 Red Hat Linux ディストリビューションで採用されているカーネル組み込み型の ドライバの場合は、カーネル起動時に "ramdisk_size=32" のようにオプション を渡せば、最大サイズを変更できる。 この例では32MBの最大サイズに変更した ことになる。 チェック: 2.5"IDEハードディスク上のLinuxシステムを、"ramdisk_size=32"のオプション で起動し直して、RAMディスクのサイズを確かめてみる。 /boot/grub/grub.conf に項目を追加した。 [root@onlsbc1 inoue]# cat /boot/grub/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,1) # kernel /boot/vmlinuz-version ro root=/dev/hda2 # initrd /boot/initrd-version.img #boot=/dev/hda default=1 timeout=10 splashimage=(hd0,1)/boot/grub/splash.xpm.gz title Red Hat Linux (2.4.18-3custom-Oct7-2002) # root (hd0,1) root (hd0,0) # kernel /boot/vmlinuz-2.4.18-3custom-Oct7-2002 ro root=/dev/hda2 kernel /boot/vmlinuz-2.4.18-3custom-Oct7-2002 ro root=/dev/hda1 initrd /boot/initrd-2.4.18-3custom-Oct7-2002.img title Red Hat Linux 7.3 (2.4.18-3) root (hd0,1) kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda2 initrd /boot/initrd-2.4.18-3.img title Testing Step #1: Go to /dev/hda1 root (hd0,0) makeactive chainloader +1 title Compact Flash Red Hat Linux (2.4.18-3) root (hd1,0) kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hdc1 initrd /boot/initrd-2.4.18-3.img title RAM SIZE=32MB, Red Hat Linux 7.3 (2.4.18-3) root (hd0,1) kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda2 ramdisk_size=32768 initrd /boot/initrd-2.4.18-3.img [root@onlsbc1 inoue]# システムをリブートする。 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]# [root@onlsbc1 inoue]# mount -n -o rw /dev/ram0 /mnt2 [root@onlsbc1 inoue]# df -k Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda2 7360792 2216812 4770068 32% / /dev/hda5 10475668 159416 9784104 2% /home none 152332 0 152332 0% /dev/shm /dev/hdc1 241949 223070 6387 98% /mnt1 [root@onlsbc1 inoue]# ls -l /mnt2 合計 12 drwx------ 2 root root 12288 10月 31 14:16 lost+found [root@onlsbc1 inoue]# [root@onlsbc1 inoue]# cd /mnt1 [root@onlsbc1 mnt1]# ls -l 合計 113 drwxr-xr-x 2 root root 2048 10月 24 22:53 bin drwxr-xr-x 3 root root 1024 10月 29 09:50 boot drwxr-xr-x 18 root root 82944 10月 30 15:45 dev lrwxrwxrwx 1 root root 9 10月 28 15:22 etc -> ramfs/etc drwxr-xr-x 4 root root 1024 10月 24 23:02 home drwxr-xr-x 2 root root 1024 6月 22 2001 initrd drwxr-xr-x 6 root root 3072 10月 24 22:58 lib drwx------ 2 root root 12288 10月 24 22:28 lost+found drwxr-xr-x 3 root root 1024 10月 24 14:07 mnt drwxr-xr-x 2 root root 1024 10月 24 15:15 mnt1 drwxr-xr-x 2 root root 1024 10月 24 16:21 mnt2 drwxr-xr-x 2 root root 1024 8月 24 1999 opt drwxr-xr-x 2 root root 1024 10月 24 22:28 proc drwxr-xr-x 5 root root 1024 10月 28 15:21 ramfs drwxr-x--- 2 root root 1024 10月 24 14:26 root drwxr-xr-x 2 root root 3072 10月 24 22:57 sbin lrwxrwxrwx 1 root root 9 10月 28 15:22 tmp -> ramfs/tmp drwxr-xr-x 15 root root 1024 10月 24 22:50 usr lrwxrwxrwx 1 root root 9 10月 28 15:22 var -> ramfs/var [root@onlsbc1 mnt1]# cp -ar ramfs /mnt2 cp: cannot open `ramfs/tmp/.kon1' for reading: そのようなデバイスやアドレスはあ りません [root@onlsbc1 mnt1]# cd /mnt2 [root@onlsbc1 mnt2]# ls -l 合計 13 drwx------ 2 root root 12288 10月 31 14:16 lost+found drwxr-xr-x 5 root root 1024 10月 28 15:21 ramfs [root@onlsbc1 mnt2]# du -k 12 ./lost+found 121 ./ramfs/etc/sysconfig/network-scripts 1 ./ramfs/etc/sysconfig/console 1 ./ramfs/etc/sysconfig/networking/devices : 261 ./ramfs/var/www 23146 ./ramfs/var 28287 ./ramfs 28300 . [root@onlsbc1 mnt2]# ok. 28.3MBのファイルをRAMディスクに書き込むことができた。 (1-5). /mnt1/boot/grub/grub.confファイルの修正 コンパクトフラッシュ上のLinuxシステムを起動する際のカーネルパラメータを 修正して、32MBまでのRAMディスクを作成できるようにする。 [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, 755C written [root@onlsbc1 grub]# (1-6). /mnt1/ramfs/tmp下のファイルの再チェック 上記の項目(1-3)のチェック時にramfs/tmp下のファイルのサイズが気になった ので各ファイルを再度チェックする。 各ファイルを再度チェックする。 [root@onlsbc1 ramfs]# pwd /mnt1/ramfs [root@onlsbc1 ramfs]# ls -lRa .: 合計 7 drwxr-xr-x 5 root root 1024 10月 28 15:21 . : ./tmp: 合計 3016 drwxrwxrwt 3 root root 1024 10月 30 15:37 . drwxr-xr-x 5 root root 1024 10月 28 15:21 .. drwxrwxrwx 2 bin bin 1024 10月 30 15:45 .iroha_unix srwxrwxr-x 1 inoue inoue 0 10月 24 14:18 .kon1 -rw-r--r-- 1 root root 3072000 10月 24 15:18 initrd.tmp ./tmp/.iroha_unix: 合計 2 drwxrwxrwx 2 bin bin 1024 10月 30 15:45 . drwxrwxrwt 3 root root 1024 10月 30 15:37 .. : [root@onlsbc1 ramfs]# ramfs/tmp/initrd.tmpのファイルは削除する。 [root@onlsbc1 tmp]# pwd /mnt1/ramfs/tmp [root@onlsbc1 tmp]# ls -l 合計 3013 -rw-r--r-- 1 root root 3072000 10月 24 15:18 initrd.tmp [root@onlsbc1 tmp]# rm initrd.tmp rm: remove `initrd.tmp'? y [root@onlsbc1 tmp]# [root@onlsbc1 ramfs]# pwd /mnt1/ramfs [root@onlsbc1 ramfs]# du -k 261 ./var/www 23145 ./var 25273 . [root@onlsbc1 ramfs]# 約25.3MBになった。 (2). /mnt1/etc/rc.d/rc.sysinit の調査 /mnt1/etc/rc.d/rc.sysinitファイルの内容をチェックする。 [inoue@onlsbc1 rc.d]$ df -k Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda2 7360792 2218440 4768440 32% / /dev/hda5 10475668 160120 9783400 2% /home none 152332 0 152332 0% /dev/shm /dev/hdc1 241949 220057 9400 96% /mnt1 [inoue@onlsbc1 rc.d]$ pwd /mnt1/etc/rc.d [inoue@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 [inoue@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]$ (3). /mnt1/etc/rc.d/rc.sysinit の修正 rc.sysinitファイルの記述の中の以下の部分に、RAMディスク化のためのコマン ドを追記する。 # Mount /proc (done here so volume labels can work with fsck) : <--- この部分にRAMディスク化のためのコマンドを追記 : # Unmount the initrd, if necessary [root@onlsbc1 rc.d]# pwd /mnt1/etc/rc.d [root@onlsbc1 rc.d]# ls -l 合計 36 drwxr-xr-x 2 root root 1024 10月 24 22:58 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 10月 24 22:58 rc0.d drwxr-xr-x 2 root root 1024 10月 24 22:58 rc1.d drwxr-xr-x 2 root root 1024 10月 24 22:58 rc2.d drwxr-xr-x 2 root root 1024 10月 24 22:58 rc3.d drwxr-xr-x 2 root root 1024 10月 24 22:58 rc4.d drwxr-xr-x 2 root root 1024 10月 24 22:58 rc5.d drwxr-xr-x 2 root root 1024 10月 24 22:58 rc6.d [root@onlsbc1 rc.d]# vi rc.sysinit : # Mount /proc (done here so volume labels can work with fsck) action $"Mounting proc filesystem: " mount -n -t proc /proc /proc # <-- by E.Inoue : from here /sbin/mke2fs -q /dev/ram0 32768 mount -n -o rw /dev/ram0 /mnt1 cp -ar /ramfs /mnt1 umount -n /mnt1 mount -n -o rw /dev/ram0 /ramfs # --> to here # Unmount the initrd, if necessary : "rc.sysinit" 789L, 22554C written [root@onlsbc1 rc.d]# (4). ブートテスト コンパクトフラッシュ上のLinuxシステムを立ち上げてみる。 (4-1). 2.5"ハードディスクのMBR部の修正 [root@onlsbc1 grub]# pwd /boot/grub [root@onlsbc1 grub]# vi grub.conf title RAM SIZE=32MB, Compact Flash Red Hat Linux (2.4.18-3) root (hd1,0) makeactive chainloader +1 : "grub.conf" 45L, 1399C written [root@onlsbc1 grub]# これで、2.5"ハードディスクのMBR部の grubから /dev/hdc1のコンパクト フラッシュの grubへ制御を渡す。 (4-2). コンパクトフラッシュ上のLinuxシステムを立ち上げる [root@onlsbc1 inoue]# reboot 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が実行され以下の状況になった。 : INIT: version 2.84 booting Welcome to Red Hat Linux Press 'I' to enter interactive startup Mounting proc filesystem: [OK] mke2fs 1.27 (8-Mar-2002) cp: cannot create directory '/mnt1/ramfs': No space left on device : rc.sysinitスクリプトの中でこの段階では、/ はまだリードオンリーでマウント されている。 したがって、/mnt1 にマウントしたRAMディスクも書き込みが できない。 スクリプトのもっと後ろの方の、/ がリードライトで再マウント された以降でRAMディスク化の作業をしないといけないようだ。 rc.sysinit スクリプトを修正する。 (4-3). rc.sysinitスクリプトファイルの再修正 / がリードライトで再マウントされた以降で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 /mnt1/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]# vi rc.sysinit : # Remount the root filesystem read-write. : # 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 #/sbin/mke2fs /dev/ram0 32768 #/sbin/mke2fs /dev/ram0 65536 mount -n -o rw /dev/ram0 /mnt1 #mount -n -o rw /dev/ram0 /mnt #df -k #ls -l / #cp -ar /ramfs /mnt cp -ar /ramfs /mnt1 #cp -ar ramfs /mnt umount -n /mnt1 #umount -n /mnt mount -n -o rw /dev/ram0 /ramfs # --> to here # check remaining quotas other than root : "rc.sysinit" 797L, 22718C written [root@onlsbc1 rc.d]# (4-4). コンパクトフラッシュ上のLinuxシステムを立ち上げる(その2) [root@onlsbc1 inoue]# reboot 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が実行され以下の状況になった。 : INIT: version 2.84 booting Welcome to Red Hat Linux Press 'I' to enter interactive startup Mounting proc filesystem: [OK] mke2fs 1.27 (8-Mar-2002) ramfsディレクトリからRAMディスクへのファイルのコピー、およびRAMディスク を /ramfsへ再マウントは正常に終了した。 この直後の、 # check remaining quotas other than root の部分で、/etc/fstabファイルが見つからないというエラーになった。 : 調べたところ、RAMディスクにコピーした後のディレクトリ構成が /ramfs/ramfs/etc/fstab になってしまっていた。 これでは /ramfs/etc/fstab ファイルは見つからないはずである。 rc.sysinitファイルを修正する。 [root@onlsbc1 rc.d]# vi rc.sysinit : cp -ar /ramfs/* /mnt1 : [root@onlsbc1 rc.d]# 再度、システムを立ち上げる。 | V ブート処理は進んで、INITが実行され以下の状況になった。 : INIT: version 2.84 booting Welcome to Red Hat Linux Press 'I' to enter interactive startup Mounting proc filesystem: [OK] mke2fs 1.27 (8-Mar-2002) ramfsディレクトリからRAMディスクへのファイルのコピー、およびRAMディスク を /ramfsへ再マウントは正常に終了した。 この直後の、 # check remaining quotas other than root このの部分で表示されていた、/etc/fstabファイルが見つからないというエラー は出なくなった。 : Setting network parameters: [OK] Bringing up loopback interface: execvp: No such file or directory [FAILED] Bringing up interface eth0: execvp: No such file or directory [FAILED] Starting system logger: [OK] : システムは立ち上がった。 コンソールからはログインしてシステムが使用でき る。 ネットワークからはNG. ここで一旦、システムをシャットダウンしてみる。 : Turning off quotas: [OK] Unmounting file system: umount2: Device or resource busy umount: /ramfs: Illegal seek [FAILED] INIT: no more process left in this runlevel ここでフリーズする。 ALT-CTL-DELは利かない。 電源を切った。 (4-5). 問題点の処理 (A). システム立ち上げ時の問題点 loopback interface および eth0 interface の設定が正しくできて いない。 (B). システム立ち下げ時の問題点 /ramfs のアンマウントが正しくできていない。 (4-5-1). システム立ち上げ時の問題点についての対策 再確認のために、RAMディスク化の処理をしていないコンパクトフラッシュの Linuxシステムが正常に立ち上がれることを調べる。 /etc/rc.d/rc.sysinitファイルをオリジナルの状態に戻して、立ち上げてみる。 [root@onlsbc1 rc.d]# vi rc.sysinit : ## <-- by E.Inoue : from here #/sbin/mke2fs -q /dev/ram0 32768 ##/sbin/mke2fs /dev/ram0 32768 ##/sbin/mke2fs /dev/ram0 65536 #mount -n -o rw /dev/ram0 /mnt1 ##mount -n -o rw /dev/ram0 /mnt ##df -k ##ls -l / ##cp -ar /ramfs /mnt #cp -ar /ramfs/* /mnt1 #cp -ar ramfs /mnt #echo -n $"Finished cp ar /ramfs /mnt1 and sleep 10 " ##sleep 10 #umount -n /mnt1 ##umount -n /mnt #echo -n $"Finished umount /mnt1 and sleep 10 " ##sleep 10 #mount -n -o rw /dev/ram0 /ramfs #ls -l /ramfs #ls -l /ramfs/etc/fstab #echo -n $"Finished mount -n -o rw /dev/ram0 /ramfs and sleep 10 " #sleep 10 ## --> to here : "rc.sysinit" 817L, 23199C written [root@onlsbc1 rc.d]# システムをリブートする。 : Setting network parameters: [OK] Bringing up loopback interface: execvp: No such file or directory [FAILED] Bringing up interface eth0: execvp: No such file or directory [FAILED] Starting system logger: [OK] : RAMディスク化の処理をしていないのに、loopback interface、eth0 interface 設定が正常にできていない。 オリジナルのLinuxシステムを壊してしまった ようだ。 コンソールからログインしてシャットダウンしてみる。 : Shutting down system logger: [OK] Shutting down loopback interface: execvp: No such file or directory [FAILED] Flushing all chains: [OK] : : Flushing ide device: hda hdc Power down loopback interface のダウンでエラーだが他は問題ない。 念のために、カーネルオプションのRAMディスクサイズの指定もはずして起動し てみたが、症状は変わらない。 256MBコンパクトフラッシュのLinuxシステムをインストールし直すことに しよう。 (4-5-2). システム立ち下げ時の問題点についての対策 ---xxxx