Top > usbboot
HTML convert time to 0.078 sec.


Linux各ディストリビューションのUSBブート・対応状況

Last-modified: 2010-01-11 (月) 21:13:19

(2010-01-11)かなり希なニーズしかないと思いますが、掲示板に、USBブートに対応していないPCでUSBハードディスク(USBメモリ)上に置いたカーネルをブートさせる手法を掲載しています。←iSCSIブートに対応していないPCでiSCSIストレージ上に置いたカーネルをブートさせる手法とほぼ同じです。NFSブートのカーネル管理にも有効です。


初出 2006-12-5
最終更新 2009-9-9
マルチブートするなら2段階ブートに統一して、MBMを使用しましょう。MBMは、WindowsがインストールするMicrosoft謹製のMBR用ブートローダやgrubのchainloader機能の上位互換となる高機能なブートローダです。このページからダウンロードできるものを使えば、USBデバイスにMBMをインストールしたり、MBMインストーラをUSBブートさせた上で、USB接続を含む他のディスクにMBMをインストールできます。(以前からMBMはUSB接続ハードディスクやUSBメモリで使用できたのですが、母艦インストールができませんでした)
 

CFブートがメインのページはこっちです。

 

(2008-1-3) Linux各ディストリビューションで(USB接続DVDドライブなどを使わずに)インストーラをUSBメモリなどからUSBブートさせたり、内蔵ハードディスクからインストーラを起動する方法なら→ Linuxを、インストーラが起動したドライブにインストールするを更新しました。 ←ワンスピンドルPCに光学ドライブを使わずにLinuxをインストールする場合等に
(2007-8-18) USB接続ハードディスク(USBメモリ)への直接インストールに関する情報を追加しました。(fc6のUSBブート化手順は削除しました。)

 

(2007-8-2) Debian Linux の OneCD(ライブDVD)化手順のページを追加しました。
書き込み回数に制限のあるUSBメモリやCF等を使用してLinuxを運用する用途(USBブート,CFブート)にも使用できる手順です。

 

本ページは通常のディストリビューションのUSBブートに関する情報を扱っています。OneCD LinuxのUSBブートに関しては、ここにOneCD LinuxをUSBブートLinuxに改造するページへのポインタがあります。←(2008-1-9)Fedora 8 Live CDについての記述を追加しました。(取り消し線を引いてある部分のリンクもまだ参考になるかと思います。)私自身はいつも諳でコマンドを打ってUSBブート化しています。


各ディストリビューションのUSB接続ハードディスク(USBメモリ)への直接インストール・対応状況(USBブート対応状況)

表に示すように、多くのLinuxディストリはWindowsと異なり、USB接続のハードディスクやUSBメモリに直接インストールすることが可能です。Linuxの世界ではUSBブートは当たり前です。それに対してWindowsが標準で(ブート革命などを使わずに)USBブートに対応することは永遠?にないでしょう。MicrosoftとしてはリムーバルディスクにOSをインストールして欲しくないからです。

 

(2009-9-9現在)
(検証基準とした環境: i845GのPC)

ディストリ対応状況詳細
Fedora 7基準PCではインストーラがUSB接続ハードディスクを認識しなかった。手持ちのi855のPCではインストールでき、そのUSB接続ハードディスクを基準PCに接続すると正常にブートできた。Vine4.1とは異なり、基本的には対応しており、更新等の運用面も問題ない(筈)。
Fedora 8特に問題なし。
Fedora 9もうわざわざここに書く必要ないでしょう。
RedHat EL 5(互換のCentOS 5等も含む)未検証基本的にFC6のフィーチャーを継承しているので多分一応は対応しているでしょう。検証するとFedora7と同様の結果となるのでは?
Debian 4(etch)特に問題なし。
Ubuntu 7.04ja特に問題なし。
Ubuntu 7.10ja特に問題なし。
Ubuntu 8.04jaもうわざわざここに書く必要ないでしょう。
Vine 4.1×△インストーラはUSB接続ハードディスクを認識し、インストールプロセスは一見正常におこなわれたように見えるが、実は未対応の部分があり、インストール後に再起動をおこなった際に正常にブートしない。(2008-1-4)Vine4.2がリリースされたのでVine4.1用の対応方法は削除しました。
Vine 4.2×△惜しい! 開発者がUSBブートに対応しようとしたことはわかるが、まだ駄目。開発時のカーネルとリリース時のカーネルの構成が異なる為だろう。下記の修正を加えるとブートできる。但し運用には下記の注意が必要。
Vine 5.0○△一応のUSBブート対応を果たした。が他ディストリと比べるとまだ何歩か遅れ気味。環境によってはVine 4.2以前と同様にイニシャルラムディスクの修正が必要となる場合がある。
openSUSE 10.2特に問題なし。
openSUSE 10.3特に問題なし。

