LS-GL:EM モード(2)


なぜ EM モードになったかを調べる。

linuxrc

initrd の /linuxrc を見てみた。
EM モードになる条件は、3つ(+1)。
No.条件
1/etc/hddrootmode が存在しない
2/etc/rootfs_ok が存在しない状態でのブートが 3回以上連続した
3カーネルが持つファームウェアバージョンより /etc/linkstation_release のファームウェアバージョンが古い
今回は、2番目の 「/etc/rootfs_ok が存在しない状態でのブートが3回以上連続した」のが 原因のよう。

/etc/rootfs_ok を作っているのは?

HDD にあるファームの中に違いない。
[root@giga root]# cd etc/init.d/
[root@giga init.d]# grep rootfs_ok *
bootcomplete.sh:        ROOTFS_OK=/etc/rootfs_ok
[root@giga init.d]# grep ROOTFS_OK *
bootcomplete.sh:        ROOTFS_OK=/etc/rootfs_ok
bootcomplete.sh:        date > $ROOTFS_OK
/etc/rootfs_ok を作っているのは、 HDD にあるファームの /etc/init.d/bootcomplete.sh。
単に date の結果を書き込んでいる。

/etc/rootfs_ok を作ってみる

単に /etc/rootfs_ok があるだけでよいなら、作ってみる。

と、書いたもののここからが長かった。
オリジナルの HDD は S-ATA で、しかも /dev/sda2 は xfs。
xfs をマウントできるのは、Intel の実験機か、LS-GL。

LS-GLにマウント

LS-GL に実験用 HDD を IDE → S-ATA 変換して接続しブート。
オリジナルの HDD を S-ATA → USB 変換して接続
という、アダプタだらけ(汗)の接続をする。

root@UDE:~# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/sda2               484672    169272    315400  35% /
/dev/ram1                15360        80     15280   1% /mnt/ram
/dev/ls_disk1_1         190387     64205    116353  36% /boot
/dev/ls_disk1_6       19242992     14656  19228336   0% /mnt/disk1
/dev/ls_usbdisk2_1      194443     68319    116085  37% /mnt/usbdisk2
root@UDE:~# mkdir /tmp/root
root@UDE:~# mount /dev/sdb2 /tmp/root
XFS mounting filesystem sdb2
root@UDE:~#
root@UDE:~# cd /tmp/root/etc/
root@UDE:/tmp/root/etc# ls
apache                ld.so.conf            rsyncd.conf
apcupsd               linkstation_release   rsyncd.secret
atalk                 locale.alias          samba
cron                  localtime             security
daemonwatch.list      login.access          services
default               login.defs            shadow
dhcpc                 logrotate.d           shadow-
fstab                 melco                 shadow.orig
ftpusers              moduli                shells
group                 mtab                  skel
gshadow               nsswitch.conf         ssh_config
hddrootmode           ntp.conf              ssh_host_dsa_key
host.conf             openldap              ssh_host_dsa_key.pub
hosts                 pam.d                 ssh_host_key
hosts.deny            pam_smb.conf          ssh_host_key.pub
hotplug.d             passwd                ssh_host_rsa_key
inetd.conf            printcap              ssh_host_rsa_key.pub
init.d                profile               sshd_config
initrd_ver            profile.d             sysctl.conf
inittab               proftpd               syslog.conf
issue                 protocols             yp.conf
issue.net             resolv.conf
ld.so.cache           rootfs_booting
root@UDE:/tmp/root/etc# date > rootfs_ok
root@UDE:/tmp/root/etc# 
再起動 これでOKのはず。再起動してみる。
	:
linuxrc:choose operation (timeout 4[s])
 1:RamRoot other:HddRoot  ? -HddRoot-
kjournald starting.  Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
EXT3 FS on sda1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
XFS mounting filesystem sda2
Starting XFS recovery on filesystem: sda2 (dev: sda2)
Ending XFS recovery on filesystem: sda2 (dev: sda2)
PRODUCTID=0x00000009
KERNEL:2006/6/11 14:33:21
not found BUILDDATE
*** hddSys is old. use initrd mode. ***
	:
	:

BUFFALO INC. LinkStation series LS-GL(IESADA)
LS-GL-EM67A login:
まだあかんか。

"*** hddSys is old. use initrd mode. ***" になるのは、No.3 /proc/buffalo/firmware /etc/linkstation_release の整合が取れていない時。

再々確認

