2024年7月で OS (Buster) の更新が終わっていたので、NAS を作り直しました。
- 個人で使用するので普段使いのアカウントを流用
- Mac と Windows からアクセス
- NTFS だけど ACL は使用しない
類似記事多数で、自分のが最高だというつもりはありません。備忘録を兼ねています。
Raspberry Pi Imager
Headless で運用するので Raspberry Pi OS Lite (64-bit) を選択。
authorized_keys のところは、ssh-keygen で作成した .ssh/id_ed25519.pub の中身を書く (欄が小さいけどパスではなく中身を書く)。
外付け HDD のマウント
ssh で接続し、何はともあれ sudo apt update
& sudo apt full-upgrade
ls -l /dev/disk/by-uuid/
の結果から、sda1 は 8E62C9DD62C9C9E3
id -u
id -g
はともに 1000。
これらの情報をもとに fstab に記述を追加するのだけど、NTFS のせいでマウント オプションまわりが難しい。以下を参考にした。
man ntfs-3g
man mount
も参考になった。
UUID=8E62C9DD62C9C9E3 /mnt/usbhdd ntfs-3g defaults,uid=1000,gid=1000,fmask=133,dmask=022,windows_names
とした。この fmask、dmask により普通のパーミッションに見える。windows_names は Widnows で使えない名前のものが作成されないようにしてくれる。
$ sudo systemctl daemon-reload # fstab の変更を読み込み
$ sudo mkdir /mnt/usbhdd
$ sudo mount -a
でマウントできることを確認。
samba のインストール
$ sudo apt install samba
以前は avahi-daemon をインストールしたり samba 用の設定を記述したり大変だった記憶があるが、今はもともとインストールされているし samba が設定してくれる。
smb.conf の編集
vi は上下キーが使えないし地味。nano のほうがカラフル。
/etc/samba/smb.conf の以下の箇所の行頭に ; を追加して、map to guest のデフォルトである never にする。
map to guest = bad user
[global] セクションの最後に vfs objects = fruit
を追加する。[global] に追加せず他のセクションで使うと testparm -s
で警告が出る。
[homes] の設定によりホーム ディレクトリーが共有される。使う予定はないけれど一応残す。
最後に以下を追加する。
[usbhdd]
path = /mnt/usbhdd
browseable = yes
read only = no
guest ok = no
valid users = hanotch
vfs objects = fruit streams_xattr
fruit:aapl = yes
fruit:time machine = yes
変更したら testparm -s
で確認し、sudo service smbd restart
。
vfs objects = streams_xattr
をつけないと NTFS の streams を記録できず、昔は Edge からダウンロードして保存できなかったらしい。
vfs objects の説明は man を参考にする。
Samba ユーザーの設定
$ sudo smbpasswd -a "$USER"
Mac からの接続
Finder の 移動 > サーバへ接続 で smb://hanotch@raspberrypi.local に接続できることを確認
システム設定 > 一般 > Time Machine で バックアップディスクを追加 から usbhdd を選択して ディスクを設定
HDD のスピンダウンの設定
hdparm や sdparm で済む場合が多いようなのだけど、うちの HDD は hdparm -y
は効くのに hdparm -S
は効かない。
そこで hd-idle をインストールして設定する。
$ sudo apt install hd-idle
$ sudo echo 'HD_IDLE_OPTS="-i 30 -a sda1 -l /var/log/hd-idle.log"' >> /etc/default/hd-idle
$ sudo service hd-idle restart