Vineだけ置いてけぼりをくらっているという印象です。

 

※: 書き方でわかると思いますが念を押しておきます。Vine4.1の状況は環境の違いによって出現するバグといった類のものではなく、Vine4.1が未対応であることは明白です。(2008-1-4追記) Vine4.2もまだ対応途中の段階のようです。多分、Vine 5.0ではUSBブートに対応すると思います。そのときはこのページの内容の殆どを削除すると思います。(2009-9-9追記)上表で少し触れましたがVine 5.0のUSBブート対応には(現在の標準的なレベルと比べると)少し時代遅れな面があります。イニシャルラムディスク内の/initファイルにrootデバイス名が直接記述されています。この為、インストール時と使用時でrootデバイス名が異なってしまう環境ではイニシャルラムディスクの修正が必要になります。現在、他の多くのディストリビューションではインストール時と使用時でrootデバイス名が異なっても修正なしに正常にブート可能です。

Vine Linux 4(4.2) をUSB接続のハードディスク(USBメモリ)にインストールした際に必要な修正作業(USBブートの為の追加修正作業)

上に記したようにインストール後に再起動してもそのままでは正常にブートしません。

インストーラに再起動を促された際にすぐには再起動せずに[Ctrl]+[Alt]+[F2]キーを押してコンソール画面に下り、以下に記すinitrdの修正作業をおこなってから再起動して下さい。

 

また、私がVine4.2で試したところではgrub.confでrootデバイスをLABEL形式で指定していると、rootデバイスのマウントに失敗することがありました。ブートに失敗したときは、次の起動時のgrub画面でeditして、カーネル引数のrootデバイス指定をデバイス名でおこなうように修正してみた方がいいでしょう。

initrdの修正(インストール時)

initrdの解凍

修正が必要なinitrdを解凍します。

# cd /mnt/sysimage/boot
# mkdir work
# cd work
# gzip -dc ../initrd.img | cpio -idmv  

カーネルモジュールのコピー

カーネルモジュールを上記work内のlibディレクトリにコピーします。

# cd /mnt/sysimage/boot/work
# find /mnt/sysimage/lib/modules -name uhci-hcd.ko -exec cp -p {} lib \;
# find /mnt/sysimage/lib/modules -name ohci-hcd.ko -exec cp -p {} lib \;
# find /mnt/sysimage/lib/modules -name ehci-hcd.ko -exec cp -p {} lib \;

initスクリプトの修正

↑のカーネルモジュールのコピーを忘れないように
initrd内のinitスクリプトを修正します。

--- init.orig	2008-01-03 22:20:36.000000000 +0900
+++ init	2008-01-03 23:10:56.000000000 +0900
@@ -5,6 +5,12 @@
 echo Mounted /proc filesystem
 echo Mounting sysfs
 mount -t sysfs none /sys
+echo "Loading uhci-hcd.ko module"
+insmod /lib/uhci-hcd.ko 
+echo "Loading ohci-hcd.ko module"
+insmod /lib/ohci-hcd.ko 
+echo "Loading ehci-hcd.ko module"
+insmod /lib/ehci-hcd.ko 
 echo "Loading scsi_mod.ko module"
 insmod /lib/scsi_mod.ko 
 echo "Loading sd_mod.ko module"

sleep 5という行ありますが、環境によってはもっと長くsleepする必要があります。私の環境の一つではsleep 9としました。他のディストリビューションでは必要な時間だけ待つコマンドが用意されていたりします。
用心深い人はsetquietをコメントアウトし、mountを実行する行の次の行にsleep 20を追加しておくといいでしょう。詳細が把握できますし、rootデバイスのマウントに失敗した場合でもsleep中に[Ctrl]+[Alt]+[Delete]を押せばハードディスクを傷めずに再起動できます。

