今回は、運用中の 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の方が都合がいいのですが、今後も調べ行きましょう。