能書き
私的サーバー構築日誌:仕切り直しからの自宅サーバー構築の続きです。
かつて名機として名を馳せた、古い古い機種であるN54L。化石のようなマシンですが、我が家ではまだ現役です。FreeNAS9.3を入れたままアップグレードもせずにずっと放置してましたが、この度Ubuntuを導入しようと思い立ちました。
機種名ですが。私は「NL54L」だと思ってたんですが、ぐぐると「N54L」としている記事ばかりですね。私の記憶違いかなぁ。と言う訳で「N54L」と表記しておきます。
目標
- HP MicroServer N54L に Ubuntu を導入
- バージョンは最新LTSの Ubuntu 24.04
- ZFSである事を活かして、ストレージはUbuntu導入後に zpool import して使い回す
参考文献
- 我が家のIPアドレス体系 - 私的サーバー構築日誌:dhcpサーバー冗長化 - Qiita
- Ubuntu Server 20.04 インストール手順 - server-memo.net
- [Linux(Ubuntu)]タイムゾーンを日本時間にする5つの方法まとめ - Qiita
- Installation - Ubuntu - Getting Started - OpenZFS
- Linuxでswapを無効化・有効化する - Qiita
- UbuntuにZFSを導入しSambaファイルサーバにする - クリエイターの雑記帳
- zpool-scrub.8 - Man Pages / master / System Administration Commands (8) / zpool-scrub.8 - GitHub
インストールの準備
バックアップ
バックアップ大事。超大事。
私は4TBのHDDを買いまして、USBで外付けして、sshで接続して、/tank
以下を全部cp -R -p
しました。
どうもrsync
コマンドだと、サブディレクトリの認識が怪しくなって、全ファイルのコピーが上手くいかなかったのです。状況把握とか原因追及とかやってるよりもcp -R
しちゃった方が早いと判断しました。
この辺の誤作動がOS変更の大きな理由です。どうせ変えるなら、FreeNAS後継のTrueNASにするよりも、使い慣れたUbuntuにしようと考えたのでした。
OpenZFSを入れるならBSD系OSの方が筋が良いのはわかってます。しかし私はLinuxが好きなのです。
インストーラ
Ubuntuのインストーラはこちら。サーバー用途なのでDesktopではなくてUbuntuServerです。今のLTSの最新バージョンは24.04のようですので、それをダウンロード。
USBメモリへインストールするので Root on ZFS にはしません。その為、この辺の選択は素直に行く方針です。
ダウンロードしたらUSBメモリに焼きます。私は普段使いのWin10マシンでRufusというツールを使いました。画面については以前と変わってないようですな。画面のキャプチャは省略します。
zpool export
ストレージを確認。
zpool list
私の現状ではこうなっています。
# 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
します。
zpool export extra1
メインのストレージtank
もzpool export
したら、なぜかエラーが。
# 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アドレス設定に従って下記のようにする
- 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を設定してないのでパスワードログインです。
ログインできたら、まずはタイムゾーンを設定しましょう。
sudo timedatectl set-timezone Asia/Tokyo
date
コマンドで時刻を表示して確認します。
date
swapファイルが存在しない事を確認。下記コマンドで何も表示されなければOKです。
swapon -s
OpenZFS
インストール
いよいよOpenZFSのインストールです。
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu noble main universe'
sudo apt update
sudo apt install -y zfsutils-linux
ストレージのimport
まずはimport対象のストレージを確認します。
sudo zpool import
今回はこんな表示になりました。
$ 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
にしたいので、そのように指定します。
sudo zpool import -R /mnt -f tank
確認しましょう。zpool list
は一般ユーザーでも実行できます。
zpool list
結果はこんな感じになりました。
$ 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 -
確認。
ls -dl /mnt/tank
上手くいったようです。
$ ls -dl /mnt/tank
drwxr-xr-x 15 root root 15 May 12 2019 /mnt/tank
Scrub
OpenZFSのドキュメントの日本語訳によれば:
スクラブは指定されたプール内のすべてのデータを調べて、チェックサムが正しいことを確認します。
…だそうです。
あんまり頻度が高いとかえってHDDの寿命を縮める事になりますので、今回は毎月1回にしておきます。
systemd を使用するマシンでは、スクラブ タイマーをプールごとに有効にすることができます。
と言う訳で便利なコマンドが提供されるようですので、設定してみます。
sudo systemctl enable zfs-scrub-monthly@tank.timer --now
なお、すぐにスクラブしたい場合は下記コマンドです。
sudo zpool scrub tank
進行状況を表示するのは下記コマンドです。sudo
は要らないようです。
zpool status
こうなりました。scan:
の行に進行状況が表示されてますね。
$ 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からの共有を復活させる所ですが、それは稿を改めます。