initrdの再圧縮

initrdを圧縮します。(以下、一例)

# cd /mnt/sysimage/boot/work
# find  | cpio -c -o | gzip -9 > ../initrd.img
もしくは
# find  | cpio -H newc -o | gzip -9 > ../initrd.img

(2007-7-30追加) ブートには(new)SVR4フォーマットのcpioアーカイブが必要です。manどおりであれば、-H newcオプションを使用しなければならないところですが、Fedora、Vineのcpioコマンドは-cオプションでSVR4フォーマットのファイルを生成します。

 
 

上記作業内容を手打ちするのは大変ですよね。以下の「fix-vine4-usbboot.sh」スクリプトを実行すれば一気に作業が終わります。
で、どうやってインストール中の環境にこのスクリプトを持ってきましょうか?

 

私はフロッピーディスクを使って持ってきてしまいました。ノートパソコンだとどうしましょうか?
ネットワーク経由だと多分多くのコマンド打ちが必要でしょう。
スクリプトを含ませたUSBメモリをインストール開始時から挿しこんでおけば自動で認識してくれるんじゃないでしょうか???・・・・
USB接続ハードディスクや内蔵ハードディスクのVineが読めるファイルシステム上にスクリプトを置いておいてもいいでしょう。←妥当な線

 

でも実際のところ、他にLinux環境があるのなら、普通はそちらに当該のUSB接続ハードディスクを接続して作業するでしょう。(インストーラのコンソールも作業しにくいことはないですが...)

 

ダウンロード filefix-vine4-usbboot-oninstall.sh

#!/bin/sh
MNTROOT=/mnt/sysimage
cd ${MNTROOT}/boot
mkdir work
cd work
gzip -dc ../initrd.img | cpio -idmv

find ${MNTROOT}/lib/modules -name uhci-hcd.ko -exec cp -p {} lib \;
find ${MNTROOT}/lib/modules -name ohci-hcd.ko -exec cp -p {} lib \;
find ${MNTROOT}/lib/modules -name ehci-hcd.ko -exec cp -p {} lib \;

patch -p0 <<EOT
--- init.orig	2008-01-03 22:20:36.000000000 +0900
+++ init	2008-01-03 23:10:56.000000000 +0900
@@ -5,6 +5,12 @@
 echo Mounted /proc filesystem
 echo Mounting sysfs
 mount -t sysfs none /sys
+echo "Loading uhci-hcd.ko module"
+insmod /lib/uhci-hcd.ko 
+echo "Loading ohci-hcd.ko module"
+insmod /lib/ohci-hcd.ko 
+echo "Loading ehci-hcd.ko module"
+insmod /lib/ehci-hcd.ko 
 echo "Loading scsi_mod.ko module"
 insmod /lib/scsi_mod.ko 
 echo "Loading sd_mod.ko module"
EOT
chmod +x init

find | cpio -H newc -o | gzip -9 > ../initrd.img

initにsleep 5という行ありますが、環境によってはもっと長くsleepする必要があります。私の環境の一つではsleep 9としました。他のディストリビューションでは必要な時間だけ待つコマンドが用意されていたりします。
用心深い人はsetquietをコメントアウトし、mountを実行する行の次の行にsleep 20を追加しておくといいでしょう。詳細が把握できますし、rootデバイスのマウントに失敗した場合でもsleep中に[Ctrl]+[Alt]+[Delete]を押せばハードディスクを傷めずに再起動できます。

Vine Linux 4(4.2) を一旦内蔵ハードディスクに(普通に)インストールした後、USB接続のハードディスクやUSBメモリにLinux OSの環境を丸ごと移し変えてUSBブートさせる手順(USBブート化手順)

内蔵ハードディスクでブートした環境上での作業手順紹介です。

作業1.ルート以下全内容のコピー

対象のディストリビューションの場合、普通、USB接続のハードディスクやUSBメモリを接続すると一般ユーザの権限で自動マウントされます。これをumountして、rootでmountし直してからコピーして下さい。

