FreeBSD13.1: USB メモリをGPTファイルシステムとして登録する

今回は、運用中の FreeBSD 13.1システムに、あとからUSB接続フラッシュメモリを追加するサンプルコマンドメモです。

スティックPCでサーバーを構築して運用を開始したところですが、私としては初のUSBメモリで構成したシステム。特に /var としてマウントしているUSBメモリの劣化と寿命が気になるので、エラーが出始めた場合に、即、別のUSBメモリにスイッチできるように予備を準備しておこうと思います。

FreeBSD で sysinstall が現役だったころは、あとからディスクを追加する時、sysinstall コマンド内のディスクマネージメントを使っていたので、ファイルシステムを後から追加することが苦になることはありませんでした。

FreeBSD10あたりだったか、sysinstall が bsdinstall, bsdconfig に置き換わり、ファイルシステムの追加が不便になりました。bsdconfig では、ディスクの追加だけが出来ないのですよ。必ずインストールが付いてくる。ディスクの追加だけっていうのが出来ない。幸いなことに、最近は、後からファイルシステムを追加したいということが無かったため、不便なbsdconfig/bsdinstall でも何とかなっていました。

そして、今回、スティックPCをルーターとして使用することにしたため、複数の2GB~128GB USBメモリの組み合わせでファイルシステムを構成することになり、手動によるファイルシステム作成を行う必要が出て来ました。

USBメモリベースのファイルシステムの場合に必要になるのが、ラベル名で管理すること。USBハブからの抜き差しで簡単にデバイスファイル名が変わってしまうので、ファイルシステムに名前を付けて、名前でアクセスできるようにしておかないと、後々ひどい目に遭います。なのでディスクラベルを付けることが目標になります。「freebsd ディスク パーティション 追加 コマンド」というキーワードで検索すると、上位に出てくるのがfreebsd.org のドキュメント。まだ fdisk disklabel コマンドベースの解説が主流で、コマンドは残っているもののMBRディスクになっちゃうので都合が悪い。

参考にさせてもらったのが、https://www.basekernel.jp/basekrnl/0751 のページ。

まず、利用するコマンドが、gpart, glabel になります。

目的の USBメモリが /dev/da2 に接続されている場合、

gpart を使用して確認すると、

# gpart show -l da2
=>      40  15858784  da2  GPT  (7.6G)
        40  15858784    1  (null)  (7.6G)

glabelで確認する場合、

# glabel status

が便利です。gpart を使うと指定デバイスのパーティションとラベル状況が、glabel を使うと、指定可能なラベルの一覧が表示されます。

この /dev/da5 USBメモリは、カードリーダースロットに接続された 8GB CFカード。
一応ファイルシステム全体がGPTにフォーマットされていますが、今後のことを考えてサラの状態にします。

# gpart destroy -F da2
da2 destroyed
# gpart show -l da2
gpart: No such geom: da2

続いて、全体をGPTファイルシステムで作成。

# gpart create -s GPT da2
da2 created
# gpart show -l da2
=> 40 15858784 da2 GPT (7.6G)
40 15858784 - free - (7.6G)

外枠ができたので、全体を freebsd-ufs としてパーティション作成。今使っているUSBメモリは小サイズのものばかりなので、ファイルシステムをパーティションに区切ることは行っていません。

# gpart add -t freebsd-ufs da2
da2p1 added
# gpart show -l da2
=> 40 15858784 da2 GPT (7.6G)
40 15858784 1 (null) (7.6G)

パーティション作成に続いて、newfsでファイルシステムを作成。

# newfs -U /dev/da2p1
/dev/da2p1: 7743.5MB (15858784 sectors) block size 32768, fragment size 4096
using 13 cylinder groups of 625.22MB, 20007 blks, 80128 inodes.
with soft updates
super-block backups (for fsck_ffs -b #) at:
192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776, 11524224, 12804672, 14085120, 15365568

この状態で、マウント可能ですが、まだラベルが付いていないので、ラベルを作ります。

# glabel label -v cf-8gb da2p1
Metadata value stored on da2p1.
Done.

-v は実行結果表示。cf-8gb がラベル名で、da2p1 がパーティション名。

以下は、glabel status コマンドで /dev/da2p1 にラベルが付いた結果を確認し、
デバイスファイルが作成されていることを確認。テストで、ラベルが付いたパーティションを/mnt にマウントしてみた結果です。

# glabel status
                                      Name  Status  Components
                  diskid/DISK-0000001C8E5C     N/A  da2
gptid/000971ec-1ac9-11ed-acb7-00e04c686b04     N/A  da2p1
                    ufsid/62f7375938b9bc23     N/A  da2p1
                              label/cf-8gb     N/A  da2p1
# ll /dev/label
total 0
crw-r-----  1 root  operator  0xab  8月 13 14:39 cf-8gb
# mount /dev/label/cf-8gb /mnt
# df
Filesystem             1K-blocks    Used    Avail Capacity  Mounted on
/dev/mmcsd0p2           28169368 3881192 22034628    15%    /
devfs                          1       1        0   100%    /dev
/dev/mmcsd0p1             262129    1747   260382     1%    /boot/efi
/dev/label/cf-8gb        7668044       8  7054596     0%    /mnt

 

残念ながら、この glabel label コマンドで作成したラベルは、/dev/gpt ではなく、/dev/label で扱われるようです。OSインストール時に命名したラベルと、異なるディレクトリで管理することになりますが、とりあえずはこれでいいでしょう。/dev/gpt 下にラベルを作る方法に関しては今後も研究課題。

USBメモリを追加接続し、ファイルシステムを作成してラベルを付ける方法が分かったので、今後はファイルシステムを追加しないといけないケースが発生しても、安心です。

追記:

tunefs -L “ラベル名” でマウント解除したファイルシステムにラベルを付けられることがわかり、試してみました。

# tunefs -L cf-8gb /dev/da2

コマンドはエラー無く終わりました。glabel status で確認してみると、/dev/gpt 下ではなく、/dev/ufs ディレクトリの下に、ラベルが出来てました。

# glabel status
                                      Name  Status  Components
                  diskid/DISK-0000001C8E5C     N/A  da2
gptid/000971ec-1ac9-11ed-acb7-00e04c686b04     N/A  da2p1
                    ufsid/62f7375938b9bc23     N/A  da2p1
                                ufs/cf-8gb     N/A  da2p1
                              label/cf-8gb     N/A  da2p1
# ll /dev/ufs
total 0
crw-r-----  1 root  operator  0xbc  8月 13 15:38 cf-8gb

/dev/ufs 下でもいいのですが、他のパーティションと見た目を合わせるために、/dev/gptの方が都合がいいのですが、今後も調べ行きましょう。

コメントを残す