クリスマスまで6~7日という、12月も中旬にさしかかる最中に当ブログで「アドベントカレンダーやろう!」とは言えず(良いネタも思いつかず)、なので最近ちまちま行っている自宅サーバー構築について少しずつ書いてみようかなと。記してみようかなと。自宅サーバーを構築して何がしたいかというと、主に以下のものを用意したいのです。ファイル共有サーバーiTunesサーバーownCloudGitlabJenkinsその他やってみたいこと(Botさんの召喚とか)というワケでまずはファイル共有サーバーを用意したいのですが、その前にデータ保存を安全にするためRAIDを組みました。その流れをメモしておきます。(先に述べておきますが、自分はLinuxスーパー初心者です。ので、同じく初心者の方対象の内容にしたつもり…です)mdadmを使ってソフトウェアRAIDを組むソフトウェアRAIDを組むにはいくつか方法(LVMやらZFSやら)があるようで、その中でもインフラに詳しい友達に薦められたmdadmを使うことにしました。組む手順の前にサーバー環境を載せておきます。サーバー機N54L PROLIANT-500OSCentOS 7RAM4GBHDD500GB + 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/sda2TB一つ目/dev/sdb2TB2つ目/dev/sdcsdとは「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/sdbGNU 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]1mdadm: 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.90Continue creating array? y「Continue creating array?」と聞かれるので”y”と入力します。すると、mdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.と出て作成開始されますが、これには結構な時間がかかります。RAIDアレイの構成状況の確認はこのコマンドで行いましょう。# cat /proc/mdstatPersonalities : [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/secunused devices: <none>おおよその終了時間は6行目の「finish=236.0min」という箇所です。236分なので約4時間ですね。気長に待ちましょう。終わるとこんなメッセージが表示されます。$cat /proc/mdstatPersonalities : [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.confcatで見てみると、ちゃんと内容が追記されていました。# cat /etc/mdadm.confARRAY /dev/md0 metadata=1.2 name=サーバーのホスト名:0 UUID=6106ce10:58f6dece:3b11655e:67fb9e82 4.RAIDアレイにファイルシステムを作成しマウントするいよいよ最終ステップです。構成したRAIDアレイ/dev/md0にファイルシステムを作成した後、マウントをします。まずは以下のようにmkfsを使ってファイルシステムを作ります。# sudo mkfs -t xfs /dev/md0meta-data=/dev/md0 isize=256 agcount=4, agsize=122086388 blks = sectsz=4096 attr=2, projid32bit=1 = crc=0data = bsize=4096 blocks=488345552, imaxpct=5 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=0log =internal log bsize=4096 blocks=238449, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1realtime =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.serviceenabledenableオプションで自動起動の設定をし、is-enabledでシステム起動時の状態を調べます。メールの送信テストは以下のコマンドで行います。(自分は迷惑メールに入っていました)# mdadm --monitor --test --oneshot --scan余談ですがサーバー機とHDDの費用は合計3万円ほど。冬ですし身体も財布の中も寒いです。ついでに今回の主な参考書籍はこちら。勉強になりましたし助かりました。photo credit: Andrew Abogado via photopincc