こんにちは、宮脇です。
K.Iwaiさんの最初のポスト[knoppix:2445]でピンと来たものがあって、
すぐにレスをつければよかったのですが、実験の方を優先させてしまいました。
実験中に12/18にアップしたminiroot.gzにチョンボに気付き(toramオプションを
省略すると起動しない状態になっていたのです)、その対策も急いだので・・・
その間に、こんなにレスが付いていたのですね。
結論から言いますと、inode数不足が原因でした。
toramオプションを指定するとウマくいくのは、inode数不足でエラーになる前に、
/ramdiskの空き容量不足でエラーになるからです。
後者では、エラーになった後でtar.gzファイルを削除するので、tar.gzファイルの
展開がすべて異常終了した時点で20MB弱の空きが残ります。
その分、メモリにも空きが残っていたので、残りの起動処理が成功したのだと
思います。
tmpfsではnr_inodesオプションをつけると、inode数を指定できます。
KNOPPIX実験室に12/18にアップしたminiroot.gzに、この対策を入れたものは、
今朝、アップしてあります。
サイズが1309KBもあるので、1.44MBのブートFDイメージには入りません。
私は、GRUBでFAT32から起動するときに使っていますが、CDブートで使うには、
2.88MBのブートFDイメージにするか、ISOLINUXを使う必要があります。
オリジナルのminiroot.gzの修正版もアップしたかったのですが、サイト容量制限
でアップできませんでした。linuxrcを一部修正するだけでよいので、以下に
修正箇所を示します。
#修正前のファイルがなくなっていたので、行番号と変更前は推定です。
#改行と自動折り返しの違いに注意してください。
-----------行295付近-----------
(変更前)
RAMSIZE=$(expr $RAMSIZE1PER \* $RAMLEVEL)
RAMSIZEBYTE=$(expr $RAMSIZE \* 1024)
echo "${CRE}${BLUE}Creating ${YELLOW}/ramdisk${BLUE} (dynamic
size=${RAMSIZE}k,nr_inodes=${NR}) on ${MAGENTA}shared
memory${BLUE}...${NORMAL}"
(変更後)
RAMSIZE=$(expr $RAMSIZE1PER \* $RAMLEVEL)
RAMSIZEBYTE=$(expr $RAMSIZE \* 1024)
if test "$RAMSIZE" -gt "100000"; then
NR=$(expr $RAMSIZE \/ 4 + 50000)
elif test "$RAMSIZE" -gt "50000"; then
NR=$(expr $RAMSIZE \/ 2 + 25000)
else
NR="$RAMSIZE"
fi
echo "${CRE}${BLUE}Creating ${YELLOW}/ramdisk${BLUE} (dynamic
size=${RAMSIZE}k,nr_inodes=${NR}) on ${MAGENTA}shared
memory${BLUE}...${NORMAL}"
-----------行315付近、および、行347付近-----------
(変更前)
/bin/mount -t tmpfs -o size=${RAMSIZEBYTE} /dev/shm /ramdisk
(変更後)
/bin/mount -t tmpfs -o size=${RAMSIZEBYTE},nr_inodes=${NR} /dev/shm /ramdisk
|