作業2.initrdの修正

上記と実質的に全く同じ作業をおこないます。
違いは、1)上記手順で/mnt/sysimageとなっている個所を作業時のUSB接続ハードディスクやUSBメモリのマウントポイントに読み替えることと、2)カーネルが複数インストールされている可能性がある為に以下のような感じでカーネルの詳細バージョンを意識して作業する必要があること の2点です。
※(2009-09-05追記)このページ読者の方の情報によると、最新の2.6.16-76.51vl4のデフォルト状態ではinitrd.img内の/initにusb-storage.koに関する記述がないとのことで、usb-storage.koをロードする文も追加する必要があります。またもちろん、initrd内にusb-storage.koのコピーをおこなう必要もあるでしょう。

 

カーネルモジュールを上記work内のlibディレクトリにコピーする例

# find /lib/modules/`uname -r` -name uhci-hcd.ko -exec cp -p {} lib \;
# find /lib/modules/`uname -r` -name ohci-hcd.ko -exec cp -p {} lib \;
# find /lib/modules/`uname -r` -name ehci-hcd.ko -exec cp -p {} lib \;

作業3.USB接続のハードディスクのパーティションにに内臓ディスクと同じラベルを付ける

作業4と作業5の内容によってはこの作業は必要ありません。
※デバイス名の代わりにラベルを用いることのメリット・デメリットをよく理解した上で作業を選択して下さい。
※以下はUSBブート時のrootデバイスを/dev/sda1と仮定しています。

# e2label /dev/sda1 / # ←デバイス、ラベル共実際の値に合わせる

作業4.fstabの修正

※以下はUSBブート時のrootデバイスを/dev/sda1、swapデバイスを/dev/sda2と仮定しています。
また、フラッシュメモリ系のデバイスを想定してnoatimeを指定しています。

/dev/sda1               /                       ext3    noatime         1 1
/dev/sda2               swap                    swap    defaults        0 0

もしくは(作業3をおこなった場合に)

LABEL=/                 /                       ext3    noatime         1 1
/dev/sda2               swap                    swap    defaults        0 0

作業5.grub.confの修正

作業3をおこなった場合にこの作業は必要ありません。
こんな感じに修正して下さい。rootディスクを指定しないのがミソです(つまりこのセクションは全3行です)。rootディスクを指定しないことによって様々なBIOS設定に対応できます。※rootディスクを絶対に指定してはいけないというわけではありません。
※以下はUSBブート時のrootデバイスを/dev/sda1と仮定しています。

title Vine Linux (Current kernel)
	kernel /boot/vmlinuz ro root=/dev/sda1
	initrd /boot/initrd.img

※Vine4.2で私が試したところでは、ある環境では、grub.conf内でrootデバイスをLABEL形式で指定すると、イニシャルラムディスク内でのマウントが失敗しました。その環境でもfstabでの指定はデバイス名、LABEL形式のどちらの指定でも大丈夫でした。

作業6.grubのインストール

もしマルチブート環境を構築するなら、是非このページに目を通してみて下さい。


※他のOS上からgrubを再インストール(セットアップ)する場合はこんな感じの作業が必要になる場合があります。(どんな場合に必要なのかについての説明は長くなるので略します。)

(2008-1-17ちょっとだけ更新)usbで接続されているデバイスへのgrubインストールは何か特別ではないかとの先入観を持たれている方が多いようです。でも実際には内蔵HDDに対してインストールする場合と何らと言っていいほど変わりません。usbデバイスは、Linux USB対応OS起動中はドライバーによってscsiデバイスとしてエミュレーションされ、scsi HDDと同様に扱うことができます。OS起動時は(USBブートできるPCであれば)BIOSによってHDDとしてエミュレーションされています。これが意味することは、grubで「USBブート」する為に「USB対応grub」なんてものは(どんなOSであっても)必要ないということです(少し詳しい説明)。そもそもgrubのみならず世の殆どのPC用ブートローダにUSBブート対応は必要ありません。通常使われる意味でのUSBブートとはBIOSの機能によっておこなうものだからです。ブートローダ自体がUSBブートに対応しなければならないケースとはブート革命/USBのブートローダのようにUSBブート未対応のBIOSを持ったPC上で疑似USBブートを実現させる用途のような特殊な場合だけです。要は難しく考える必要はないということです。grubインストール時とブート時でHDDの順番が変わる場合があることだけには注意が必要です。(あえてmapには言及しません)
私の場合、こんな感じです。
自分の環境に適宜合わせて下さい。
※以下の(hd1,0)とは、作業をおこなったPCにとっての2番目のハードディスクの1番目のパーティションを意味します。リムーバルなUSBハードディスクもしくはUSBメモリが2番目のハードディスクとして認識されているということになります。

