CentOSでストレージサーバ(RAID5)を組んでみる – その3 (その他ソフトウェア設定編)

前回の記事まででRAID構築が完了したので、今回はその他ソフトウェア設定を実施していきます。

Sambaの設定

ストレージサーバはネットワーク下で使用するため、ファイル共有機能であるSambaの設定を実施します。Sambaとは、Windowsなどの異なるOSとLinux間でファイル共有を可能にするソフトウェアです。

ユーザーの追加とSambaサービスの起動

まずはSambaで使用するユーザーを追加します。このユーザーがファイル共有にアクセスする際の認証情報となります。下記コマンドでLinuxユーザー「kannami」にSamba用のパスワードを設定しています。なお、事前にLinuxユーザーとして「kannami」が存在している必要があります。もし存在していない場合は、`useradd kannami`コマンドで先にユーザーを作成しておきます。

続けてSambaサービスを起動し、システム起動時に自動的に起動するよう設定します。ここで2つのサービスを起動していますがそれぞれ役割が異なります。smb.serviceはファイル共有の本体機能、nmb.serviceはNetBIOS名前解決サービスで、Windowsネットワークでのコンピュータ名による検索を可能にします。両方を有効にしておくことで、より使いやすい環境になります。

# smbpasswd -a kannami
New SMB password:
Retype new SMB password:
Added user kannami.

# systemctl start smb.service
# systemctl start nmb.service

# systemctl enable smb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
# systemctl enable nmb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.


# firewall-cmd --permanent --add-service=samba --zone=public
success
# firewall-cmd --reload
success

# setsebool -P samba_enable_home_dirs on

ブート・OSディスクの複製

ストレージディスクはRAID5で冗長化されていますが、OSはUSBメモリにインストールしておりRAIDに組み込まれていません。USBメモリの破損に備え、万が一のUSBメモリ破損に備え、バイナリレベルでまるっきり同一のUSBメモリを複製(クローン)することにしました。

ddコマンドの使い方と注意点

クローン作成には「dd」コマンドを使います。このコマンドの強力な点は、通常のファイルコピーでは取得できないパーティション外の先頭セクタ(MBR:Master Boot Record)も含めて、完全なバイナリコピーができることです。そのためブート可能なデバイスもそのまま複製できます。ただしddコマンドは「ディスク破壊者(Disk Destroyer)」とも呼ばれるほど危険なコマンドで、入出力の順序を間違えるなどのミスでシステムが壊れる可能性があります。コマンドの基本形式は以下の通りです。

dd if=[コピー元] of=[コピー先]

また、bsオプションで一度にコピーするブロックサイズを指定できます。bs値によってコピー時間やメモリ使用量をコントロールすることが可能で、一般には4MB, 16MB, 32MBが指定されることが多いです。メモリが足りないとスワップして速度が落ちるためギリギリを狙ってチューニングする人も居るらしいですが、特に性能は求めていないため4MBとして実行しました。ddコマンドの詳しい使い方はdd でディスクをコピーするよく使う例を参照しました。

複製手順

複製に際し、コピー元とコピー先のデバイスファイル名を知っておく必要があります。Linuxカーネルが起動時に出力したメッセージを表示するコマンドdmesgで確認できるようですが、今回は普通にGUI上で確認しました。まず、コピー元のデバイスファイルは以下から/dev/sdfだと分かります。ついでにパーティション情報も確認しておきます。

続いてコピー先のUSBメモリを差し込んだところ、スペアディスク追加時と同様に、特にマウントなどすることなくGUI上でディスクを確認することができました。デバイスファイルが/dev/sdgであること、パーティションはsdg1とsdg2に分かれていることを確認します。

確認したデバイスファイル名に基づいて、以下のコマンドで複製を実施します。結果を見ると25分で完了していますが、いつ終わるのか分からず結構焦りました。後に知りましたが、「status=progress」オプションを使うことで進行状況を表示させることが可能だったようです(ただしLinuxのバージョンによっては対応していない場合もあります)。もしくは別のターミナルを起動して確認することもできるようでした。

# dd if=/dev/sdf of=/dev/sdg bs=4MB
4004+1 レコード入力
4004+1 レコード出力
16018046976 バイト (16 GB) コピーされました、 1505.38 秒、 10.6 MB/秒

複製後の/dev/sdgの状態は以下の通りでした。綺麗に複製されています。USBメモリを差し替えて起動したところ何のエラーもなく起動できました。これで一安心です。

USBブートの注意点

