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

ハードウェア実装が終わったので続いてOSを導入してみる。

CentOSの入手

USBメモリから起動するインストールメディアを作成

まずCentOS DVDのISOイメージをDLしておく。
続いてUSBメモリをFAT32でフォーマットし、USBメモリにLinux ISOイメージを書き込むアプリケーション「UNetbootin」(http://unetbootin.github.io/)を使用して書き込んだ。
メディア作成は30分程度で完了。

swap領域のサイズについて

パーティションを設定する前にそれぞれの意味を理解しておく必要がある。
http://mike2mike.s21.xrea.com/centos.html

そもそもswapとは何か。

インストール時のRAIDはOSも冗長化出来るのが強み

再度挑戦

Winで使用していたHDDを流用しているが、ファイルシステムが消しきれていないことが原因でエラーが出たと推測。OSをまっさらな工場出荷状態のストレージにインストールしてみる。

ストレージ用HDD5台に加えてケース内に配置することになるため、コンパクトなものを所望。
はじめはSSDが妥当かなと考えたが、OS部分に必要な容量は16GBで十分なことが分かりUSBメモリを用意した。

・エラーが発生。
「bootloader install failed desyuuryou…」
http://vault.centos.org/7.2.1511/isos/x86_64/

ーーーーー

USB加えたあとの構成

はじめの状態

ブート

ルート

スワップ

以下のエラーが発生。自動設定で割り当てられたEFIなるものを作成して再度トライしてみようと思う。

これ

ブート

ルート

スワップ

通った。その他ネットワーク等の設定を行ってインストール開始。数千個のパッケージをインストールするため、大体5時間くらい掛かってやっと完了。少し感動。

再起動後、ログイン画面が現れた。これが見たかった。

ログイン後、簡単な設定を行って一先ずCentOS7の導入は完了。

RAIDディスクの確認

RAIDが組めているか確認する。コマンド確認は置いておいて、一先ず目についたディスク管理を開いてみた。

ディスク1

ディスク2

ディスク3

ディスク4

ディスク5-1

ディスク5-2

ディスクRAID

RAID確認

こんな感じになっていた。

コマンドでも確認。RAID構築用コマンド mdadmを使用する。ここに説明。

# mdadm --detail /dev/md/root
/dev/md/root:
           Version : 1.2
     Creation Time : Sun Dec 31 22:50:18 2017
        Raid Level : raid5
        Array Size : 8790402048 (8383.18 GiB 9001.37 GB)
     Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Fri Jan  5 19:17:09 2018
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : #ブログアップ時削除
              UUID : #ブログアップ時削除
            Events : #ブログアップ時削除

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       4       8       49        3      active sync   /dev/sdd1

 

ホットスペアディスクの追加

RAID5のスペアディスクはOSのインストール時に追加できないため、CentOS上で実行することになる。早速用意していたスペアディスクを繋いで再起動したところ、特にマウントなどすることなくGUIで確認することができた。ディスクは購入後にWindows環境で初期不良のチェックをしていたため、Microsoft予約済みなるパーティションが作成されていた。まずこのデバイスファイル/dev/sde1を削除する。

削除する領域を上の図のように選択し、 “-” を押してパーティション削除した。当然だが/dev/sde2も消えて無くなり/dev/sdeとなった。これで下準備は完了。

パーティショニング

gdiskする。fd00を選択。パーティーションの開始セクタと終了セクタの選択では、何も入力せずにENTER。これで最大サイズになる。
パーティーションのタイプはLinux RAIDにした。入力はfd00。

# gdisk /dev/sde
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/sde: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): #ブログアップ時削除
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 5860533101 sectors (2.7 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name

Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-5860533134, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-5860533134, default = 5860533134) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L
0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE          
4200 Windows LDM data      4201 Windows LDM metadata  7501 IBM GPFS            
7f00 ChromeOS kernel       7f01 ChromeOS root         7f02 ChromeOS reserved   
8200 Linux swap            8300 Linux filesystem      8301 Linux reserved      
8e00 Linux LVM             a500 FreeBSD disklabel     a501 FreeBSD boot        
a502 FreeBSD swap          a503 FreeBSD UFS           a504 FreeBSD ZFS         
a505 FreeBSD Vinum/RAID    a580 Midnight BSD data     a581 Midnight BSD boot   
a582 Midnight BSD swap     a583 Midnight BSD UFS      a584 Midnight BSD ZFS    
a585 Midnight BSD Vinum    a800 Apple UFS             a901 NetBSD swap         
a902 NetBSD FFS            a903 NetBSD LFS            a904 NetBSD concatenated 
a905 NetBSD encrypted      a906 NetBSD RAID           ab00 Apple boot          
af00 Apple HFS/HFS+        af01 Apple RAID            af02 Apple RAID offline  
af03 Apple label           af04 AppleTV recovery      af05 Apple Core Storage  
be00 Solaris boot          bf00 Solaris root          bf01 Solaris /usr & Mac Z
bf02 Solaris swap          bf03 Solaris backup        bf04 Solaris /var        
bf05 Solaris /home         bf06 Solaris alternate se  bf07 Solaris Reserved 1  
bf08 Solaris Reserved 2    bf09 Solaris Reserved 3    bf0a Solaris Reserved 4  
bf0b Solaris Reserved 5    c001 HP-UX data            c002 HP-UX service       
ed00 Sony system partitio  ef00 EFI System            ef01 MBR partition scheme
ef02 BIOS boot partition   fb00 VMWare VMFS           fb01 VMWare reserved     
fc00 VMWare kcore crash p  fd00 Linux RAID            
Hex code or GUID (L to show codes, Enter = 8300): fd00
Changed type of partition to 'Linux RAID'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sde.
The operation has completed successfully.

 