もう一度実験用 HDD からブート。
BUFFALO INC. LinkStation series LS-GL(IESADA)
UDE login: root
Password:
root@UDE:~# mkdir /tmp/root
root@UDE:~# mount /dev/sdb2 /tmp/root
XFS mounting filesystem sdb2
root@UDE:~# cd /tmp/root/etc/
root@UDE:/tmp/root/etc# cat linkstation_release
root@UDE:/tmp/root/etc# 
linkstation_release が空っぽ。
root@UDE:/tmp/root/etc# ls -l linkstation_release
-rw-r--r--    1 root     root           84 Jul 22 14:20 linkstation_release
あれ?84バイトある。
root@UDE:/tmp/root/etc# od -xc linkstation_release
0000000     0000    0000    0000    0000    0000    0000    0000    0000
          \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0000120
root@UDE:/tmp/root/etc#
何とオールゼロ。
実験用 HDD にコピーした /etc/linkstation_release は、
root@UDE:/tmp/root/etc# cat /etc/linkstation_release
VERSION=1.00
SUBVERSION=HDD 0.41
PRODUCTID=0x00000009
BUILDDATE=2006/06/15 10:15:16
root@UDE:/tmp/root/etc#
と中身あり。
root@UDE:/tmp/root/etc# ls -l /etc/linkstation_release
-rw-r--r--    1 root     root           84 Jul 22 14:20 /etc/linkstation_release
root@UDE:/tmp/root/etc#
日付もサイズも同じで中身が違う。
オールゼロなんて手で書込むはずも無し、 ヒョッとしてファイルシステムの不具合?

とりあえずコピーする。

root@UDE:/tmp/root/etc# cp /etc/linkstation_release linkstation_release
root@UDE:/tmp/root/etc#
もうこれで大丈夫だろう。

再再起動

linuxrc:choose operation (timeout 4[s])
 1:RamRoot other:HddRoot  ?   Vendor:           Model:                   Rev:
  Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi disk sdb at scsi2, channel 0, id 0, lun 0
Attached scsi generic sg1 at scsi2, channel 0, id 0, lun 0,  type 0
-HddRoot-
kjournald starting.  Commit interval 5 seconds
EXT3 FS on sda1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
XFS mounting filesystem sda2
PRODUCTID=0x00000009 PRODUCTID=0x00000009
KERNEL:2006/6/11 14:33:21
HDD:2006/6/15 10:15:16
-- CopyFromInitrdToHdd --
cp: /etc/init.d/develop.sh: No such file or directory
checking local disk....
fsck 1.27 (8-Mar-2002)
e2fsck 1.27 (8-Mar-2002)
/dev/ls_disk1_1: clean, 16/50200 files, 74657/200781 blocks
done
XFS mounting filesystem sda2
VFS: Mounted root (xfs filesystem).
Trying to move old root to /initrd ... failed
Unmounting old root
Trying to free ramdisk memory ... okay
Freeing init memory: 112K
/sbin/initKernel panic - not syncing: Attempted to kill init!
: error while lo ading shared lib<0>Rebooting in 5 seconds..raries: libbuffalo_bin.so: cannot open shared object file: No such file or directory
>miconCntl_Reboot
>miconCntl_ShutdownWait


=== BUFFALO LS-GL U-Boot. ===
 ** LOADER **
 ** BUFFALO BOARD: BUFFALO_BOARD_LS_GL LE
カーネルパニックして、再起動が始まった。 その後、
	:
*** not found /mnt/etc/rootfs_ok file in rootfs. ***
chars=      8
** over max retry. use initrd mode. **
	:
	:
BUFFALO INC. LinkStation series LS-GL(IESADA)
LS-GL-EM67A login:
相変わらず EM モード。落ち着け!。
libbuffalo_bin.so: cannot open shared object file: No such file or directory ってどういうことよ。

linkstation_release がオールゼロになっていたり、 あるはずのファイルがなかったり。 なんかおかしいんちゃう?

シリアルコンソールがあるからこうやって対処できているけど、 シリアルコンソールがなかったらお手上げだろうな。

再々度確認

またまた実験用 HDD からブート。

まずは、fsck をかける。

root@UDE:~# fsck -f -y /dev/sdb1
fsck 1.27 (8-Mar-2002)
e2fsck 1.27 (8-Mar-2002)
/dev/sdb1 is mounted.

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? no

check aborted.
root@UDE:~# umount /dev/sdb1
umount: /dev/sdb1: not mounted
root@UDE:~# fsck -f -y /dev/sdb1
fsck 1.27 (8-Mar-2002)
e2fsck 1.27 (8-Mar-2002)
/dev/sdb1 is mounted.

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? no

