created: 2022-09-19T04:57:14.591Z

RaspberryPI にて fstab によってマウントの設定をする

前回までのあらすじ。

RaspberryPI が落ちていたので再起動をした。

落ちる前に外付け HDD について fstab の設定をしていなかった。再起動後に再度マウントする必要があることは知っていたので、再度マウントをしようとして以下のコマンドを叩いたのだがエラーが返ってきた。

$ sudo mount /dev/sda1 /mnt/usbdisk
Mount is denied because the NTFS volume is already exclusively opened.
The volume may be already mounted, or another software may use it which
could be identified for example by the help of the 'fuser' command.

df で確認したところ、勝手に(前回とは違うパスに)マウントされているようだった。

$ df -k | grep /dev/sd
/dev/sdb2      488018940 1197716 486821224   1% /media/pi/hdd500GB
/dev/sda1       61587436 2117332  59470104   4% /media/pi/usbdisk

ただ、パーティションの設定は前回に切った通り ntfs になっている。

2 211MB 500GB 500GB ntfs HD-PNTU3 msftdata

$ sudo parted -l
Model: SanDisk' Cruzer Fit (scsi)
Disk /dev/sda: 63.1GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      16.4kB  63.1GB  63.1GB  primary  ntfs         lba


Model: BUFFALO HD-PNTU3 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name                  Flags
 1      20.5kB  210MB  210MB  ext4         EFI System Partition  boot, esp
 2      211MB   500GB  500GB  ntfs         HD-PNTU3              msftdata

つまり

fstab の設定をしなかったために(おそらくデフォルトの設定に従って)マウントがされてしまったということのようだ。

とりあえずの対抗としてはアンマウントしてマウントし直せばよさそうで、動作が確認できたら今回はちゃんと fstab の設定もしたほうがいいだろう。(月 1 回くらいで落ちるのなら絶対設定したほうがいい)

とりあえずの対応

まずはマウントをしなおしてアプリが従前の通り動作するのを確認する。

$ sudo umount /dev/sda1
$ sudo mount /dev/sda1 /mnt/usbdisk
$ sudo umount /dev/sdb2
$ sudo mount /dev/sdb2 /mnt/hdd500GB

EPGStation

問題なし

$ open http://raspberrypi.local:8888/#/

minidlna

問題なし

# IPアドレスで叩かないと404になるので
$ curl -I http://192.168.86.37:8200/
HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Content-Length: 698
Server: Raspbian DLNADOC/1.50 UPnP/1.0 MiniDLNA/1.3.0
Date: Mon, 19 Sep 2022 04:53:25 GMT
EXT:

fstab の設定

UUID で指定したほうが固いそうなのでそうする。

$ sudo blkid /dev/sda1
/dev/sda1: LABEL="usbdisk" BLOCK_SIZE="512" UUID="xxxx5FF0CAC120B00123" TYPE="ntfs"
$ sudo blkid /dev/sdb2
/dev/sdb2: LABEL="hdd500GB" BLOCK_SIZE="512" UUID="xxxx44E0BDAA34D80123" TYPE="ntfs" PARTLABEL="HD-PNTU3" PARTUUID="6862845e-0e27-4df2-a070-7125b40a5b7a"

以下を fstab に追記する。

UUID="xxxx5FF0CAC120B00123" /mnt/usbdisk ntfs defaults 0 0
UUID="xxxx44E0BDAA34D80123" /mnt/hdd500GB ntfs defaults 0 0
echo 'UUID="xxxx5FF0CAC120B00123" /mnt/usbdisk ntfs defaults 0 0' | sudo tee -a /etc/fstab
echo 'UUID="xxxx44E0BDAA34D80123" /mnt/hdd500GB ntfs defaults 0 0' | sudo tee -a /etc/fstab

defaults?

「アクセス日時」という変数をどう更新するかについての設定のようだ。

relatime は、前回のアクセス日時が現在の変更日時よりも古い場合にのみ、アクセス日時を更新します。加えて、Linux 2.6.30 以降、前回のアクセス日時が 24 時間より古い場合は、アクセス日時は常に更新されます。defaults オプション (カーネルのデフォルト、つまり relatime を使うことを意味します。mount(8) と wikipedia:Stat (system call)#Criticism of atime を参照) や atime オプションが指定された場合、または何のオプションも指定されなかった場合、このオプションが使用されます。

0 0?

それぞれ dump pass という設定項目。

<dump> は dump(8) ユーティリティによってチェックされます。このフィールドは通常 0 にセットします。0 はチェックを無効化します。

バックアップをするのに dump コマンドを使うことはなさそうなので 0 でよい。

<fsck> は、起動時にチェックするファイルシステムの順番を設定します。fsck(8) を見てください。ルートファイルシステムには 1 を設定するべきです。他のパーティションには 2 を設定するか、チェックを無効化する 0 を設定するべきです。

外付け HDD なのでシステム的なチェックは不要に思えるため 0 にする。

再起動

fstab の設定ができたら再起動。

$ sudo reboot
Connection to raspberrypi.local closed by remote host.
Connection to raspberrypi.local closed.

参考