ramdisk.image のシュリンク


ramdisk.image.gz を小さくすれば、 /dev/fl1 にもうひとつカーネルが入るのでは? と思いついた。

今度はちゃんと計算するぞっと

玄箱のファームウェア 1.02 の場合、
fl1 の容量:3MB
使用量(firmimg.bin のサイズ):0x 002b 713a(2847034)
vmlinux.gz のサイズ:0x 000a fa87(719495)

現在の空き:3 * 1024 * 1024 - 2847034 = 298694
シュリンク目標:719495 - 298694 = 420801

というわけで、 400KB 強シュリンクできればもうひとつカーネルが入ることになる。
ramdisk.image.gz のサイズは、0x0020 7647(2127431) なので、 おおよそ 4/5 にすればよい。

ramdisk.image.gz の展開

まずは、ramdisk.image.gz を展開する
[root@giga /tmp]# gunzip ramdisk.image.gz
[root@giga /tmp]# mkdir root
[root@giga /tmp]# mount -o loop ramdisk.image root

busybox 化

busybox でサポートされているにもかかわらず busybox にシンボリックリンクされていないコマンドを探す
busybox でサポートされているコマンドは、strings して調べると
zcat
which
usleep
uptime
uname
umount
true
touch
time
test
tail
syslogd
sync
swapon
swapoff
stty
sort
sleep
rmdir
reset
pidof
mount
more
mkswap
mkdir
md5sum
logread
killall
kill
gzip
gunzip
grep
getopt
free
find
false
expr
echo
dmesg
dirname
date
cpio
clear
chvt
chroot
chown
chmod
chgrp
basename
これだけのよう。
それぞれのコマンドが、 busybox にシンボリックリンクされているか調べると、、、
-rwsr-xr-x    1 root     root        39192 Mar 18 11:33 ./bin/umount
-rwxr-xr-x    1 root     root        29804 Mar 18 11:33 ./bin/touch
-rwxr-xr-x    1 root     root        12108 Mar 18 11:33 ./bin/sync
-rwxr-xr-x    1 root     root        34420 Mar 18 11:33 ./bin/stty
-rwxr-xr-x    1 root     root        13468 Mar 18 11:33 ./bin/rmdir
-rwsr-xr-x    1 root     root        74516 Mar 18 11:33 ./bin/mount
-rwxr-xr-x    1 root     root        21376 Mar 18 11:33 ./bin/mkdir
-rwxr-xr-x    1 root     root        14356 Mar 18 11:33 ./sbin/killall
-r-xr-xr-x    1 root     root        12648 Mar 18 11:33 ./bin/kill
-rwxr-xr-x    1 root     root        13612 Mar 18 11:33 ./bin/echo
-rwxr-xr-x    1 root     root        22284 Mar 18 11:33 ./bin/chown
-rwxr-xr-x    1 root     root        19984 Mar 18 11:33 ./bin/chmod
これだけがシンボリックリンクされていない。
250KB ほど、get!
[root@giga bin]# df
ファイルシステム    1k-ブロック   使用中      空き 使用% マウント場所
/tmp/ramdisk.image        9677      4761      4916  50% /tmp/root

ap_servd

いらね。
[root@giga root]# ls -l etc/ap_servd.* usr/sbin/ap_*
-rwxr--r--    1 root     root           61 Mar 31  2002 etc/ap_servd.conf
-rw-r--r--    1 root     root           13 Dec 20  2002 etc/ap_servd.log
-rwxr-xr-x    1 root     root        42308 Mar 18 11:33 usr/sbin/ap_servd
42KB ほど get!
[root@giga root]# df
ファイルシステム    1k-ブロック   使用中      空き 使用% マウント場所
/tmp/ramdisk.image        9677      4716      4961  49% /tmp/root

/etc/rc[3-5].d

