自宅サーバーのセットアップ (1. OSのインストール、設定)

はじめに

前回の記事で自作 PC を構築したので、OS のセットアップ作業をしていきます。

構築作業を行ったのは 1 年以上前です。

OS のインストール

OS は Linux のディストリビューションの一つである debian を選択しました。

一番最初に触ったのが debian 系で操作に慣れていたので同じものを選択した形になります。

install 当時は 10.2 が最新でしたが、現在は 10.8 が最新のようです。

https://www.debian.org/CD/http-ftp/index.ja.html#stable

image

OS をダウンロードしたらインストール用の USB を作成します。

今回は BalenaEtcher というソフトを作成しました。

dd を使用した方法でも可能です。

https://www.balena.io/etcher/

image

インストーラー USB の作成が完了したら、UEFI から USB ブートを有効にしておきます。

今回はすでに有効済みでした。

あとはインストーラーの手順に沿って言語、タイムゾーン、キーボード、インストール先、インストールするパッケージなどの設定を行います。

インストールするパッケージは

  • GNOME
  • SSH サーバー
  • 標準システムユーティリティ

を選択。

インストール先のディスクは SSD を選択しました。
HDD は後ほど RAID の設定を行います。

image

image

image

インストールが完了したら、USB を抜いて正常に OS が起動するか確認します。

これで OS のインストール作業は完了です。

このあとはキーボードを接続して OS の設定を行っていきます。

sudo の設定

OS のインストール作成時に作成したユーザーで sudo を使用できるように修正します。

$ su -
$ visudo

以下のように追加して保存します。

root    ALL=(ALL)       ALL
追加するユーザー名    ALL=(ALL)       ALL

保存後、sudo が使えるか確認します。
root になることができれば成功です。

$ # ユーザーに戻る
$ exit
# sudoが使えるか確認
$ sudo -i

apt リポジトリの更新

ひとまず忘れないうちに更新しておきます。

$ sudo apt update
$ sudo apt upgrade

vim のインストール

自分は vim 派なので install しておきます。

$ sudo apt install vim

RAID の設定

今回は mdadm と呼ばれるソフトウェアを使用したソフトウェア RAID の構築を行います。 HDD2 本で RAID1(ミラーリング)の設定を行います。 構築に必要な作業はググればいくらでも出てくるので省略します。

参考

構築後はこんな感じです。 HDDA(sda)と HDDB(sdb)で RAID デバイス(md0)を作成した状態になります。 nvme0n1p1 は OS がインストールされた NVMe 接続の SSD です。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda           8:0    0 931.5G  0 disk
└─sda1        8:1    0 931.5G  0 part
  └─md0       9:0    0 931.4G  0 raid1 /srv
sdb           8:16   0 931.5G  0 disk
└─sdb1        8:17   0 931.5G  0 part
  └─md0       9:0    0 931.4G  0 raid1 /srv
nvme0n1     259:0    0 465.8G  0 disk
└─nvme0n1p1 259:1    0 465.8G  0 part  /

mdadm detail で RAID デバイスの状態を確認することができます。

$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Dec 15 01:21:02 2019
        Raid Level : raid1
        Array Size : 976628736 (931.39 GiB 1000.07 GB)
     Used Dev Size : 976628736 (931.39 GiB 1000.07 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Feb 14 15:46:21 2021
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : eagle:0  (local to host eagle)
              UUID : cba86df0:04d011ff:96245842:11d2f787
            Events : 20328

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8        1        1      active sync   /dev/sda1

月初の日曜日 00:57 に cron により checkarray と呼ばれるコマンドが実行される。

57 0 * * 0 root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi

このサイトの情報によると、

  • RAID コントローラーは各ディスクの I/O の成功もしくは失敗の結果を監視している
  • I/O の失敗が許容値を超えた場合、fail つまり故障としてマークしている

とのこと。
重要なのは HDD から故障時に RAID コントローラーに通知する機能はなく、結果ベースで判断しているため、実際に I/O が発生するまで故障しているかどうかはわからないということ。
例えば RAID を構成するディスクが故障した際には、故障しているディスクを交換した後にリビルドを実行する。
つまり、リビルド実行時にアクセスは行われていなかったが故障しているブロックが実はもう片方の正常と判断されていたディスクにあるという可能性がある。
これの予防策として定期的に全ブロックをチェックすることで故障しているブロックを検知するというものらしい。
このコマンドは、RAID ディスクに対して読み取り操作の整合性を検証して、各ディスクの対応するブロックを比較した結果、エラーが発生したら /sys/block/mdX/md/mismatch_cnt ファイルのカウンターを増加させるとのこと。

https://www.thomas-krenn.com/en/wiki/Mdadm_checkarray_function#Troubleshooting_Checks

Checkarray verifies the consistency of RAID-disks with reading operations. It compares the corresponding blocks of each disk in the array. If an error occurs, the counter is increased in the /sys/block/mdX/md/mismatch_cnt file.

現時点も一応チェック

$ cat /sys/block/md0/md/mismatch_cnt
0

問題なさそうですね。

また、RAID や RAID10 の場合、ソフトウェア起因による(ハードの故障ではない場合でも)カウント増加があるらしい。

データが壊れていなくても未使用領域がミスマッチした場合にカウントされる場合があるとのこと。特に swap を使用している場合は起きうるらしい。

今回 swap は使用していないのですが要注意ですね。

https://www.thomas-krenn.com/en/wiki/Mdadm_checkarray_function#Reasons_for_mismatch_cnt

However on RAID1 and RAID10 it is possible for software issues to cause a mismatch to be reported. This does not necessarily mean that the data on the array is corrupted. It could simply be that the system does not care what is stored on that part of the array – it is unused space. The most likely cause for an unexpected mismatch on RAID1 or RAID10 occurs if a swap partition or swap file is stored on the array.

このサイトでは nagios を使用してカウンタを定期的に監視するスクリプトを書いていますね。

一応 root にメールは届きそうですが、監視推奨ですね。

最後にファイルシステムの作成と自動マウントの設定を追加します。

ファイルシステムは ext4 で /srv にマウントするようにします。

$ mkfs.ext4 /dev/md0
$ mount /dev/md0 /srv/

これでアクセスできるようになりましたが、自動マウントするように fstab に設定を追加します。

$ vim /etc/fstab
# 以下を追加して保存する
/dev/md0 /srv ext4 defaults 0 0

これで RAID の設定は完了です。

最後に

ひとまず長くなりそうなのでここで一旦中断します。 次は、ネットワークの設定などを行っていきます。