私的サーバー構築日誌：Ubuntu 24.04 LTS in MicroServer N54L

# 能書き

[私的サーバー構築日誌：仕切り直し](https://qiita.com/katz_engineer/items/1f21de2bd9072c260ae6)からの自宅サーバー構築の続きです。

かつて名機として名を馳せた、古い古い機種であるN54L。化石のようなマシンですが、我が家ではまだ現役です。[FreeNAS9.3を入れた](https://qiita.com/katz_engineer/items/26c4718b3c3fc0164130#%E8%87%AA%E5%AE%85%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E7%AB%8B%E3%81%A6%E3%81%BE%E3%81%97%E3%81%9F)ままアップグレードもせずにずっと放置してましたが、この度Ubuntuを導入しようと思い立ちました。

機種名ですが。私は「NL54L」だと思ってたんですが、ぐぐると「N54L」としている記事ばかりですね。私の記憶違いかなぁ。と言う訳で「N54L」と表記しておきます。

## 目標

- HP MicroServer N54L に Ubuntu を導入
    - バージョンは最新LTSの Ubuntu 24.04
- ZFSである事を活かして、ストレージはUbuntu導入後に zpool import して使い回す

## 参考文献

- [我が家のIPアドレス体系 - 私的サーバー構築日誌：dhcpサーバー冗長化 - Qiita](https://qiita.com/katz_engineer/items/03be4aac1db264ca4197#%E6%88%91%E3%81%8C%E5%AE%B6%E3%81%AEip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E4%BD%93%E7%B3%BB)
- [Ubuntu Server 20.04 インストール手順 - server-memo.net](https://www.server-memo.net/ubuntu/ubuntu-server-2004_install.html)
- [[Linux(Ubuntu)]タイムゾーンを日本時間にする5つの方法まとめ - Qiita](https://qiita.com/digitalhimiko/items/698d5cd7cc8201695111)
- [Installation - Ubuntu - Getting Started - OpenZFS](https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/index.html#installation)
- [Linuxでswapを無効化・有効化する - Qiita](https://qiita.com/HirumaT/items/2a492f4c56ec557417f2)
- [UbuntuにZFSを導入しSambaファイルサーバにする - クリエイターの雑記帳](https://cgbeginner.net/ubuntu-zfs/)
- [zpool-scrub.8 - Man Pages / master / System Administration Commands (8) / zpool-scrub.8 - GitHub](https://openzfs.github.io/openzfs-docs/man/master/8/zpool-scrub.8.html)

# インストールの準備

## バックアップ

バックアップ大事。超大事。

私は4TBのHDDを買いまして、USBで外付けして、sshで接続して、`/tank`以下を全部`cp -R -p`しました。

どうも`rsync`コマンドだと、サブディレクトリの認識が怪しくなって、全ファイルのコピーが上手くいかなかったのです。状況把握とか原因追及とかやってるよりも`cp -R`しちゃった方が早いと判断しました。

この辺の誤作動がOS変更の大きな理由です。どうせ変えるなら、FreeNAS後継のTrueNASにするよりも、使い慣れたUbuntuにしようと考えたのでした。

OpenZFSを入れるならBSD系OSの方が筋が良いのはわかってます。しかし私はLinuxが好きなのです。

## インストーラ

[Ubuntuのインストーラはこちら](https://ubuntu.com/download/server)。サーバー用途なのでDesktopではなくてUbuntuServerです。今のLTSの最新バージョンは24.04のようですので、それをダウンロード。

USBメモリへインストールするので Root on ZFS にはしません。その為、この辺の選択は素直に行く方針です。

ダウンロードしたらUSBメモリに焼きます。私は普段使いのWin10マシンで[Rufus](https://forest.watch.impress.co.jp/library/software/rufus/download_11453.html)というツールを使いました。画面については[以前](https://qiita.com/katz_engineer/items/667aefcab488cc4a1caf#%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%A9%E3%83%BC%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97ssh%E3%81%AE%E7%92%B0%E5%A2%83%E6%95%B4%E5%82%99)と変わってないようですな。画面のキャプチャは省略します。

## zpool export

ストレージを確認。

```console
zpool list
```

私の現状ではこうなっています。

```console
# zpool list                                                                                                          
NAME           SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT                                                   
extra1        3.62T  1.83T  1.80T         -    26%    50%  1.00x  ONLINE  -                                                         
freenas-boot  7.19G   534M  6.67G         -      -     7%  1.00x  ONLINE  -                                                         
tank          2.26T  1.32T   960G         -    37%    58%  1.00x  ONLINE  /mnt
```

`extra1`は、先程のバックアップ先のストレージです。これを`zpool export`します。

```console
zpool export extra1
```

メインのストレージ`tank`も`zpool export`したら、なぜかエラーが。

```console
# zpool export tank                        
cannot unmount '/var/db/system/syslog-5ece5c906a8f4df886779fae5cade8a5': Device busy
```

もしかしたら、昔、jailか何かでDBを起動してたかも知れません。しかしメニュー上でjailを選択しても何も表示されないんですよね。これ以上は調べるのも面倒なので、そのまま放置します。褒められたやり方ではありませんが。

## 電源OFFなど

- シャットダウンして、電源が落ちた事を目視確認
- バックアップ先ストレージであるUSB接続HDDを外す
- インストーラを入れたUSBメモリを挿す

さあここからです。

# インストール

## Ubuntu

電源を入れてUbuntu 24.04 LTSのインストーラを起動。画面の表示に誘導されて操作を進めます。

- 言語はEnglish（(UK)の付いていない方）
- キーボードは、Layout・Variantの両方ともJapanese
- Ubuntu Server（(minimized)ではない方）を選択
    - Additional options（サードパーティドライバー）は選択しない
- IPアドレスはManual、[我が家のIPアドレス設定](https://qiita.com/katz_engineer/items/03be4aac1db264ca4197#%E6%88%91%E3%81%8C%E5%AE%B6%E3%81%AEip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E4%BD%93%E7%B3%BB)に従って下記のようにする
    - Subnet: 172.16.0.0/16
    - Address: 172.16.1.3
    - Gateway: 172.16.2.1
    - Name servers: 172.16.1.2
    - Search domains: home
- Proxy address: （空欄）
- Mirror address: （デフォルトのまま）
- Use an entire disk →慎重に、内部に挿してあるUSBメモリを選択（SIZEで判断）
- Confirm destructive action →Continue
- ログイン名など →読者各位の設定でよろしく
- Upgrade to Ubuntu Pro → Skip for now
- Install OpenSSH Server →チェック
    - Import SSH key →後程設定する事にして、今は何もしない
- Featured server snaps →dockerなどもあって気になるが、必要に応じて後程設定する事にして、今は何も選択しない

40分くらい時間が掛かりましたが、インストール処理が完了すると画面下部に`[ Reboot Now    ]`が表示されるので、選択してサーバーを再起動します。画面に従ってインストーラを入れたUSBメモリを外してENTERキーを押します。

再起動したら、手元のWindowsマシンで`ssh`コマンドを使ってログインできます。SSH keyを設定してないのでパスワードログインです。

ログインできたら、まずはタイムゾーンを設定しましょう。

```console
sudo timedatectl set-timezone Asia/Tokyo
```

`date`コマンドで時刻を表示して確認します。

```console
date
```

swapファイルが存在しない事を確認。下記コマンドで何も表示されなければOKです。

```console
swapon -s
```

## OpenZFS

### インストール

いよいよOpenZFSのインストールです。

```console
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu noble main universe'
```

```console
sudo apt update
```

```console
sudo apt install -y zfsutils-linux
```

### ストレージのimport

まずはimport対象のストレージを確認します。

```console
sudo zpool import
```

今回はこんな表示になりました。

```console
$ sudo zpool import
   pool: tank
     id: 2891006712653798077
  state: ONLINE
status: The pool was last accessed by another system.
 action: The pool can be imported using its name or numeric identifier and
        the '-f' flag.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY
 config:

        tank        ONLINE
          raidz2-0  ONLINE
            sdb     ONLINE
            sdc     ONLINE
            sdd     ONLINE
            sda     ONLINE
            sde     ONLINE
```

`zpool import`に当たっては`-f`オプションを指定します。`zpool export`していなかったので。

またマウント先は`/mnt/tank`にしたいので、そのように指定します。

```console
sudo zpool import -R /mnt -f tank
```

確認しましょう。`zpool list`は一般ユーザーでも実行できます。

```console
zpool list
```

結果はこんな感じになりました。

```console
$ zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank  2.26T  1.32T   960G        -        8G    37%    58%  1.00x    ONLINE  -
```

確認。

```console
ls -dl /mnt/tank
```

上手くいったようです。

```console
$ ls -dl /mnt/tank
drwxr-xr-x 15 root root 15 May 12  2019 /mnt/tank
```

### Scrub

[OpenZFSのドキュメント](https://openzfs.github.io/openzfs-docs/man/master/8/zpool-scrub.8.html)の日本語訳によれば：

> スクラブは指定されたプール内のすべてのデータを調べて、チェックサムが正しいことを確認します。

…だそうです。
あんまり頻度が高いとかえってHDDの寿命を縮める事になりますので、今回は毎月1回にしておきます。

> systemd を使用するマシンでは、スクラブ タイマーをプールごとに有効にすることができます。

と言う訳で便利なコマンドが提供されるようですので、設定してみます。

```console
sudo systemctl enable zfs-scrub-monthly@tank.timer --now 
```

なお、すぐにスクラブしたい場合は下記コマンドです。

```console
sudo zpool scrub tank
```

進行状況を表示するのは下記コマンドです。`sudo`は要らないようです。

```console
zpool status
```

こうなりました。`scan:`の行に進行状況が表示されてますね。

```console
$ zpool status
  pool: tank
 state: ONLINE
status: Some supported and requested features are not enabled on the pool.
        The pool can still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.
  scan: scrub in progress since Thu Jun 20 18:31:21 2024
        4.65G / 1.32T scanned at 176M/s, 0B / 1.32T issued
        0B repaired, 0.00% done, no estimated completion time
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sda     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors
```

# 仕舞い

これで、我が家のNASのOSをLinuxの最新版に置き換えられました。

結果としてバックアップは使用せずに済みましたが。バックアップ大事。超大事。

次はSambaを入れてWindowsからの共有を復活させる所ですが、それは稿を改めます。