Sirius

2007年1月29日(月) 23:48

パーティションの追加

注意。initrd の修正をミスすると、LS-GL が起動しなくなることがあります。自己責任でお願いします。

LS-GL の rootfs は、500MB 程度しかないので、いろいろインストールするとすぐにあふれてしまいます。そこで、rootfs を拡張したいと思います。

単純にパーティションにサイズを大きくしただけでは、ファームウェアのアップデートができなくなってしまいます。そこで、標準システムはそのままで、新たにパーティションを用意したらどうなるかを実験してみました。

LS-GL でパーティションは次のようになっています。

sda1 -> /boot
sda2 -> /
sda4 -> 拡張パーティション
sda5 -> swap
sda6 -> /mnt/disk1/share

sda3 が開いているじゃないですか。ここにカスタマイズしたルートファイルシステムを作ってやればいけるかも。ただし、sda3 に不具合があった場合、sda2 を利用するようにして、また、sda2 と sda3 を切り替えて使えるようにしたいと思います。

まず初めに起動シーケンス中で、ルートファイルシステムをマウントしているファイルを探します。initrd の中です。

initrd の中の linuxrc がブートシーケンスです。この中で、ルートファイルシステムを決定し、カーネルの変数に設定します。/proc/sys/kernel/real-root-dev なんですが、ここに、デバイスのメジャー番号とマイナー番号を書き込んでやると、そのデバイスがルートファイルシステムになるみたいです。
しかし、間違うと起動不能。玉砕覚悟でやってみるか。

EM モードでも telnet を使えるようにしてあるので、念のため EM モードにしてからパーティションを操作します。
EM モードにするには、/etc/hddrootmode のファイル名を変更すればいいはず。
# mv /etc/hddrootmode /etc/hddrootmode-

再起動後に telnet でログインし、パーティションを変えます。

1、拡張パーティション内の sda5, sda6 を削除。
2、拡張パーティション (sda4) を削除。
3、新たにプライマリでパーティションを作成 (sda3)。
4、残り全部を拡張パーティションとして、sda5, sda6 を作成。
5、再起動
6、sda5 をスワップでフォーマット。
7、sda3, sda6 を xfs でフォーマット。
8、sda2 の内容を sda3 にコピー。
9、hddrootmode をもとに戻して再起動。
赤字がキーボードからの入力です。

# fdisk /dev/sda

The number of cylinders for this disk is set to 9729.
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: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
 /dev/sda1               1          25      200781   83  Linux
 /dev/sda2              26          87      498015   83  Linux
 /dev/sda4              88        9729    77449365    5  Extended
 /dev/sda5              88         104      136521   82  Linux swap
 /dev/sda6             105        9729    77312781   83  Linux

Command (m for help): d
Partition number (1-6): 6

Command (m for help): d
Partition number (1-5): 5

Command (m for help): d
Partition number (1-5): 4

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (88-9729, default 88):
Using default value 88
Last cylinder or +size or +sizeM or +sizeK (88-9729, default 9729): +20000M

Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Selected partition 4
First cylinder (2521-9729, default 2521):
Using default value 2521
Last cylinder or +size or +sizeM or +sizeK (2521-9729, default 9729):
Using default value 9729

Command (m for help): n
First cylinder (2521-9729, default 2521):
Using default value 2521
Last cylinder or +size or +sizeM or +sizeK (2521-9729, default 9729): 2537

Command (m for help): n
First cylinder (2538-9729, default 2538):
Using default value 2538
Last cylinder or +size or +sizeM or +sizeK (2538-9729, default 9729):
Using default value 9729

Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): 82
Changed system type of partition 5 to 82 (Linux swap)

Command (m for help): p

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
 /dev/sda1               1          25      200781   83  Linux
 /dev/sda2              26          87      498015   83  Linux
 /dev/sda3              88        2520    19543072+  83  Linux
 /dev/sda4            2521        9729    57906292+   5  Extended
 /dev/sda5            2521        2537      136521   82  Linux swap
 /dev/sda6            2538        9729    57769708+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

ここで再起動。再起動しないと、sda3 にファイルシステムが作れません。再度 telnet でログインします。

# mkswap /dev/sda5
Setting up swapspace version 1, size = 139792384 bytes
# mkfs.xfs -f /dev/sda3
meta-data=/dev/sda3              isize=256    agcount=19, agsize=262144 blks
         =                       sectsz=512
data     =                       bsize=4096   blocks=4885768, 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

# mount /dev/sda2 /mnt/disk1
# mkdir /mnt/tmp
# mount /dev/sda3 /mnt/tmp
# cd /mnt/disk1
# mv etc/hddrootmode- etc/hddrootmode
# tar cf - * | (cd ../tmp;tar xvf -)
# cd ..
# umount /mnt/disk1
# date > /mnt/tmp/etc/boot.this
# umount /mnt/tmp
# mksf.xfs /dev/sda6
meta-data=/dev/sda6              isize=256    agcount=19, agsize=1048576 blks
         =                       sectsz=512
data     =                       bsize=4096   blocks=19328195, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal log           bsize=4096   blocks=9437, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0

# mount /dev/sda6 /mnt/disk1
# mkdir /mnt/disk1/share
# chmod 777 /mnt/disk1/share

再起動。
ここまで正常起動を確認できたら、initrd の linuxrc を書き換えます。

1、sda3 をチェックし、etc の下に boot.this というファイルがあり、起動可能であれば、ルートファイルシステムを sda3 にする。このとき万一のことを考え、boot.this ファイルは削除し、正常起動しなかった場合、次回の起動時は、sda3 を使わないようにする。
この linuxrc は公開できないので (著作権が buffalo にあると思われる。)、パッチ形式のファイルをここに置いておきます。例によって無保証です。

2、sda3 の etc/init.d/rcS の最後のほうで、boot.this ファイルを作成し、次回起動時も sda3 から起動するようにする。
たとえば、date > /etc/boot.this とか。

修正した initrd から、initrd.buffalo を作成し、/boot へコピーすれば OK です。万が一のときを考え、元の initrd.buffalo は名前を変えておいてください。

再起動。

sda3 をルートファイルシステムとして起動しました。

確認のため、/etc/boot.this ファイルを削除して再起動。
sda2 をルートファイルシステムとして起動しました。
ファームを更新してみます。(当然 telnet が使えるファームです)。

まったく問題ありませんでした。これで標準ファームと切り替えて使うことが出来ます。
完了。

written by sirius [/Linkstation] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Sirius

MySketch 2.7.2 written by 夕雨