Pyon's Diary
2007-06-20 舊 平成拾玖年皐月陸日 (水・晴) [長年日記]
(No.15) 再度HDD起動環境にした。
2007-11-03 [注意] 此處の記事は(No.16) 初期化スクリプトの修正を行へば(No.12) HDD起動環境にするで行けるので不必要。
本記事はHDDのフォーマット(XFSファイルシステムの作成)で何故嵌るのか、と其乃囘避方法に附いて書いて在る。
XFSは呪はれてゐるので、自分は全てext3で行く事にした。
一昨日にHDD起動環境からFlash起動環境に戻したが、矢張りHDD起動環境にしようと初期化スイッチを押しと、また/dev/sda2のフォーマットの處で止まつて了つた。
コンソールに
SCSI device sda: 160836480 512-byte hdwr sectors (82348 MB) SCSI device sda: drive cache: write back sda: sda1 sda2 sda3 sda4 SCSI device sda: 160836480 512-byte hdwr sectors (82348 MB) SCSI device sda: drive cache: write back sda: sda1 sda2 sda3 sda4
迄は出力されるのだが其乃後が續か無い。HDDのアクセス燈も點燈し無い。psの出力を見ると
# ps
PID Uid VmSize Stat Command
1 root 612 S init
(略)
934 root 652 S /bin/sh /usr/local/bin/KeventHandller.sh micon_interr
960 root 652 S /bin/sh /usr/local/bin/InitDisk1.sh
1022 root 620 R mkfs.xfs /dev/sda2 -f
(略)
矢張り/dev/sda2のフォーマットの處で止まつてゐた。でもHDDのアクセス燈は點燈してゐ無い。
其處でmkfs.xfsを一旦killしてコマンドラインから實行して見たが矢張り駄目。
# mkfs.xfs -f /dev/sda2
meta-data=/dev/sda2 isize=256 agcount=8, agsize=91872 blks
= sectsz=512
data = bsize=4096 blocks=734973, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=2560, version=1
= sectsz=512 sunit=0 blks
realtime =none extsz=65536 blocks=0, rtextents=0
と成つた儘先に進ま無い。矢張りHDDの接續燈も點か無い。一寸其れは措いて置いてpsを實行すると今度は/dev/sda4のフォーマットで止まつてゐた。
# ps PID Uid VmSize Stat Command (略) 934 root 652 S /bin/sh /usr/local/bin/KeventHandller.sh micon_interr 960 root 664 S /bin/sh /usr/local/bin/InitDisk1.sh 1345 root 424 S sleep 60 1352 root 620 R mkfs.xfs /dev/sda4 -f (略)
此もkillすると環境變數の設定とhddrootfs.tar.gzの解凍・展開が始まつてゐた。
# ps PID Uid VmSize Stat Command (略) 934 root 652 S /bin/sh /usr/local/bin/KeventHandller.sh micon_interr 960 root 664 S /bin/sh /usr/local/bin/InitDisk1.sh 1345 root 424 S sleep 60 1356 root 632 S /bin/sh /usr/local/sbin/SetupDevEnv.sh 1378 root 396 R [ -e /mnt/mtd/hddrootfs.tar.gz -a -e /mnt/mtd/uImage. (略)
でコンソールに以下の樣に出力された。
killkjournald starting. Commit interval 5 seconds EXT3 FS on sda1, internal journal EXT3-fs: mounted filesystem with ordered data mode. XFS: bad magic number XFS: SB validate failed
環境變數の變更がされて了つた樣なので、此乃儘再起動すると酷い事に成りさう。何か良い知恵は無いかとLinkStation / 玄箱をハックしようを讀んだ處、
に氣に成る事が書いて在つた。
前囘のインストールでは、一度インストールしたHDDのパーティションを消したゞけで再利用したらえらい目にあつた。今囘はxfsをつぶすためにext3でフォーマットしてからパーティションを消し、その後で再インストールする。
[LinkStation / 玄箱をハックしよう -- debian簡單インストール(3)再インストールより引用]
どうも一度KURO-BOX/PROで使用したHDDで貳度目の初期化を行ふと色々とおかしな事に成るらしい。「えらい目」と云ふのは何だつたのか探すと次の記事に行き當たつた。
此處の中段「RESET SWを押す」の状況が自分の處で起きた事象とそつくり。其乃次の段落の記述に據ると初期化スイッチ(RESET SW)を押すと/usr/local/bin/InitDisk1.shが走るらしい。上の頁を參考にInitDisk1.shを讀んでみた。
01. /usr/local/bin/kuro_lib (各種變數 / 凾數が設定されてゐる)を讀込む。 02. /dev/sda, /dev/sda1, /dev/sda4の孰れかゞ既に搭載されてゐ無いかを調べる。 03. /dev/sda, /dev/sda1, /dev/sda4の孰れかゞ既に XFS で初期化されてゐ無いかを調べる。 04. INFO燈を28で點燈する。 05. Flash起動環境の/mnt/mtd/ChengeMeDevHDDが存在するかを調べる。 05-A. (存在する場合) 05-A-01. /dev/sdaにPartitionDefinitionに随つてパーティションを切る。 05-A-02. /dev/sda1をEXT3で、/dev/sda2, /dev/sda4をXFSで初期化する。 05-A-03. /dev/sda3にスワップ領域を作成する。 05-A-04. SetupDevEnv.shを實行してU-Boot環境變數を變更する。 05-B. (存在しない場合) 05-B-01. /dev/sdaにPartitionDefinition1に随つてパーティションを切る。 05-B-02. /dev/sda1をXFSで初期化する。 05-B-03. /dev/sda1を/mnt/disk1に搭載する。 06. INFO燈を消す。
或るパーティションがXFSで初期化されてゐるか否かの檢査は以下の樣に行つてゐて、
XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] && ExitWithError formatted
其乃パーティションの先頭三バイトを讀出して其れがXFSに成つてゐればXFSでフォーマットされてゐると判斷してゐる模樣。試しに/dev/sda2で以下の樣に實行するとXFSと云ふ文字列が得られた。
# echo `dd if=/dev/sda2 bs=1 count=3` 3+0 records in 3+0 records out XFS
各パーティションの先頭三バイトをゼロで潰し、
# dd if=/dev/zero of=/dev/sda1 bs=1 count=3 3+0 records in 3+0 records out # dd if=/dev/zero of=/dev/sda2 bs=1 count=3 3+0 records in 3+0 records out # dd if=/dev/zero of=/dev/sda3 bs=1 count=3 3+0 records in 3+0 records out # dd if=/dev/zero of=/dev/sda4 bs=1 count=3 3+0 records in 3+0 records out
此乃状態でパーティションを削除した。
# fdisk /dev/sda The number of cylinders for this disk is set to 10011. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/sda: 82.3 GB, 82348277760 bytes 255 heads, 63 sectors/track, 10011 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 7 56196 83 Linux /dev/sda2 8 373 2939895 83 Linux /dev/sda3 374 390 136552+ 82 Linux swap /dev/sda4 391 10011 77280682+ 83 Linux Command (m for help): d Partition number (1-4): 4 Command (m for help): d Partition number (1-4): 3 Command (m for help): d Partition number (1-4): 2 Command (m for help): d Selected partition 1 Command (m for help): p Disk /dev/sda: 82.3 GB, 82348277760 bytes 255 heads, 63 sectors/track, 10011 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. SCSI device sda: 160836480 512-byte hdwr sectors (82348 MB) SCSI device sda: drive cache: write back sda: SCSI device sda: 160836480 512-byte hdwr sectors (82348 MB) SCSI device sda: drive cache: write back sda: Syncing disks.
此で初期化スイッチ(RESET SW)を五秒押しゝてみた。
が、今度は/dev/sda4の初期化で止まつて了つた。InitDisk1.sh, mkfs.xfsをkillしてコマンドラインから初期化してみたが、矢張りアクセス燈が點か無かつた。
此乃HDDと相性が惡いのか?。
(此乃間約三時間惱む。)
1GBを0で埋めた。
内臟HDD上に變なデータが殘つてゐて惡さをするのなら、其れを消して見れば良いのでは無いかと思ひ其乃通りして見た。各パーティションの先頭三バイトを潰してからfdiskでパーティションを全て削除。さうしてから/dev/sdaの先頭から1GB分0を埋めた。(1GBと云ふのは適當に決めた。)
# dd if=/dev/zero of=/dev/sda1 bs=1 count=3 3+0 records in 3+0 records out # dd if=/dev/zero of=/dev/sda2 bs=1 count=3 3+0 records in 3+0 records out # dd if=/dev/zero of=/dev/sda3 bs=1 count=3 3+0 records in 3+0 records out # dd if=/dev/zero of=/dev/sda4 bs=1 count=3 3+0 records in 3+0 records out # fdisk /dev/sda The number of cylinders for this disk is set to 10011. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/sda: 82.3 GB, 82348277760 bytes 255 heads, 63 sectors/track, 10011 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 7 56196 83 Linux /dev/sda2 8 373 2939895 83 Linux /dev/sda3 374 390 136552+ 82 Linux swap /dev/sda4 391 10011 77280682+ 83 Linux Command (m for help): d Partition number (1-4): 4 Command (m for help): d Partition number (1-4): 3 Command (m for help): d Partition number (1-4): 2 Command (m for help): d Selected partition 1 Command (m for help): p Disk /dev/sda: 82.3 GB, 82348277760 bytes 255 heads, 63 sectors/track, 10011 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. SCSI device sda: 160836480 512-byte hdwr sectors (82348 MB) SCSI device sda: drive cache: write back sda: SCSI device sda: 160836480 512-byte hdwr sectors (82348 MB) SCSI device sda: drive cache: write back sda: Syncing disks. # dd if=/dev/zero of=/dev/sda bs=1024 count=1048576 1048576+0 records in 1048576+0 records out # /bin/sh -x /usr/local/bin/InitDisk1.sh (略) >nvram_set:default_kernel_addr = 0x00100000 >nvram_set:bootargs_base = console=ttyS0,115200 >nvram_set:bootargs_root = root=/dev/sda2 rw panic=5 >nvram_set:bootargs = console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.0 9 >nvram_set:bootcmd = ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kerne l); bootm $(default_kernel_addr) >nvram_set:nand_boot = no + miconapl -a led_set_code_information clear
旨く行つた。此を三囘程試したが問題は無かつた。
何で此で上手く行く樣に成つたのか良く判ら無い。
追記: XFSのパーティションを潰す際の削除する大きさ。
何氣無くKURO-BOX/PROの頁を眺めてゐたら以下の樣な記述が有つた。
【「hdd ブート環境」作成時の問題について】(途中略) 1度でもLinuxパーティションを作成したことがあるHDDを取り付けた場合はパーティションテーブルを完全に初期化してください。
[KURO-BOX/PROより引用]
更に以下のコマンドを實行する樣にと書いて有つた。
dd if=/dev/zero of=/dev/sda bs=1M count=1
先頭から1MB 消せば良いのか。
試して見たが1MB 潰したゞけでは今迄通り/dev/sda2の初期化で止まつて了つた。
矢張り1GB 位潰さ無いと駄目みたい。
(No.16) InitDisk1.shで氣に成る所が在つた。(初期化スクリプトを修正した)
初期化スイッチを押した際に起動されるスクリプトInitDisk1.shの48行目でスワップ領域の作成を行つてゐるが、
if [ -e ${CHANGE_TO_DEVHDD_FILE} ] ; then
fdisk ${DISK1_DEV} < /usr/local/bin/PartitionDefinition
Format_EXT3 ${DISK1_DEV}1
Format_XFS ${DISK1_DEV}2
Format_XFS ${DISK1_DEV}4
mkswap ${DISK_DEV}3
/usr/local/sbin/SetupDevEnv.sh
else
/dev/sda3を指定する積もりで${DISK_DEV}3と書いて在るが正しくは${DISK1_DEV}3では無いだろうか。
實際InitDisk1.shを實行した時にスワップ領域の作成に失敗してゐるし。
# /bin/sh -x /usr/local/bin/InitDisk1.sh (略) + mkswap 3 mkswap: 3: No such file or directory (略)
追記: 初期化スクリプト(InitDisk1.sh, SetupDevEnv.sh)を修正した。(2007-11-03)
スワップ領域の作成が行へ無かつたり、XFSでのフォーマットに苦しめられたりするので、InitDisk1.shを以下の樣に修正した。
@@ -42,13 +42,13 @@
if [ -e ${CHANGE_TO_DEVHDD_FILE} ] ; then
fdisk ${DISK1_DEV} < /usr/local/bin/PartitionDefinition
Format_EXT3 ${DISK1_DEV}1
- Format_XFS ${DISK1_DEV}2
- Format_XFS ${DISK1_DEV}4
- mkswap ${DISK_DEV}3
+ Format_EXT3 ${DISK1_DEV}2
+ Format_EXT3 ${DISK1_DEV}4
+ mkswap ${DISK1_DEV}3
/usr/local/sbin/SetupDevEnv.sh
else
fdisk ${DISK1_DEV} < /usr/local/bin/PartitionDefinition1
- Format_XFS ${DISK1_DEV}1
+ Format_EXT3 ${DISK1_DEV}1
MountShare ${DISK1_DEV} ${DISK1_MPT}
fi
此で/dev/sda2, /dev/sda4がext3でフォーマットされる事に成りXFSの魔法の文字列に惱まされる事が無く成る。
亦パーティションのフォーマット後にマウントを行ふSetupDevEnv.shも以下の樣に修正した。
@@ -21,7 +21,7 @@
mount -t ext3 ${DISK1_DEV}1 ${TMP_BOOT_MPT}
[ $? -ne 0 ] && exit 1
- mount -t xfs ${DISK1_DEV}2 ${TMP_ROOT_MPT}
+ mount -t ext3 ${DISK1_DEV}2 ${TMP_ROOT_MPT}
[ $? -ne 0 ] && exit 1
cp -afp ${UIMAGE} ${TMP_BOOT_MPT}/
此で/dev/sda2がext3としてマウントされる樣に成る。
斯うした状態で先日の方法(初期化 SW を押す方法)でHDD起動環境を構築する事が出來た。
追記: PartitionDefinisionも變更した。(2007-11-04)
内臟HDDがHDS721680PLA380 (Deskstart 7K160)で容量が80GBも在る。
HDD起動環境時の / (ルート)が3GBしか無いのでもう少し大きくする爲、PartitionDefinition を以下の樣に變更した。(當然フラッシュ起動環境で)
@@ -2,17 +2,17 @@ p 1 -+50MB ++128MB n p 2 -+3GB ++10GB n p 3 -+128MB ++1GB t 3 82
序でに/boot (/dev/sda1), swap (/dev/sda3)も(特に意味は無いが)大きくした。
修正した後でHDDの既存パーティションを全て削除してから、初期化スイッチを長押しゝてHDD起動環境に變更(再度パーティション切りから)した。
既存パーティションを全て削除してゐない場合、PatitionDefinitionには既存パーティションを削除するコマンドが書いてゐないので、以前と同じパーティション構成に成つて了ふので注意する事。