check aborted.
root@UDE:~# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/sda2               484672    169228    315444  35% /
/dev/ram1                15360        80     15280   1% /mnt/ram
/dev/ls_disk1_1         190387     64205    116353  36% /boot
/dev/ls_disk1_6       19242992     14656  19228336   0% /mnt/disk1
/dev/ls_usbdisk2_1      194443     68319    116085  37% /mnt/usbdisk2
root@UDE:~# umount /mnt/usbdisk2
root@UDE:~# !fsck
fsck -f -y /dev/sdb1
fsck 1.27 (8-Mar-2002)
e2fsck 1.27 (8-Mar-2002)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 16/50200 files (18.8% non-contiguous), 74657/200781 blocks
root@UDE:~# xfs_check /dev/sdb2
root@UDE:~# xfs_check /dev/sdb6
root@UDE:~#
libbuffalo_bin.so をコピーする。
root@UDE:~# find / -name libbuffalo_bin.so -print
/usr/local/lib/libbuffalo_bin.so
root@UDE:~# mkdir /tmp/root
root@UDE:~# mount /dev/sdb2 /tmp/root
XFS mounting filesystem sdb2
root@UDE:~# ls -l /tmp/root/usr/local/lib/libbuffalo_bin.*
-rwxr-xr-x    1 root     root        28644 Jun 11 14:49 /tmp/root/usr/local/lib/libbuffalo_bin.a
-rwxr-xr-x    1 root     root        22601 Jun 11 14:49 /tmp/root/usr/local/lib/libbuffalo_bin.so
root@UDE:~# (cd /usr/local/lib; tar cf - libbuffalo* )|(cd /tmp/root/usr/local/lib ; tar xvf -)
libbuffalo_bin.so
libbuffalo_bin.a
続いて、前回の操作をもう一回。
root@UDE:~# cd /tmp/root/etc/
root@UDE:/tmp/root/etc# date > rootfs_ok
root@UDE:/tmp/root/etc# > rootfs_booting
rootfs_booting も空にしておいた。

今度こそ

これだけやっても
/sbin/initKernel panic - not syncing: Attempted to kill init!
: error while lo ading shared lib<0>Rebooting in 5 seconds..raries: libbuffalo_bin.so: cannot open shared object file: No such file or directory
でブートせず。

実体があるのに libbuffalo_bin.so: cannot open とは?

ld.so.cache/ld.so.conf

linkstation_release と ld.so.* は名前が近い。 ということは、保存されている位置も近いだろう。
linkstation_release がつぶれていたなら、ld.so.* もつぶれ、 shared object file のパスがわからないため cannot open になっているのではないか。

比べてみる

root@UDE:~# cmp /etc/ld.so.cache /tmp/root/etc/ld.so.cache
/etc/ld.so.cache /tmp/root/etc/ld.so.cache differ: char 1, line 1
root@UDE:~# od -xc /tmp/root/etc/ld.so.cache
0000000     0000    0000    0000    0000    0000    0000    0000    0000
          \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0021140
root@UDE:~#
あかんわ。/etc つぶれてる。

実験用 HDD から戻す

root@UDE:~# cd /
root@UDE:/# tar cf - etc |(cd /tmp/root; tar xvf -)
etc
etc/profile.d
etc/profile.d/bashopts.sh
etc/skel
etc/skel/.bash_logout
	:
root@UDE:/# diff -rc /etc /tmp/root/etc
Only in /tmp/root/etc: rootfs_booting
root@UDE:/# rm /tmp/root/etc/rootfs_booting
root@UDE:/# diff -rc /etc /tmp/root/etc
root@UDE:/#
これで立ち上がるだろう。
	:

BUFFALO INC. LinkStation series LS-GL(IESADA)
UDE login: root
Password:
root@UDE:~# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/sda2               493212    173512    319700  35% /
/dev/ram1                15360        68     15292   0% /mnt/ram
/dev/ls_disk1_1         194443     68319    116085  37% /boot
/dev/ls_disk1_6      155377036     14960 155362076   0% /mnt/disk1
root@UDE:~#
よ〜し。

でも、なんでつぶれたんかなぁ。
xfs の問題?
私のちょんぼ?




LS-GL:/boot は ext3
ハックの記録
LinkStation/玄箱 をハックしよう

SEA-FSIJ Monthly Talk 2006/Aug

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