GUIで確認。

フォーマット

mkfsする。xfsにした。

# mkfs.xfs /dev/sde1
meta-data=/dev/sde1              isize=512    agcount=4, agsize=183141597 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=732566385, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=357698, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

GUIで確認。

スペアディスク追加前の状態確認

mdadmコマンドで確認。

# mdadm --detail /dev/md/root
/dev/md/root:
           Version : 1.2
     Creation Time : Sun Dec 31 22:50:18 2017
        Raid Level : raid5
        Array Size : 8790402048 (8383.18 GiB 9001.37 GB)
     Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Jan  7 17:32:01 2018
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name :  #ブログアップ時削除
              UUID :  #ブログアップ時削除
            Events :  #ブログアップ時削除

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       4       8       49        3      active sync   /dev/sdd1

 

スペアディスクの追加

mdadmコマンドのaddオプションで/dev/sde1を指定すれば良いらしい。

# mdadm --manage /dev/md/root --add /dev/sde1
mdadm: added /dev/sde1
スペアディスク追加後の状態確認

mdadmコマンドで確認。Spare Devicesが “1” になり、/dev/sde1がNumber:5 state:spareとして追加されていた。

# mdadm --detail /dev/md/root
/dev/md/root:
           Version : 1.2
     Creation Time : Sun Dec 31 22:50:18 2017
        Raid Level : raid5
        Array Size : 8790402048 (8383.18 GiB 9001.37 GB)
     Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Jan  7 17:33:56 2018
             State : clean 
    Active Devices : 4
   Working Devices : 5
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : #ブログアップ時削除
              UUID : #ブログアップ時削除
            Events : #ブログアップ時削除

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       4       8       49        3      active sync   /dev/sdd1

       5       8       65        -      spare   /dev/sde1

 

GUIで確認したところ、/dev/sde1の “内容” がLinux RAIDメンバーとなっていた。スペアディスクの追加完了!

sambaの設定

# 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メモリを複製(クローン)することにした。

