みなさん、こんにちは。
NetBSD挑戦記も3回目です。1回目から読みたい方は↓こちらからどうぞ。
前回の記事では、Raspberry Pi 3A+上のNetBSDという「見通しのよい草原の家」に、苦労の末に「金庫(Veracrypt)」を設置することに成功しました。
「さあ、これで今まで撮りためた写真やドキュメントをNetBSDで守れるぞ」
意気揚々と作業を始めた私でしたが、結論から申し上げます。私は、この草原の厳しさを甘く見ていました。
今回は、Linux環境でフォーマットされたHDDをNetBSDで読み込もうとして盛大に壁にぶつかった記録、そして「それでもファイルサーバーとしては機能する」という意地を見せたSamba構築の記録です。
1. FUSEという架け橋、そして崩落
私の手元にあるHDDは、Raspberry Pi OS(Linux)で運用していたもので、全体がVeracryptで暗号化され、ファイルシステム自体はext4 でフォーマットされています。
NetBSDは標準ではext4を扱えませんが、ユーザー空間でファイルシステムを扱う FUSE を使えばなんとかなるはず。そう信じていました。
FUSEの導入
まずは必要なドライバー類を pkgin でインストールします。
su
pkgin install fuse fuse-ext2 fuse-ntfs-3g fuse-exfat
fuse-ntfs-3g とfuse-exfat はNTFSとexFATの検証用にインストールします。
マウント用のフォルダも作成しておきます。
mkdir /mnt/veracrypt /mnt/ext4 /mnt/ntfs /mnt/exfat
Veracryptによる復号(マウントの儀)
HDDをUSB接続し、デバイス名を確認します。
sysctl hw.disknames
# sd0 などが表示される
パーティション情報を確認します。
disklabel sd0
ターゲットが sd0a だとわかったので、前回苦労してビルドしたVeracryptで復号を試みます。ここで注意が必要なのは、NetBSDではブロックデバイス(sd0a)ではなく、RAWデバイス(rsd0a) を指定する必要がある点です。
veracrypt --text --mount /dev/rsd0a /mnt/veracrypt
パスワードを入力します。すると、無情にもエラーメッセージが吐き出されました。
Error: mount_ffs: /dev/vnd0 on /mnt/veracrypt: incorrect super block
「失敗か?」と焦りましたが、実はこれで成功しています。
どういうことかと言うと、Veracryptは復号した後、親切にもNetBSD標準のファイルシステム(FFS)としてマウントしようと試みます。しかし、HDDの中身はext4なので、OS側が「これはFFSじゃない(スーパーブロックが違う)」とエラーを返しているのです。
マウント自体は失敗していますが、裏では復号された仮想デバイスへの割り当て(アタッチ)は完了しており、中身は /dev/vnd0 に展開されています。 つまり、ここからは /dev/vnd0 に対して手動でマウントを行えばよいわけです。
ext4の壁、そしてNTFSの拒絶
気を取り直して、復号された中身(/dev/vnd0 のパーティション e )は ext4 です。これを fuse-ext2 を使ってマウントしてみます。
# 書き込みは怖いので、まずはRead Onlyで
fuse-ext2 /dev/vnd0e /mnt/ext4 -o ro,force
……動きません。エラーさえ出力されず、うんともすんとも言いません。調べてみると、どうやらNetBSDの fuse-ext2 は古く、現代的なext4の機能(extentsなど)を使っていると正しく扱えないようです。
「ext4がダメなら、問題の切り分けだ」
FUSEの設定自体が間違っている可能性も疑い、検証のために手元にあった NTFS フォーマットのディスク(暗号化なし)のマウントも試してみました。
ntfs-3g /dev/sd1e /mnt/ntfs -o ro
しかし、これもダメでした。
対応しているはずのNTFSですらまともにマウントできません。どうやら、NetBSDにおけるLinux系やWindows系ファイルシステムの扱いは、私が想像していた以上に茨の道のようです。
最後に、ダメ元で exFAT を試してみました。
mount.exfat /dev/sd2e /mnt/exfat
これは成功しました! 唯一、exFATだけは正常に読み書きできます。
ここで残酷な現実が確定しました。 「Linux(ext4)やWindows(NTFS)で使っていたHDDを、そのままNetBSDに持ってきても読めない」
私のHDDはext4。つまり、中身を退避させてNetBSD標準のファイルシステム(FFS)でフォーマットし直さない限り、このHDDはここではただの回転する鉄の塊です。
「OSが変われば、文化も変わる」。頭ではわかっていても、ここまで互換性の壁が厚いとは……。
2. それでも窓(Samba)を開ける
移住計画(HDDの流用)は頓挫しました。しかし、ここで引き下がっては「NetBSDは何もできなかった」で終わってしまいます。
HDDの中身は読めなくても、「NetBSDでファイルサーバー(Samba)を構築し、WindowsやMacからアクセスさせる」こと自体はできるはずです。未来のために、Sambaの環境構築だけは完了させておくことにしました。
Sambaのインストールと準備
pkgin install samba-4.21.9
# 共有用ディレクトリの作成
mkdir /home/share
設定ファイルの編集
smb.conf を設定します。
vi /usr/pkg/etc/samba/smb.conf
以下の設定を入力しました。
[global]
workgroup = WORKGROUP
server string = NetBSD Samba Server
security = user
passdb backend = tdbsam
unix charset = UTF-8
dos charset = CP932
display charset = UTF-8
[share]
path = /home/share
browseable = yes
writable = yes
guest ok = no
ユーザー設定
Sambaにアクセスするためのユーザーを作成します。SambaユーザーはOSのユーザーである必要があるので、既存のユーザー(ここでは shareuser とします)を使います。
# Samba用パスワードの設定
smbpasswd -a shareuser
# フォルダの所有グループを変更して書き込めるようにする
chgrp shareuser /home/share
※ 運用時には、Unixユーザーを指定し、パスワードも同じパスワードを設定しておくことが現実的です。
起動設定
起動スクリプトをコピーし、自動起動を有効にします。
cp -p /usr/pkg/share/examples/rc.d/smbd /etc/rc.d/
cp -p /usr/pkg/share/examples/rc.d/nmbd /etc/rc.d/
echo 'smbd=YES' >> /etc/rc.conf
echo 'nmbd=YES' >> /etc/rc.conf
# サービス起動
/etc/rc.d/smbd start
/etc/rc.d/nmbd start
PCからアクセスしてみると……無事、フォルダが見えました! Wi-Fiの通信速度の関係なのか少し反応が遅いですが、ファイルの読み書きも可能です。ファイルサーバーとしては完璧に動作しています。
おまけ – 日本語ロケールの設定
作業中に気になったのが、ターミナルで日本語ファイル名を表示したときの文字化けです。 これを直すために、ユーザーの .profile にロケール設定を追記しておきます。
# rootから抜ける
exit
# shareuserでログインしているなら
vi ~/.profile
以下2行を追記します。
export LANG=ja_JP.UTF-8
export LC_CTYPE=ja_JP.UTF-8
再ログインすれば日本語が正常に表示されるようになります。
まとめ – ほろ苦い到達点
こうして、私のRaspberry Pi 3A+は
- Veracryptのビルドに成功し(暗号化/復号化機能はある)
- Sambaサーバーとして稼働し(ファイル共有機能はある)
- しかし、手持ちのHDD(ext4)は読めない
という、なんとも「宝の持ち腐れ」な状態に着地しました。
「はじめからNetBSDでファイルサーバーを組んで、NetBSD標準のファイルシステムでフォーマットされたHDDなら問題ない」
それはその通りです。しかし、既存のLinux資産をそのまま生かそうとした私の目論見は、FUSEの互換性の壁に阻まれました。
今回の失敗で学んだのは、NetBSDは「他のOSの真似事」をする場所ではなく、「NetBSDの流儀」で一から構築を楽しむ場所だということです。 このSambaサーバーにはまだ空っぽのフォルダしかありませんが、いつかここに、NetBSDのためだけの新しいHDDを繋ぐ日が来るかもしれません。
この小さな草原の家(NetBSD)をどう育てていくか、もう少し悩みながら楽しみたいと思います。
本日も最後までお読みいただきありがとうございました。
それでは、よいNetBSDライフを!



