【実践編3】開かない金庫と、開かれた窓 – NetBSDでNAS化を目指してFUSEとSambaに挑む

みなさん、こんにちは。

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-3gfuse-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+

  1. Veracryptのビルドに成功し(暗号化/復号化機能はある)
  2. Sambaサーバーとして稼働し(ファイル共有機能はある)
  3. しかし、手持ちのHDD(ext4)は読めない

という、なんとも「宝の持ち腐れ」な状態に着地しました。

「はじめからNetBSDでファイルサーバーを組んで、NetBSD標準のファイルシステムでフォーマットされたHDDなら問題ない」
それはその通りです。しかし、既存のLinux資産をそのまま生かそうとした私の目論見は、FUSEの互換性の壁に阻まれました。

今回の失敗で学んだのは、NetBSDは「他のOSの真似事」をする場所ではなく、「NetBSDの流儀」で一から構築を楽しむ場所だということです。 このSambaサーバーにはまだ空っぽのフォルダしかありませんが、いつかここに、NetBSDのためだけの新しいHDDを繋ぐ日が来るかもしれません。

この小さな草原の家(NetBSD)をどう育てていくか、もう少し悩みながら楽しみたいと思います。

 

本日も最後までお読みいただきありがとうございました。

それでは、よいNetBSDライフを!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール