クリスマスまで6~7日という、12月も中旬にさしかかる最中に当ブログで「アドベントカレンダーやろう!」とは言えず(良いネタも思いつかず)、なので最近ちまちま行っている自宅サーバー構築について少しずつ書いてみようかなと。記してみようかなと。
自宅サーバーを構築して何がしたいかというと、主に以下のものを用意したいのです。
- ファイル共有サーバー
- iTunesサーバー
- ownCloud
- Gitlab
- Jenkins
- その他やってみたいこと(Botさんの召喚とか)
というワケでまずはファイル共有サーバーを用意したいのですが、その前にデータ保存を安全にするためRAIDを組みました。その流れをメモしておきます。(先に述べておきますが、自分はLinuxスーパー初心者です。ので、同じく初心者の方対象の内容にしたつもり…です)
目次
mdadmを使ってソフトウェアRAIDを組む
ソフトウェアRAIDを組むにはいくつか方法(LVMやらZFSやら)があるようで、その中でもインフラに詳しい友達に薦められたmdadmを使うことにしました。
組む手順の前にサーバー環境を載せておきます。
サーバー機 | N54L PROLIANT-500 |
---|---|
OS | CentOS 7 |
RAM | 4GB |
HDD | 500GB + 2TB * 2 |
サーバー機はこちらで、
HDDにはこちらを2つ使用しました。
ちなみに今回、主に2つの記事を参考にソフトウェアRAIDを組みました。
参考記事:
CentOSでソフトウェアRAIDの構築 – maruko2 Note.
3TB-HDDでソフトウェアRAID構築 | Scribble
上記2つの記事を見ればある程度作業は進むのですが、自分なりに躓いた点もあったのでそこらへんを書きます。(初心者なので変なところに躓いたのでしょう)
一つ目の参考記事から引用しますと、ソフトウェアRAIDを組む手順はこのようになります。
大まかな手順は次のようになる。
- RAID を構成するディスクに RAID 用パーティションを作成 (fdisk コマンドなど)。
- mdadm コマンドで RAID アレイを作成。
- /etc/mdadm.conf を作成。
- RAID アレイをフォーマット(ファイルシステム作成)。
それでは早速作業内容について。(以降の例ではRAID 1を組みます)
0.RAIDを組むデバイスを確認する
パーティションを作成する前に、RIADを組みたいデバイスを確認しておきます。サーバー機に接続されたHDDを確認するには以下のコマンドを実行します。
# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc
これは自分の例ですが、サーバー機に接続されている500GB、2TB、2TBはそれぞれデバイスドライバを通してディレクトリに割り当てられます。
500GB | /dev/sda |
---|---|
2TB一つ目 | /dev/sdb |
2TB2つ目 | /dev/sdc |
sdとは「SCSIディスク」の略で(多分)、後ろにつく”a”、”b”、”c”はサーバー機に接続された順番で振り分けられます。上の例では/dev/sda1
や/dev/sda2
とありますが、この数字がパーティションになります。/dev/sda
はOSをインストールするときにパーティション分けしているので、既に2つも出来上がっているのです。
今回は2TBを2つ使ってRAIDを組みたいので、/dev/sdb
と/dev/sdc
それぞれにRAID用のパーティションを作成することになります。(間違ってOSのデータを格納しているデバイスを操作するとOSが壊れるので注意です)
1.RAID用パーティションを作成する
parted
を使ってパーティションを作成します。似たような機能のコマンドfdisk
がありますが、parted
の方がより良いそうなのでこちらを使います。
# parted /dev/sdb
GNU Parted 3.1
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted)
(parted) unit GB
(parted) mklabel gpt
(parted) mkpart primary xfs 0 2000
(parted) set 1 raid on
この一連のコマンドを行うとパーティションが作成されます。(mkpart
の指定の”0 2000”とは「HDDの0~2000GBを使用する」、つまり2TB全てパーティションで使うという意味です)
パーティション情報はprint
で見れます。
(parted) print
モデル: ATA WDC WD20EZRX-00D (scsi)
ディスク /dev/sdb: 2000GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 0.00GB 2000GB 2000GB primary raid
このパーティション作成手順を他のハードディスクにも行います。全て終わったらquit
で終了します。
(parted) quit
最初に使ったコマンドでパーティションが作成されているか確認できます。
# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdc /dev/sdc1
ちゃんとsdb1とsdc1が追加されていますね。
2.mdadmコマンドでRAIDアレイを作成
ここで1つ躓いたのは、そもそもmdadmプログラムが入っていないのが原因でした。「mdadmコマンドが使えないよ」みたいなエラーが出た場合、以下のコマンドでプログラムをインストールしましょう。
# yum install mdadm
インストールが終わったら早速RAIDアレイを作成します。自分の例では「RAID 1」「デバイス数2」「/dev/sdb1と/dev/sdc1を使う」という内容なので、このようなコマンドになります。/dev/md0
にRAIDアレイを作成します。
# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[bc]1
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
「Continue creating array?」と聞かれるので”y”と入力します。すると、
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
と出て作成開始されますが、これには結構な時間がかかります。RAIDアレイの構成状況の確認はこのコマンドで行いましょう。
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
1953382208 blocks super 1.2 [2/2] [UU]
[>....................] resync = 0.5% (10811072/1953382208) finish=236.0min speed=137128K/sec
unused devices: <none>
おおよその終了時間は6行目の「finish=236.0min」という箇所です。236分なので約4時間ですね。気長に待ちましょう。終わるとこんなメッセージが表示されます。
$cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
1953382208 blocks super 1.2 [2/2] [UU]
unused devices: <none>
3.mdadm用の設定ファイルを作成
mdadm用の設定ファイルを作成し、そこにRAIDアレイ情報を書き込みます。mdadm --detail --scan
とするとアレイ情報が出るのでこれを標準出力でファイル(mdadm.conf)に追記します。
ですが、ここでまたもや躓きました。参考記事の通りに実行すると、
# mdadm --detail --scan >> /etc/mdadm.conf
-bash: /etc/mdadm.conf: 許可がありません
というエラーが出るんですね。sudo
を利用して権限を持っていたのですが上手くいかず。ので、まず先に設定ファイルを作成しておきました。
# touch /etc/mdadm.conf
そして標準出力>>
を使った方法ではなく、パイプ|
とtee
を使った方法に切り替えるとコマンドが通りました。(以下では念のためsudoコマンドを追加しておきます。root権限を持っていれば必要無いでしょう)
# sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
catで見てみると、ちゃんと内容が追記されていました。
# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=サーバーのホスト名:0 UUID=6106ce10:58f6dece:3b11655e:67fb9e82
4.RAIDアレイにファイルシステムを作成しマウントする
いよいよ最終ステップです。構成したRAIDアレイ/dev/md0
にファイルシステムを作成した後、マウントをします。
まずは以下のようにmkfs
を使ってファイルシステムを作ります。
# sudo mkfs -t xfs /dev/md0
meta-data=/dev/md0 isize=256 agcount=4, agsize=122086388 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=488345552, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=238449, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
(ちょっと時間がかかるので待ちます)
ファイルシステムの作成が終わったら、特定のディレクトリにマウントします。今回自分の例で言えば、/data
というディレクトリを作ってここにマウントしました。/etc/fstab
にマウント情報を追記します。(このファイルに追記すると、以降サーバー起動時に自動的にマウントしてくれるようになります)
ただ、このマウントの記述にはディレクトリ指定(/dev/md0)よりもUUIDという識別子で指定したほうが無難のようです。ので、先にRAIDアレイのUUIDを確認してみましょう。
# ls -l /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 9 12月 18 23:56 ec8338de-460a-49f8-a53d-06ee2829e285 -> ../../md0
他にもデバイスは出ますが、今回確認したいのはRAIDアレイ(md0)です。確認したところ「ec8338de-460a-49f8-a53d-06ee2829e285」がRAIDアレイのUUIDでした。こちらを利用してマウント指定します。
viなどのエディタで/etc/fstab
を開いて以下のように1行追加します。
UUID=ec8338de-460a-49f8-a53d-06ee2829e285 /data xfs defaults 1 2
これで自動的にマウントされるようになります。保存が終わったら、
# mount -a
を行い、/etc/fstabで指定されているファイルシステムを全てマウントします。もし、
mount: can't find UUID=uuid
と出た場合はUUIDが間違っているので、打ち間違いがないか確認してみましょう。マウントがちゃんとできているかはmount
で確認できます。
# mount
(一番下が新しいです)
/dev/md0 on /data type xfs (rw,relatime,attr2,inode64,noquota)
以上でmdadmによるソフトウェアRAID構築は完了です。
2014年12月21日追記:
mdmonitorの起動ができていたので追記。
5.RAIDアレイを監視
障害が発生した場合に知らせたいメールアドレスを設定ファイル/etc/mdadm.conf
に書き込みます。
MAILADDR sample@example.com
そしてmdmonitorの起動ですが、systemctl
コマンドでできました。
# systemctl start mdmonitor.service
# systemctl enable mdmonitor.service
# systemctl is-enabled mdmonitor.service
enabled
enableオプションで自動起動の設定をし、is-enabledでシステム起動時の状態を調べます。メールの送信テストは以下のコマンドで行います。(自分は迷惑メールに入っていました)
# mdadm --monitor --test --oneshot --scan
余談ですがサーバー機とHDDの費用は合計3万円ほど。冬ですし身体も財布の中も寒いです。ついでに今回の主な参考書籍はこちら。勉強になりましたし助かりました。
photo credit: Andrew Abogado via photopincc