runlevel 3, 4, 5 は使用されていないので、削除
[root@giga root]# ls -l etc/rc.d/rc[3-5].d/*
lrwxrwxrwx    1 root     root           18 Mar 18 11:34 etc/rc.d/rc3.d/S10syslog -> /etc/init.d/syslog
lrwxrwxrwx    1 root     root           17 Mar 18 11:34 etc/rc.d/rc3.d/S20inetd -> /etc/init.d/inetd
lrwxrwxrwx    1 root     root           19 Mar 18 11:34 etc/rc.d/rc3.d/S20logoutd -> /etc/init.d/logoutd
-rwxr-xr-x    1 root     root          807 Dec  1  2002 etc/rc.d/rc3.d/S20thttpd
-rwxr-xr-x    1 root     root          933 Jan 11  2003 etc/rc.d/rc3.d/S89cron
lrwxrwxrwx    1 root     root           15 Mar 18 11:34 etc/rc.d/rc3.d/S90atalk -> ../init.d/atalk
lrwxrwxrwx    1 root     root           13 Mar 18 11:34 etc/rc.d/rc3.d/S91smb -> ../init.d/smb
lrwxrwxrwx    1 root     root           19 Mar 18 11:34 etc/rc.d/rc3.d/S95ppc_uartd -> ../init.d/ppc_uartd
lrwxrwxrwx    1 root     root           21 Mar 18 11:34 etc/rc.d/rc3.d/S99rmnologin -> /etc/init.d/rmnologin
lrwxrwxrwx    1 root     root           18 Mar 18 11:34 etc/rc.d/rc4.d/S10syslog -> /etc/init.d/syslog
lrwxrwxrwx    1 root     root           17 Mar 18 11:34 etc/rc.d/rc4.d/S20inetd -> /etc/init.d/inetd
lrwxrwxrwx    1 root     root           19 Mar 18 11:34 etc/rc.d/rc4.d/S20logoutd -> /etc/init.d/logoutd
-rwxr-xr-x    1 root     root          807 Dec  1  2002 etc/rc.d/rc4.d/S20thttpd
-rwxr-xr-x    1 root     root          933 Jan 11  2003 etc/rc.d/rc4.d/S89cron
lrwxrwxrwx    1 root     root           15 Mar 18 11:34 etc/rc.d/rc4.d/S90atalk -> ../init.d/atalk
lrwxrwxrwx    1 root     root           13 Mar 18 11:34 etc/rc.d/rc4.d/S91smb -> ../init.d/smb
lrwxrwxrwx    1 root     root           19 Mar 18 11:34 etc/rc.d/rc4.d/S95ppc_uartd -> ../init.d/ppc_uartd
lrwxrwxrwx    1 root     root           21 Mar 18 11:34 etc/rc.d/rc4.d/S99rmnologin -> /etc/init.d/rmnologin
lrwxrwxrwx    1 root     root           18 Mar 18 11:34 etc/rc.d/rc5.d/S10syslog -> /etc/init.d/syslog
lrwxrwxrwx    1 root     root           17 Mar 18 11:34 etc/rc.d/rc5.d/S20inetd -> /etc/init.d/inetd
lrwxrwxrwx    1 root     root           19 Mar 18 11:34 etc/rc.d/rc5.d/S20logoutd -> /etc/init.d/logoutd
-rwxr-xr-x    1 root     root          807 Dec  1  2002 etc/rc.d/rc5.d/S20thttpd
-rwxr-xr-x    1 root     root          933 Jan 11  2003 etc/rc.d/rc5.d/S89cron
lrwxrwxrwx    1 root     root           15 Mar 18 11:34 etc/rc.d/rc5.d/S90atalk -> ../init.d/atalk
lrwxrwxrwx    1 root     root           13 Mar 18 11:34 etc/rc.d/rc5.d/S91smb -> ../init.d/smb
lrwxrwxrwx    1 root     root           19 Mar 18 11:34 etc/rc.d/rc5.d/S95ppc_uartd -> ../init.d/ppc_uartd
lrwxrwxrwx    1 root     root           21 Mar 18 11:34 etc/rc.d/rc5.d/S99rmnologin -> /etc/init.d/rmnologin
6KB ほど get!
[root@giga root]# df
ファイルシステム    1k-ブロック   使用中      空き 使用% マウント場所
/tmp/ramdisk.image        9677      4710      4967  49% /tmp/root

/proc

/proc のごみ掃除。8KB ほど get!
[root@giga proc]# df
ファイルシステム    1k-ブロック   使用中      空き 使用% マウント場所
/tmp/ramdisk.image        9677      4702      4975  49% /tmp/root

存在しない sym-link

etc/rc.d/rc0.d:
lrwxrwxrwx    1 root     root           14 Mar 18 11:34 K11cron -> ../init.d/cron
lrwxrwxrwx    1 root     root           16 Mar 18 11:34 K20thttpd -> ../init.d/thttpd
lrwxrwxrwx    1 root     root           17 Mar 18 11:34 K30urandom -> ../init.d/urandom
lrwxrwxrwx    1 root     root           15 Mar 18 11:34 K90atalk -> ../init.d/atalk
lrwxrwxrwx    1 root     root           13 Mar 18 11:34 K91smb -> ../init.d/smb