1段階ブートの場合、

# grub
    GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]

grub> root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd1)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p
 (hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"...
succeeded
Done.

grub>quit

※setup (hd1)は母艦PCにとっての2番目のハードディスクのMBRにgrubのstage1をインストールすることを意味します。作業時にUSBハードディスクもしくはUSBメモリが何番目のハードディスクと認識されていようとUSBブートに直接関係はありません。


↓※以下の作業を始めておこなう方は、それまでに確実に2段階ブートが何かを理解し、自分でMBM等のMBR専用のブートローダをインストールする必要があることを理解してから作業にとりかかって下さい。
2段階ブートの場合、
2段階ブートの場合、たとえばこのように、

# grub
grub> root (hd1,0)  ←rootで指定するのはmenu.lst(grub.conf),stage2等の場所
grub> setup (hd1,0)  ←setupで指定するのはgrub(grubのstage1)のインストール先

setupで指定するデバイスをハードディスク(の先頭)ではなくパーティション(の先頭)とします。
上は母艦上の作業としてのサンプルですが、
普通にLinuxをブートし、そのOS上でブートの方式を1段階ブートから2段階ブートに変更する場合であれば、たとえば、

# grub
grub> root (hd0,0)  ←rootで指定するのはmenu.lst(grub.conf),stage2等の場所
grub> setup (hd0,0)  ←setupで指定するのはgrub(grubのstage1)のインストール先

こんな感じになります。もちろん詳細は適宜自身の環境に合わせて下さい。

マルチブート環境の場合、↑このように、grubをPBR(パーティションの先頭セクタ)にインストール(セットアップ)することを強く推奨します。

 

(2008-12-3追記)参考としてgrub上でのパーティション表記の例を示しておきます。
特殊な設定をしていない限り、以下の表の対応が成立します。

一般的な表現grub上での表記Linux上でのSATA接続の場合のデバイス名
1番目のハードディスク※全体(hd0)/dev/sda
1番目のハードディスク※の第1パーティション(hd0,0)/dev/sda1
1番目のハードディスク※の第2パーティション(hd0,1)/dev/sda2
1番目のハードディスク※の第3パーティション(hd0,2)/dev/sda3
1番目のハードディスク※の第4パーティション(hd0,3)/dev/sda4
1番目のハードディスク※の第5パーティション(hd0,4)/dev/sda5
1番目のハードディスク※の第6パーティション(hd0,5)/dev/sda6
1番目のハードディスク※の第7パーティション(hd0,6)/dev/sda7
2番目のハードディスク※全体(hd1)/dev/sdb
2番目のハードディスク※の第1パーティション(hd1,0)/dev/sdb1
2番目のハードディスク※の第2パーティション(hd1,1)/dev/sdb2
2番目のハードディスク※の第3パーティション(hd1,2)/dev/sdb3
2番目のハードディスク※の第4パーティション(hd1,3)/dev/sdb4
2番目のハードディスク※の第5パーティション(hd1,4)/dev/sdb5

※ハードディスクにはUSBメモリやUSB接続のSDカードやUSBアダプタを介したCF等も含みます。内蔵・外付けの区別はありません。
現在は各ハードディスクにパーティションを最高16個作成できます。ただしそのうち1個は拡張領域となるのでファイルシステムとして確保できる数は最大15となります。

Vine4(4.2)をUSBブートで運用する場合の注意点

Vine Linux 4はmkinitrdコマンドがUSBブートに完全に対応していない為、上記と同様の作業(※)をおこなってUSBブートが可能になっても、現状ではカーネルを更新する都度、上記と同様の作業(※)が必要です。(Vine Linux にFedoraのmkinitrdを移植すべきです。)

 
  1. apt等によってカーネルが更新された際には忘れずにinitrdの修正(上記と同様の作業(※))をおこなうことを習慣づけておく
  2. mkinitrdをカスタマイズしてUSBブートに対応させた上でmkinitrdを更新対象から外しておく
  3. カーネルが更新された後に上記と同様の作業(※)をせずに再起動して、ブートが失敗したら、前のカーネルで起動して上記と同様の作業(※)をおこなう

等の方針で運用をおこなう必要があります。

 

※: 上記と同様とはいっても全く同じではありません。/bootのパスが異なりますし、インストール時とは異なり複数バージョンのカーネルモジュールがインストールされていることが殆どなのでカーネルモジュールのコピー元はカーネルバージョンまで指定する必要がある筈ですこの運用時の作業をスクリプト化したものが↓です。上の1もしくは3の方針で運用する場合に使用できます。


ダウンロード filefix-vine4-usbboot-onope.sh

#!/bin/bash -ex

getdefaultversion()
{
default=$(grep -v "^ *#" </boot/grub/menu.lst|grep default)
eval $default
index=0
grep -v "^ *#" </boot/grub/menu.lst|egrep "^\s*kernel"|while read i
do
if [ $index -eq $default ]; then
kernelfile=$(echo $i| cut -d" " -f 2)
real=$(/bin/ls -l ${kernelfile})
echo ${real##*vmlinuz-}
break
fi
index=$(( index + 1))
done
}

ver=$(getdefaultversion)
[ ! -n "${ver}" ] && echo "error" && exit 1

rm -rf /boot/work
mkdir /boot/work
cd /boot/work
gzip -dc ../initrd.img | cpio -idmv

find /lib/modules/${ver} -name uhci-hcd.ko -exec cp -pi {} lib \;
find /lib/modules/${ver} -name ohci-hcd.ko -exec cp -pi {} lib \;
find /lib/modules/${ver} -name ehci-hcd.ko -exec cp -pi {} lib \;

patch -p0 -b <<EOT
--- init.orig	2008-01-03 22:20:36.000000000 +0900
+++ init	2008-01-03 23:10:56.000000000 +0900
@@ -5,6 +5,12 @@
 echo Mounted /proc filesystem
 echo Mounting sysfs
 mount -t sysfs none /sys
+echo "Loading uhci-hcd.ko module"
+insmod /lib/uhci-hcd.ko 
+echo "Loading ohci-hcd.ko module"
+insmod /lib/ohci-hcd.ko 
+echo "Loading ehci-hcd.ko module"
+insmod /lib/ehci-hcd.ko 
 echo "Loading scsi_mod.ko module"
 insmod /lib/scsi_mod.ko 
 echo "Loading sd_mod.ko module"
EOT

find | cpio -H newc -o | gzip -9 > ../initrd.img

ブート対応USBメモリについて

よく「ブート対応のUSBメモリってどれ?」と質問する人がいます。一般的な用語として「ブート対応USBメモリ」という言い方は確かに間違いではありません。しかしここを読めば気づくと思いますが、技術的にはそんなものはありません。もっと具体的に書きますと、"USBブートする為の機構を持たせられたUSBメモリ"なんてものは存在しないということです。「BIOSがそのUSBメモリのブートに対応しているか」が「ブートするか否か」を決めるのであって、たとえ100種類のPCでブートしないUSBメモリであっても、あるPCのBIOSが対応すればそのPCではUSBブート可能となります。ただし、こんなことを書いている私自身はUSBブート対応のPCで使用してもブートが出来ないUSBメモリにお目にかかったことはありません。初期のUSBメモリの中にはそんなものがあるのでしょうか。殆どのUSBメモリはUSBブートを謳っていませんが、実際には殆ど(まず)可能だというのが実情だと思います。USBハードディスクではPCによってはブートできないものに出くわしたことはあります。
最初の話の結論みたいなものを書いておきます。実際のところは「多くのPCでUSBブート可能なUSBメモリ」が「いわゆるブート対応USBメモリ」というものです。

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White