Logical Rabbit.

さくらのVPS

CentOS 7ベースでNAS構築(Windows用)

CentOS 7でSambaサーバ立ち上げてNAS化して、突然壊れると困るので一通りの自動チェックを組み込むまで。

ConoHaたんサイコー! とオブジェクトストレージにぽいぽいとデータを放り込んで、調子に乗って巨大なファイルとかも突っ込んでいたらさすがに使用量がヤバい…というか使用料金がヤバいので、そこまで重要じゃないわりに容量のでかいファイル類はローカルストレージに置こうかと。でも一応RAID1くらいにはしておこうかと。

てな流れで。

なお、一通り稼働するようになったので一先ず重要度の低いデータをオブジェクトストレージからNASに退避して見たのですが、それでも101MBになってしまいぐぬぬ顔の状況デス。オブジェクトストレージ、100MB単位の課金なんだよ…。

  • OSはCentOS 7.3、ミニマムインストールから始めてます
  • SELINUXとFirewalldはOn
  • NAS領域はHDD二本立てのSoftware RAID1
    • /dev/sdb および /dev/sdc を使用

Software RAIDの構築 (mdadm)

HDDの初期化

$ sudo parted
(parted) select /dev/sdb
(parted) mklabel gpt
(parted) mkpart
パーティションの名前?  []? (適当に)raid
ファイルシステムの種類?  [ext2]? 
開始? 0%
終了? 100%
(parted) set 1 raid on
(parted) select /dev/sdc
(parted) mklabel gpt
(parted) mkpart
パーティションの名前?  []? (適当に)raid
ファイルシステムの種類?  [ext2]? 
開始? 0%
終了? 100%
(parted) set 1 raid on
(parted) quit

mdadmの導入とRAID構築

$ sudo yum install mdadm
$ sudo mdadm --create md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

/proc/mdstat でも cat しながらしばし放置。その間に /etc/mdadm.conf を作成。

まずUUIDの確認(各UUIDは当然のことながら実行環境によって変わるので注意)。bklidの出力のうち、最初の「UUID="~"」部分を確認。

$ sudo blkid /dev/sdb1
/dev/sdb1: UUID="6a9a2635-edee-45c2-7ef4-78526beb2d8d" UUID_SUB="b735d74f-575e-b659-132d-833c247f2ebb" LABEL="md0" TYPE="linux_raid_member" PARTLABEL="raid" PARTUUID="8b0ed382-bd94-4f32-afed-8fc1f5a54922"
$ sudo vi /etc/mdadm.conf
(以下のように書き込む)
DEVICE /dev/sdb1 /dev/sdc1
ARRAY /dev/md0 uuid=6a9a2635-edee-45c2-7ef4-78526beb2d8d
  • DEVICE で使用するパーティションを指定
  • ARRAY に続く /dev/md0 が作成したSoftware RAIDの名前
  • uuid=の後に、先程blkidで調べたUUID=以降を記述

/proc/mdstat のほうではmd0になっていないこともあるけど(実行時はmd127になっていた)、RAID構築完了後mdadm.confを使用するようにしてやれば名前は固定化されるので問題なしかと。

/proc/mdstat のほうで構築完了となったら、OS起動時の動作確認も含めてリブート。これで自動的に/dev/md0が構築されないと、色々まずいので。

/dev/md0 を対象として改めてファイルシステム構築

$ sudo parted /dev/md0
(parted) mklabel gpt
(parted) mkpart
パーティションの名前?  []? (適当に)data
ファイルシステムの種類?  [ext2]? xfs
開始? 0%
終了? 100%
(parted) quit
$ sudo mkfs -t xfs /dev/md0p1

/etc/fstabに追記

まずUUIDの確認。

$ sudo blkid /dev/md0p1
/dev/md0p1: UUID="4cd893d8-133d-4bc9-b9f5-2c679cf831cd" TYPE="xfs" PARTLABEL="data" PARTUUID="add820f3-5a35-4f87-a6b9-9c752668018e"

マウントポイントを作成して(/var/data とした)、/etc/fstabへ追記。

$ sudo vi /etc/fstab
(以下のように書き込む)
UUID=4cd893d8-133d-4bc9-b9f5-2c679cf831cd /var/data xfs defaults 0 0

マウントしてみる。OSリブートしてブート時の動作確認もやっておいた方が安心。