etc/rc.d/rc1.d:
-rwxr-xr-x    1 root     root          933 Jan 11  2003 K11cron
-rwxr-xr-x    1 root     root          807 Dec  1  2002 K20thttpd
-rwxr-xr-x    1 root     root          780 Dec  1  2002 K30ppc_uartd
lrwxrwxrwx    1 root     root           15 Mar 18 11:34 K90atalk -> ../init.d/atalk
lrwxrwxrwx    1 root     root           13 Mar 18 11:34 K91smb -> ../init.d/smb

etc/rc.d/rc2.d:
lrwxrwxrwx    1 root     root           17 Mar 18 11:34 S20apservd -> ../init.d/apservd
lrwxrwxrwx    1 root     root           16 Mar 18 11:34 S20thttpd -> ../init.d/thttpd
lrwxrwxrwx    1 root     root           14 Mar 18 11:34 S89cron -> ../init.d/cron
lrwxrwxrwx    1 root     root           15 Mar 18 11:34 S90atalk -> ../init.d/atalk
lrwxrwxrwx    1 root     root           13 Mar 18 11:34 S91smb -> ../init.d/smb

etc/rc.d/rc6.d:
-rwxr-xr-x    1 root     root          933 Jan 11  2003 K11cron
-rwxr-xr-x    1 root     root          807 Dec  1  2002 K20thttpd
lrwxrwxrwx    1 root     root           19 Mar 18 11:34 K30urandom -> /etc/init.d/urandom
lrwxrwxrwx    1 root     root           15 Mar 18 11:34 K90atalk -> ../init.d/atalk
lrwxrwxrwx    1 root     root           13 Mar 18 11:34 K91smb -> ../init.d/smb

etc/rc.d/rcS.d:
合計 0
lrwxrwxrwx    1 root     root           29 Mar 18 11:34 S36default_hostname.sh -> ../init.d/default_hostname.sh
lrwxrwxrwx    1 root     root           21 Mar 18 11:34 S37load_config.sh -> ../init.d/load_config
lrwxrwxrwx    1 root     root           25 Mar 18 11:34 S45set_hostname.sh -> ../init.d/set_hostname.sh
lrwxrwxrwx    1 root     root           18 Mar 18 11:34 S48mkshinfo -> ../init.d/mkshinfo
lrwxrwxrwx    1 root     root           18 Mar 18 11:34 S50chkshare -> ../init.d/chkshare
lrwxrwxrwx    1 root     root           17 Mar 18 11:34 S55urandom -> ../init.d/urandom
lrwxrwxrwx    1 root     root           16 Mar 18 11:34 S85hdparm -> ../init.d/hdparm
4KB ほど get!
[root@giga rc.d]# df
ファイルシステム    1k-ブロック   使用中      空き 使用% マウント場所
/tmp/ramdisk.image        9677      4698      4979  49% /tmp/root

ramdisk.image.gz の再作成

このあたりで様子を見るために ramdisk.image.gz を作る
[root@giga rc.d]# cd /tmp/root
[root@giga root]# tar zcvf ../root.tar.gz .
	:
	:
[root@giga root]# cd /tmp
[root@giga /tmp]# umount /tmp/root
[root@giga /tmp]# rm -f /tmp/ramdisk.image
[root@giga /tmp]# dd if=/dev/zero of=/tmp/ramdisk.image bs=1k count=5000
読み込んだブロック数は 5000+0
書き込んだブロック数は 5000+0
[root@giga /tmp]# ls -l /tmp/ramdisk.image
-rw-r--r--    1 root     root      5120000 Jul  6 22:47 /tmp/ramdisk.image
[root@giga /tmp]# mkfs /tmp/ramdisk.image
mke2fs 1.29 (24-Sep-2002)
/tmp/ramdisk.image is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1256 inodes, 5000 blocks
250 blocks (5.00%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
1256 inodes per group

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

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@giga /tmp]# mount -o loop ramdisk.image /tmp/root
[root@giga /tmp]# cd /tmp/root
[root@giga root]# tar zxvf ../root.tar.gz
	:
	:
[root@giga root]# cd ..
[root@giga /tmp]# umount /tmp/root
[root@giga /tmp]# gzip -9 ramdisk.image
[root@giga /tmp]# ls -l ramdisk.image.gz
-rw-r--r--    1 root     root      2000028 Jul  6 22:47 ramdisk.image.gz
ぜーんぜん小さくなってない。失敗
ハックの記録 → 玄箱+ハックキットでミラーリング(RAID 1)

Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp
山下康成京都府向日市