USBメモリにOSを入れて運用する際の注意点として、通常のHDDやSSDに比べて寿命が短い点があげられます。特に書き込み回数に制限があるため、以下の対策を検討すると良いです。

  1. ログファイルを最小限に抑える設定
  2. tmpfsを活用し、一時ファイルをRAMディスク上に置く
  3. 可能であれば読み取り専用でマウントする

例えば、/etc/fstabに以下のような設定を追加することで/tmpと/var/logをRAM上に配置できます。このような工夫でUSBメモリの寿命を延ばすことができます。

tmpfs    /tmp    tmpfs    defaults,size=100M    0 0
tmpfs    /var/log    tmpfs    defaults,size=100M    0 0

OpenSSHの設定

今回制作したたサーバは棚にでも置いておいて電源のON/OFFだけで運用したいと考えています。つまりモニタは勿論、キーボードやマウスといった外部機器を取り外して市販のNASのように運用できることを目指します。なお、現時点でサーバが持っている機能はファイル共有機能 (Samba) のみで、SambaはOSが起動すれば有効になる設定としました。つまり外部機器を使用しない操作で安全にシャットダウンできる仕組みを考えます。

ヘッドレスサーバーとリモート管理

実現方法はいくつかありますが、ターミナルエミュレータ (リモートログオンクライアント) を使って別のPCからネットワーク経由でログインし、CUIコマンドでシャットダウンする方法が一般的なようです。そのためにはセキュア通信プロトコルのSSHを設定する必要があります。SSHとは「Secure Shell」の略で、暗号化された安全な通信を提供するプロトコルです。リモートからサーバを操作するための標準的な方法となっています。

このためにはOpenSSHというパッケージを導入する必要がありますが、CentOS7ではデフォルトでSSHサーバーがインストールされていることがわかりました。実際にTeraTermなどのSSHクライアントを使って接続テストを行ったところ、特に設定変更なしにアクセスできました。これは嬉しい誤算です。

SSHのセキュリティ強化

デフォルト設定でもSSHは使えますが、セキュリティを高めるために/etc/ssh/sshd_configファイルを編集して設定変更を加えることが多いようです。例えば「rootでの直接ログインを禁止」「パスワード認証を無効にして鍵認証のみ許可する」などを設定できるようですが、慣れていないため基本動作の確認を優先してデフォルトのまま進めることにしました。

シャットダウンコマンド

早速シャットダウンしてみたいのでコマンドを調べてみたところ、Linuxでは様々なシャットダウン方法があるようです。3.4. 電源の切り方(シャットダウン)いろいろ | $ cat user Linuxによると、一般的にはshutdownコマンドが使用されるらしいです。shutdownコマンドは管理者用のコマンドのある“/sbin”ディレクトリ配置されています。直ちにシャットダウンする場合は、以下のように実行します。

# /sbin/shutdown -h now

上記の「now」の部分を数字(例えば「10」)に変更すると、指定した分数後にシャットダウンされます。また、「-h」(halt)を「-r」(reboot)に変えれば再起動になります。ちなみに「halt」というコマンドもありますが、こちらを試した際には「System halted」と表示されたままシステムがストールしてしまったため使用していません。後で調べたところ、システム自体は停止しており、物理的に電源ボタンを押して切っても大丈夫な状態だったようです。しかしパワーマネジメント機能との競合などややこしいため、今後はshutdownコマンドを使うことにしました。

その他の設定

システムアップデート

今回は通知バナーでアップデートを促されたので実施しました。また、以下の「yum」コマンドでシステムとインストールされているパッケージが最新の状態に更新されるため実施しました。セキュリティアップデートなども含まれるので、定期的に実行します。

# yum update

また以下のコマンドで自動アップデートを設定することも可能です。CentOS 7では「yum-cron」パッケージを使います。設定ファイル(/etc/yum/yum-cron.conf)を編集することで、セキュリティアップデートのみを自動適用するなど、詳細な設定が可能です。

# yum install yum-cron
# systemctl enable yum-cron
# systemctl start yum-cron

システム監視ツール

長期運用を考えているためシステム監視ツールを導入しました。簡単なものでは「Glances」や「htop」などがあります。これらのツールを使うと、CPU、メモリ、ディスク使用率などをリアルタイムで確認できます。SSHでログインして実行するだけで、サーバの状態が一目でわかります。より高度な監視が必要な場合は「Nagios」や「Zabbix」などの監視システムも検討できますが、家庭用途であれば前述のツールで十分と判断しました。

# yum install epel-release
# yum install htop glances

RAIDの定期チェック

RAIDの健全性は定期的に確認したいところです。以下のコマンドで状態を確認できます。これによって異常が見つかった際に早急に対処することが可能となります。

# cat /proc/mdstat
# mdadm --detail /dev/md0

次回は不具合解析編です。