SL-C3000 の HDD 換装のメモです
標準の4GBのマイクロドライブから6GBに換装してみたいと思います。
Command (m for help):p Disk /dev/hda: 4095 MB, 4095737856 bytes 16 heads, 63 sectors/track, 7936 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/hda1 1 204 102784+ 83 Linux /dev/hda2 205 1020 411264 83 Linux /dev/hda3 1021 7936 3485664 c Win95 FAT32 (LBA) /dev/hda4 1 1 0 0 Empty Partition 4 does not end on cylinder boundary. Command (m for help):q
間違って内蔵のHDDのデータを消去してしまう可能性を考慮して、CFやSDなどにバックアップを取っておく。
CFスロットにCFやマイクロドライブを入れたまま本体を起動すると、CFスロットに入れたデバイスが/dev/hda、内蔵のマイクロドライブが/dev/hdcになるので注意すること。
hda3は大きいのでtarを使用する。これは本体が普通に起動している状態でもOK。
dd if=/dev/hda1 of=/mnt/card/hda1.bin dd if=/dev/hda2 of=/mnt/card/hda2.bin tar cf /mnt/card/hda3.tar /hdd3/*
また、/hdd1、/hdd2の内容をtarで固めても良い
tar cf /mnt/card/hda1.tar /hdd1/* tar cf /mnt/card/hda2.tar /hdd2/*
これを行うと、内蔵HDDのクローンを作ることができる。つまり、空の4GBマイクロドライブを購入してきて、以下の動作を行うと内蔵HDDと同じものが作成される。
なので、これを行うと書き込み先のメディアの内容は消去されて完全に元のデータが上書きされるので注意する必要がある。でも、hddの内容はddやtarで抽出できるのであまり意味がないかもしれない。
手順は以下のとおり
以下のようなパーティション構成にしてみる
/dev/hdc1 1 204 102784+ 83 Linux /dev/hdc2 205 3181 1500400 83 Linux /dev/hdc3 3182 11905 4396896 c Win95 FAT32 (LBA) /dev/hdc4 1 1 0 0 Empty Partition 4 does not end on cylinder boundary.
CFスロットに新しいマイクロドライブを入れて Terminal から以下のコマンドを実行する
#umount /mnt/cf #fdisk /dev/hdc
fdisk のパラメータには/dev/hdcを渡すこと(hdcは CFスロットのHDDを示す)。 fdisk のコマンドは以下のとおり
p コマンドでパーティションの表示を行い、新しいマイクロドライブを操作しているかを確認する。
Command (m for help): p Disk /dev/hdc: 6144 MB, 6144284672 bytes 16 heads, 63 sectors/track, 11905 cylinders Units = cylinders of 1008 * 512 = 516096 bytes
すでにパーティションがあれば、d コマンドですべてのパーティションを削除する。
Command (m for help): d Partition number (1-4):1
Command (m for help): d Partition number (1-4):2
Command (m for help): d Partition number (1-4):3
Command (m for help): d Partition number (1-4):4
n コマンドでパーティションを作成する。このときパーティション3から作成していく。各パーティションのサイズはお好みで。
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4):3 First cylinder (1-11905, default 1):3182 Last cylinder or +size or +sizeM or +sizeK (3182-11905, default 11905):11905
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4):2 First cylinder (1-11905, default 1):205 Last cylinder or +size or +sizeM or +sizeK (205-3181, default 3181):3181
Command (m for help): n Command action e extended p primary partition (1-4) p Selected partition 1 First cylinder (1-11905, default 1):1 Last cylinder or +size or +sizeM or +sizeK (1-204, default 204):204
hdc3のパーティションタイプをcに変更する
/dev/hdc1 1 204 102784+ 83 Linux /dev/hdc2 205 3181 1500400 83 Linux /dev/hdc3 3182 11905 4396896 83 Linux /dev/hdc4 1 1 0 0 Empty Partition 4 does not end on cylinder boundary.
Command (m for help): t Partition number (1-4): 3 Hex code (type L to list codes): c Changed system type of partition 3 o c (Win95 FAT32 (LBA))
w コマンドでパーティション情報を保存する。
Command (m for help): w The partition table has been altered! ...
Terminal から以下のコマンドを実行する。hdc1とhdc2はEXT3、hdc3はFAT32にしてみる。
#mke2fs -j /dev/hdc1 #mke2fs -j /dev/hdc2 #mkdosfs -F32 /dev/hdc3
/mnt以下に/mnt/hdc1、/mnt/hdc2、/mnt/hdc3を作ってhdcをそこにマウントする。
#mkdir /mnt/hdc1 #mkdir /mnt/hdc2 #mkdir /mnt/hdc3 #mount /dev/hdc1 /mnt/hdc1 #mount /dev/hdc2 /mnt/hdc2 #mount -t vfat -o iocharset=utf8,codepage=932 /dev/hdc3 /mnt/hdc3
tarコマンドを使ってデータをコピーする。
#cd /hdd1 #tar cf - . | (cd /mnt/hdc1;tar xf -) #cd /hdd2 #tar cf - . | (cd /mnt/hdc2;tar xf -) #cd /hdd3 #tar cf - . | (cd /mnt/hdc3;tar xf -)
4GB以上のディスクをUSBマスストレージで使用する場合の不都合を修正したパッチと、コンパイル済みのモジュールを以下のところに置いておきます。
置き換え方法
$su #bash bash-2.05#
bash-2.05#mount -o remount,rw /
bash-2.05#cd /lib/modules.rom/2.4.20/kernel/drivers/usb/device/storage_fd/
bash-2.05#mv storage_fd.o storage_fd.old.o
bash-2.05#cp /mnt/card/storage_fd.o .
bash-2.05#depmod -a
bash-2.05#mount -o remount,ro /
6GBのマイクロドライブに換装後、hdparmで計測した転送レートは以下のとおり
hdparm -t /dev/hda Timing bufferd disk reads: 8MB in 3.49 seconds = 2.29 MB/sec
ATA/ATAPI/MFM/RLL support -> IDE/ATA and ATAPI Block devices --> Use multi-mode by default を ON にする。
カーネルをアップデートして、hdparmで計測してみる。hdparm はソースをとってきて、zaurus用にクロスコンパイルすればそのまま動作する。
hdparm -t /dev/hda Timing bufferd disk reads: 8MB in 3.35 seconds = 2.39 MB/sec
hdparm -t /dev/hda Timing bufferd disk reads: 8MB in 3.30 seconds = 2.42 MB/sec
hdparm -t /dev/hda Timing bufferd disk reads: 10MB in 3.17 seconds = 3.15 MB/sec
hdparm -t /dev/hda Timing bufferd disk reads: 12MB in 3.21 seconds = 3.74 MB/sec
(危険-MCIO1の値を間違えるとハングアップしたり、HDDに変なデータが書き込まれてしまう可能性あり)
#insmod /lib/modules/2.4.20/kernel/arch/arm/mach-pxa/registers.o #echo 49670 > MCIO1
hdparm -t /dev/hda Timing bufferd disk reads: 12MB in 3.13 seconds = 3.83 MB/sec
hdparm -t /dev/hda Timing bufferd disk reads: 14MB in 3.43 seconds = 4.08 MB/sec
hdparm -t /dev/hda Timing bufferd disk reads: 14MB in 3.08 seconds = 4.55 MB/sec
hdparm -t /dev/hda Timing bufferd disk reads: 16MB in 3.04 seconds = 5.26 MB/sec
hdparm -t /dev/hda
MCIO1の値が33155のときはLEDがつきっぱなしでハングアップ(33284のときもその後ハング)。
MCIO1の値が33284の場合、mpeg1 の画像を再生しても普通に動作していた。 でもその後にカレンダーやアドレス帳を起動しようとするとLEDがつきっぱなしでハングアップ。 再起動するとQTOPIAが立ち上がらず(変なデータが書き込まれてしまったらしい) リセット後に、メンテナンスメニューから完全消去を選択して、消去するはめになってしまった。
PXA270 の仕様書とMicroDrive?の仕様書を見て、スペックを満たす値を求めてみた。 (あまり自身なし)
#hdparm -t /dev/hda Timing bufferd disk reads: 14MB in 3.22 seconds = 4.35 MB/sec
この値はPIO Mode4、Advanced Power ManagementでMax Paformance(254) にしてみたもの。
#hdparm -X12 /dev/hda /dev/hda: setting xfermode to 12(PIO flow control mode4)
#hdparm -B254 /dev/hda /dev/hda: setting Advanced Power Management level to 0xFE (254)
あとで計測してみたが、PIO Mode や Advanced Power Management Level を変えてもあまり変わらないらしい。
上記の値でも、4GBマイクロドライブは動作する。 今のところ、MPEG1 の画像ファイルの再生や、数百MBのファイルをUSB経由で書き込んでも問題なく動作している。
アクセスタイミングは以下のとおり
アクセスタイミングは以下のとおり。Cycle Time Modeにより変化するらしい。