linuxサーバのHDDをUSBメモリに交換
自宅で管理しているサーバのストレージを、USBメモリにリプレースしてみました。特に合理的な理由も目的もなく、単にUSBメモリやSDカードの価格が安くなってきており、興味本位の実験としてやってみたいと思っただけでしたが、その経過を記します。サーバの構成や稼動内容は、以下のようになっていました。
- CPU
- AMD Opteron 2cores (電圧下げとダウンクロックで1GHz動作)
- メモリ
- 2GiB
- ディストロ
- CentOS 5.10 (更新を重ねた現在のバージョン)
- 主な用途
- Apache2 / PHP5 / MySQL(MyISAM及びInnoDB) / メールやcronによるプログラム実行など
- ストレージ
- 60GBハードディスク2台構成によるソフトウェアRAID1(linux標準のRAID)
60GBのストレージは/boot /var /tmp などをパーティションで区切り、それぞれRAIDにする構成になっています。この状態から、16GBに収まるように構造を縮小したり拡大したりして、USBメモリに入るようにします。
ファイルシステム・md・パーティションの構成を変更する方法に関しての詳細は、ネットの情報に譲るとして詳しく書きませんが、一応の流れを書きます。
- サーバの電源を落とし、念のため現在の状態をバックアップ
- 稼動していたハードディスクの片方を繋げたPCを、Live起動のCentOS6 で起動
- e2fsck -f でファイルシステムのチェック
- resize2fs でファイルシステムの大きさを変更
- mdadm --grow でRAIDボリュームを適切な大きさに
- Live版をシャットダウンして電源を落とし、変更を行った片方のHDDだけで起動
- (たぶん起動時にfsckが自動で行われて)普通に起動
- cat /proc/mdstat で見るとデグレード状態
- USBメモリを挿す(挿しておいて起動でも)
- fdisk でUSBメモリのパーティショニング及びタイプのセット
- mdadm --add でUSBメモリをメンバーに追加
- 電源を落とし、ハードディスクをはずしてUSBメモリだけで起動
- USBメモリを挿して、先ほどと同様にfdisk及びRAIDメンバーに参加
躓いたところとしては、●パーティションの大きさ>RAIDボリュームの大きさ(persistentスーパーブロック位置)>ファイルシステムの大きさ、それぞれの値●LiveDVDでraidボリュームを操作した後、md*の番号がmd127,md126...などに変わってしまうことの対処●USBメモリのデバイス名割り当て などなどありました。
ということで、USBメモリでの起動に関して、いくつか。
■USBメモリで起動させるにはどうすればよいのか。マザーボードのBIOSの設定を変更することが必要です。ネットにたくさん情報があります。
■USBメモリのデバイス名割り当てについて。/dev/sda, /dev/sdb...などがどのように割り当てられるのか、いくつかのマザーボードで試しました。結論としては、「毎回不定ではないが、どのように決定されるのかはudev次第である」ように思えました。USBのホストコントローラー(UHCI/EHCI)の順序(挿し位置)によって決まりそうな気もしたのですが、必ずしもそうでもないようで、現在のPCでは、USBの順番としては後のほうが/dev/sda になっています。このあたり、RAIDを組む際には、決め打ちするかUUIDなどを使用するか、判断が必要と思われます。
■起動できないUSBメモリについて。これは、当方では見たことがありませんが、あっても不思議ではありません。起動できないというか、起動するとおかしくなるものはありました。いわゆる100yenショップのダイソーで購入した白いSDカードのリーダーライター(G051との品番?表記)は、読み書きも速く、アクセスランプも付いていて非常に快適なのですが、linuxのUSB起動に使用すると、カーネルが立ち上がってread-writeモードになった瞬間におかしくなり、カーネルパニックとなります。ファイルシステムの内部も破壊されています。普通にWindowsなどで使っている分には全く問題がないので、カードリーダー内部での処理の相性やドライバとの相性などがあるのかもしれません。同じく100yenショップのキャンドゥで購入した透明の真四角っぽいリーダーライターは、遅いのですがこのような問題はなく、起動に使用できました。他のリーダーライターでも問題は出なかったのですが、このような相性などの可能性には留意したほうがよいかもしれません。
■USBホストコントローラについて。USB2.0規格の最大転送レートは480Mbps(60MiB/秒)です。チップセットによると思われますが、RAIDのようにUSBメモリを平行して複数使用する場合には、ルートハブごとに接続を分けると、読み書きの効率が若干よくなるかもしれません。
■USBメモリの容量(総セクタ数)について。今回、同じ製品をいくつか購入しましたが、同一の製品であっても、製造時期やロットによって総セクタ数が異なることを知りました。RAID1を組む場合、後から追加するほうが小容量だったとしたら、RAID1が組めません。ですので、最初にメモリ容量いっぱいで計画を立てないで、少し小さく見積もっておくほうがよいかもしれません。
■USBメモリの速度について。USBメモリでもSDカードでも、速度にばらつきがあります。当方の構成では、/dev/sdaに、SiliconPower のUHS-I microSDカード(SP016GBSTHBU1V10-SP)をキャンドゥのリーダーで接続し、/dev/sdbには、SiliconPower のUSBメモリ(Marvel M01 SP016GBUF3M01V1B)を接続しています。Marvel M01のほうなのですが、いわゆるランダムライトが非常に遅いです。Crystal Disk Mark で計ってみると、4K write 0.006MB/sなどという数値が出てきます。microSDのほうは高速で、4K write 1M/sを超えています。この組み合わせで運用してみると、ターミナルからコマンドを叩いても、不安になるレベルで反応が返ってきません。なにかを書き込んでいるときには、ハングアップしてるんじゃないかと思うくらいに動きが鈍くなります。反して高速な製品を使用すると、HDDと遜色のない動作となりました。ので、USBメモリやSDカードでlinuxを運用しようと思うなら、ネットでよく調べて、ランダムライトが高速な製品を選ぶことが非常に重要だと思いました。いわゆるLiveUSBでlinuxを動かすのであればともかく、通常の運用をする場合には、読み書きの速度がきわめて重要だと思います。
■USBメモリの耐久性と寿命について。当方では、/etc/fstabでnoatimeにしているくらいで、後はHDDと同じように書き込みを行っています。MySQLデータベースの更新でも、/var/logにも、どんどん書き込みが行われている状態でどのくらい寿命がもつのか楽しみです。Nandのウェアレベリングやガベージコレクションに興味があっていろいろと調べたのですが、その有無やアルゴリズムなど、一切が不確かなので、実際の運用状態で自分で試してみるしかなさそうです。※USBメモリやSDカードの耐久テストを行っているサイトもあって参考にしましたが、そのテストは全領域に対する順次書き込みによるものであり、read modify write や一部だけを繰り返して書き換えるような実際的な運用のされかたに関しては、どのくらいもつのか全く見当が付きません。
最後に。USBメモリでのlinuxサーバ運用は、ビジネス用途などに導入するケースはほぼ考えられないと思われます。しかしながら、継続した運用コスト・保守管理・安定性を無視できる「パーソナルユース」であれば、普段Windows で使用しているPCに挿すだけで使用でき、なおかつハードディスクのデュアルブートなどをしなくても環境を分離して保持ができるメリットがあります。USBメモリによるlinux運用は、大いに実用的だと思いました。
※追記1.
USBメモリのudev認識順ですが、EHCIはUSB機器を認識したら動的に番号を割り当てる?ので、BIOSによるハードディスク起動順などが関係してくるかもしれません。
※追記2.
Nandフラッシュにおけるパーティション開始位置の最適化ですが、イレースブロック・アロケーション等を考慮して、全て4Mbytesを境界にしてみました。
※追記3.
USBメモリのSilicon Power Marvel M01 16GB ですが、あまりに遅くて(反応が悪くて)かなわないので、一日で同じSilicon Power のUHS-I microSDカードに交換し、同じカード2枚のRAID1となりました。本文中でも触れていますが、こちらは快適。
※追記4.
Marvel M01 に関しては、購入後にいろいろありました。製品をネットで調べてみると、当方が購入したのは、とりわけ遅いハズレのようでした。サーバから取り外した後、仕方なくなんかに使おうかと思ったら、購入して何日かで何回も挿抜していないのに、USB3.0で認識しなくなりました。もともと、USBポートに挿すときに、コネクタ部分が微妙に本体にめり込んでみたり、「ぐきっ」と素直ではない嫌な感触があったので、USBコネクタ奥のUSB3.0端子部分をドライバでこじっていたら、ピンが折れました。普通はここで捨てるのでしょうが、分解してコネクタ端子を付け直すことにしようと、構造のあたりをつけて分解を試みました。が、光る尻の部分が素直に抜けると思いきや分解できる作りではなく、その部分がちぎり取れました。ともかくも基板を抜き出すと、コントローラーはPHISONのものでした。コネクタ端子の構造を確認し、aitendo(パーツショップ) で部品(50円)を購入、半田付けをして直しました。Marvel M01は、価格コムを見ていると売れているようです。NTFSでうまくフォーマットできないという話題があるようですが、それはたぶんハード的な不具合ではなく、出荷時にスーパーフロッピー形式でフォーマットされている?ので、ためしにSD フォーマッター4.0で一度フォーマットした上で、更にWindowsでNTFSにフォーマットしてみると、うまくいくかもしれません。
※追記5.
更にMarvel M01 ですが、あまりにも遅くて仕方がないので、PHISON PS2251-07-Vファームウェアの書き換えなどを模索しましたが、うまくいきませんでした。ところで、Silicon Power のグローバルシェアの詳細はわかりませんでしたが、海外オフィスを見ると、ロシア・インド・ミャンマー・日本・韓国などに展開しているようです。米欧のユーザーが積極的にSilicon Power の製品を選好しているような感じもしません。いろいろな製品が選び放題で豊かな筈の先進国・日本ですが、価格コムではSilicon Power の製品が、不評がありながらも大人気です。Silicon Power による日本への市場展開と設定がまさに成功しているのですが、マーケティングの狙いを慮ると複雑な感じもします。