TrueNASのブートドライブを移行する
fuji44
これまでTrueNASのbootドライブにSDカードを使用していました。 ですが、これはあまり推奨されておらず、SSDに移行することにしました。
ここでは、移行した際の手順をメモしておきます。
大まかな流れ
大半の作業はTrueNASではなく、Ubuntu 20.04のライブイメージで行います。 これは、TrueNASのブートドライブを書き換えるため、TrueNAS自身では行えないためです。
作業に使うはUbuntuでなくてもよいですが、ほかのディストリビューションを使う場合は、
gpart
と zpool
等のコマンドが利用できる必要があります。
SDカードのデータをそのままSSDにコピーする
まず、移行先のSSDは全体を空の状態でフォーマットしておきます。
次に、移行元のSDカードと移行先のSSDを同じデバイスに接続して、Ubuntuを起動します。
起動出来たら、dd
コマンドでSDカードの内容をそのままSSDにコピーします。
移行元の領域全体をそっくりそのままコピーするので、移行先の容量が移行元よりも小さいとだめです。
SD、SSDのデバイスファイルは lsblk
などで確認してください。 この例ではそれぞれ
/dev/sdg
と /dev/sdf
です。 bs
と status
オプションは任意。
sudo dd if=/dev/sdg of=/dev/sdf bs=1k status=progress
SSDのGPTパーティションを拡張する
コピーが完了したらもう元のSDカードは使わないので取り外します。 次にコピー先のSSDをブートドライブとして指定し、TrueNASを起動します。 うまくコピーできていればSDカードでブートした時とまったく同じ状態で起動できるはずです。
起動出来たら、SSDのGPTパーティションを見てみます。
SSDのデバイス名を指定する必要がるので、 gpart list
などで事前に確認します。
# gpart show ada0
=> 40 30375856 ada0 GPT (119G) [CORRUPT]
40 1024 1 freebsd-boot (513k)
1624 30374832 2 freebsd-zfs (14G)
実行してみると [CORRUPT]
という表示が見えます。これはGPTの状態がおかしいことを表しているようです。
内容を見ると、全体サイズが119Gであるのに、513kと14Gの2つのパーティションしか表示されません。
正常であればfreebsd-zfsの後に残りのサイズのFreeのパーティションが表示されるはずです。
これはSDカードのデータをそのままコピーしたため、GPTのメタデータがそのままになっているためです。
これを解消するのは以下のコマンドを実行するだけです。
# gpart recover ada0
ada0 recovered
実行後に再度 gpart show
するとフリーのパーティションが認識されるようになります。
# gpart show ada0
=> 40 250069600 ada0 GPT (119G)
40 1024 1 freebsd-boot (512K)
1064 30374832 2 freebsd-zfs (14G)
30375896 219693744 - free - (105G)
GPTが正常になったので、フリーの部分をつかって第2パーティションを拡張します。
# gpart resize -i 2 ada0
ada0p2 resized
完了後に再度 gpart show
を表示します。
フリーパーティションがなくなり、第2パーティションが拡張されているはずです。
# gpart show ada0
=> 40 250069600 ada0 GPT (119G)
40 1024 1 freebsd-boot (512K)
1064 250068576 2 freebsd-zfs (119G)
ZFSプールを拡張する
GPTパーティションを拡張しても、ZFSのプールを拡張しなければ使えません。 現在のプールサイズを見ると、小さいままです。
# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
freenas-boot 14G 4.66G 9.34G - - - 33% 1.00x ONLINE -
pool1 29T 21.6T 7.40T - - 8% 74% 1.00x ONLINE /mnt
プールを拡張するには、 zpool online -e <pool> <device>
コマンドを実行します。
プール名は zpool list
のNAMEでもわかります。 deviceは、 zpool status
で確認します。プール名の下に表示されているのがdeviceです。
# zpool status
pool: freenas-boot
state: ONLINE
status: Some supported 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(5) for details.
scan: scrub repaired 0B in 00:20:19 with 0 errors on Thu Dec 17 04:05:20 2020
config:
NAME STATE READ WRITE CKSUM
freenas-boot ONLINE 0 0 0
gptid/c3d3ca0d-1f9b-11e9-85fe-c4346b21cd80 ONLINE 0 0 0
errors: No known data errors
pool: pool1
state: ONLINE
...
あとは、
# zpool online -e freenas-boot gptid/c3d3ca0d-1f9b-11e9-85fe-c4346b21cd80
ディスク名を確認する
geom disk list
移行先ディスクをスペアとして追加 https://docs.oracle.com/cd/E19253-01/819-6260/gcvcw/index.html
zpool add freenas-boot spare ada0
追加を確認。追加したデバイスが AVAIL
になっていたらOK。
# zpool status freenas-boot
pool: freenas-boot
state: ONLINE
status: Some supported 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(5) for details.
scan: scrub repaired 0B in 00:20:19 with 0 errors on Thu Dec 17 04:05:20 2020
config:
NAME STATE READ WRITE CKSUM
freenas-boot ONLINE 0 0 0
da4p2 ONLINE 0 0 0
spares
ada0 AVAIL
errors: No known data errors
リプレースする。 INUSE
になって、しばらくするとデータが同期され始める。
# zpool replace freenas-boot da4p2 ada0
# zpool status freenas-boot
pool: freenas-boot
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sat Dec 19 18:17:53 2020
4.66G scanned at 9.33M/s, 2.63G issued at 5.26M/s, 4.66G total
2.74G resilvered, 56.39% done, no estimated completion time
config:
NAME STATE READ WRITE CKSUM
freenas-boot ONLINE 0 0 0
spare-0 ONLINE 0 0 0
da4p2 ONLINE 0 0 0
ada0 ONLINE 0 0 0 (resilvering)
spares
ada0 INUSE currently in use
errors: No known data errors
同期が完了したら元のストレージを切り離す。
# zpool detach freenas-boot da4p2
# zpool status freenas-boot
pool: freenas-boot
state: ONLINE
status: Some supported 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(5) for details.
scan: resilvered 4.91G in 00:16:13 with 0 errors on Sat Dec 19 18:34:06 2020
config:
NAME STATE READ WRITE CKSUM
freenas-boot ONLINE 0 0 0
ada0 ONLINE 0 0 0
errors: No known data errors