$ sudo mount /var/data

このままだと/var/dataはrootしか書き込めないし、かといって丸ごと一般ユーザー書き込み可にすると面倒くさいので、/var/data/NAS を作成、この下をNAS領域として一般ユーザー書き込み可とする。

「一般ユーザー」の定義は「usersグループに属する」としました。…といってもこれ自宅サーバだしアカウント自分しかいないからなんでも良いんだけどさ…。そして自分自身がusersグループに属していない罠。

$ sudo mkdir /var/data/NAS
$ sudo chown root.users /var/data/NAS
$ sudo chmod g+wrx /var/data/NAS
(自分自身がusersに属していなかったので追加)
$ sudo usermod -G wheel,users kmamiya
(/var/data/NASへ書き込めることの確認)
$ newgrp users
$ touch /var/data/NAS/test

Sambaの導入

最近のLinux上で動かしてWindowsで共有するファイルシステムのトレンドって何なのかなーとひとしきり調べてみたけど、仕様バージョンは変わっているけど相変わらずSambaなのね、と。

$ sudo yum install samba

あとトラブルシューティングのために、結局samba-clientパッケージも入れた。トラブルっていっても、要はSELINUX設定忘れていたんだけど(汗)

続いて/etc/samba/smb.confの設定。今回はユーザーごとのHomeとか使わないし、プリンタも共有しないのでばっさり捨てる。ていうか一人サーバーだから全部 guest にしてしまうのも一手なんだけどさ。

[global]
        workgroup = (Windows環境に合わせる)
        security = user
        map to guest = bad user
        force group = users
        passdb backend = tdbsam
[NAS]
        path = /var/data/NAS
        browsable = yes
        read only = no

十数年ぶりくらいにSambaの設定やったので、色々過不足があるような気もする…。

最後にアカウント情報の設定。この辺りも最近色々動きが激しいっぽい。が、どうも過渡期っぽいので最新は追わないことにした。

$ sudo pdbedit -a -u kmamiya
$ sudo pdbedit -L -v (確認)

ファイアウォールの設定

$ sudo firewall-cmd --list-all
(当然sambaは許可されていないので追加)
$ sudo firewall-cmd --add-service samba
$ sudo firewall-cmd --list-all
(問題なかったので永続化)
$ sudo firewall-cmd --add-service samba --permanent

SELINUXの設定

本当はこれを思い出すまでに四苦八苦しているけどそこは封殺で。怪しいと思ったら取り敢えず setenforce 0 で挙動確認、後で忘れず戻せ。

必要なツールのインストール。

$ sudo yum install  policycoreutils-python

Sambaのデータ領域に設定すべきfcontextを探す。smbd_var_run_t が適当っぽい気がした。

$ sudo semanage fcontext --list |grep smbd
$ sudo semanage fcontext --add -t smbd_var_run_t '/var/data(/.*)?'
$ sudo semanage fcontext --list |grep smbd (追加されたことを確認)

/var/data に対して適用。

$ ls -lZ /var/data
$ sudo restorecon -R -v /var/data
$ ls -lZ /var/data (fcontextが変更されたことを確認)

Sambaサーバの起動

…ところでnmbはまだ起動する必要、あるんですかね…? (実はSELINUXが原因だった)トラブルシューティングの最中に、念のためとおもって起動してしまったけど。

$ sudo systemctl status smb (disableになってる)
$ sudo systemctl enable smb
$ sudo systemctl status nmb (disableになってる)
$ sudo systemctl enable nmb
$ sudo systemctl start nmb
$ sudo systemctl start smb

各々statusを確認して、エラーになっていなければOKとする。

Windows PCから接続

\\<IPアドレス>\NAS で認証画面が出て、pdbeditでセットしたアカウント/パスワードで接続、書き込みなどできればOKです。

各種ヘルスチェックの設定

オブジェクトストレージに保管するほどでもないにせよ無くしたくないアレやコレやなので、稼働させているHDD等のヘルスチェックは大事なのです。…なのです!

ログ監視

Swatch を試してみようとしたところでCPANのインストール先問題に引っかかって四苦八苦していたのだけど、よくよく考えるとこのサーバは外部公開しないし、使わないときは止めてしまうことも多いので定常的なログ監視は要らない気がしてきた。

常時起動するようになったら考えよう。

HDDのS.M.A.R.T.監視

あとで。