クローンはddコマンドにて実施。ddコマンドはパーティション外に存在する先頭セクタも含め、バイナリレベルでデータを取り出せる強力なコマンド。単純にコピーするだけではMBRなどにアクセスできないのだが、ddコマンドなら可能なためブートデバイスも複製できる。

ただし入出力の順序を間違えるなど、ちょっとしたミスでシステムが破壊されるため注意が必要。コマンド仕様はdd if=[コピー元] of=[ コピー先 ]で、bsオプションで一度にコピーするサイズを指定する。bs値によってコピー時間やメモリ使用量をコントロールすることができて、一般には4MB, 16MB, 32MBが指定されることが多いらしい。メモリが足りないとスワップして速度が落ちるためギリギリを狙ってチューニングする人も居るらしいが、特に性能は求めていないため4MBとして実行した。ddコマンドの詳しい使い方は以下のサイトを参照した。

複製に際し、コピー元とコピー先のデバイスファイルを知っておく必要がある。dmesgコマンドで確認できるらしいが、今回は普通にGUI上で確認した。まず、コピー元のデバイスファイルは以下から/dev/sdfだと分かる。ついでにパーティション情報も確認。

続いてコピー先のUSBメモリを差し込んだところ、マウントしなくとも普通に認識された。デバイスファイルが/dev/sdgであることを確認。パーティションはsdg1とsdg2に分かれていた。

以下のコマンドで複製を実施。結果を見ると25分で完了しているが、いつ終わるのか分からなくて結構モヤモヤした。進行状況は別のBashを起動して確認することもできるらしい。

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

 

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

OpenSSHの設定

今回作ったサーバはその辺りの棚にでも置いておいて電源のON/OFFだけで運用したい。つまりモニタは勿論、キーボードやマウスも取り外して市販のNASのように運用したい。これらの入出力装置は主にログイン・シャットダウンのために使用しているが、現時点でサーバが持っている機能はファイル共有機能(Samba)のみで、SambaはOSが起動すれば有効になる設定としたためログインの必要はない。つまり何かしらの操作で安全にシャットダウンできれば良い。

実現方法はいくつかあるが、ターミナルエミュレータ(リモートログオンクライアント)を使って別PCからネットワーク経由でログインし、CUIコマンドでシャットダウンするのが一般的。そのためにはセキュア通信プロトコルのSSHを設定する必要があり、OpenSSHというパッケージを導入することになる。

と思っていたら、CentOS7ではデフォルトでSSHサーバーがインストールされているらしい。試してみたところ、ホストPCからTera Termで普通にアクセスできた。なら早速シャットダウンしてみたいので、コマンドは何ぞやと調べてみたところこれまた色々とある。以下のサイトによると、一般的にはshutdownコマンドが使用されるらしい。

shutdownコマンドは管理者用のコマンドが配置されているディレクトリ“/sbin”にあるらしく、場所を明示して実行しないとうまくいかない場合があるとのこと。直ちにシャットダウンする場合は、以下のように実行する。

# /sbin/shutdown -h now

ちなみに上記の“now”を“10”とすると10分後にシャットダウンするらしい。また“-h”を“r”とすると再起動するらしい。使い所は浮かばないけど、頭の片隅に置いておく。

また上記コマンドには代用コマンド“halt”がある。実はこのコマンド初めに試していたのだが、実行後に“System halted”と表示されたままうんともすんとも言わなくなってしまったため使っていない。後に調べたところ、既にシステムは停止しており物理ボタンで安全に電源が切れる状態らしい。いや全然代用じゃないじゃん動作違うじゃんと思ったが、深入りしないでおくことにする。パワーマネジメント機能がある PC でLinuxカーネルの再構築を行うか、初めからパワーマネジメント機能を有効にしているLinuxカーネルを使っている場合はshutdownの完了でPCの電源が自動的にOFFされるといった情報もあり、この辺が効いてそうだが。

以上。