NanoPi M4V2に外付けHDDを繋ぐ(AutoFSを使う)

Posted by 雅楽斎 on Thursday, March 26, 2020

TOC

AutoFS

外付けHDDを使う場合に、普通にHDDとしてマウントするのもいいのですが、万一切断されても縮退構成として運用を続けられるようにAutoFSを使って接続します。AutoFSは読み書きが一定時間ないと自動的に切断するマウント方法です。

本稿では、未フォーマットなHDDを繋いでbtrfsでフォーマット、AutoFSでマウントする手順で記載します。1OSはArmbian Bionic serverです。

HDD準備

HDD接続

NanoPi M4V2のUSBポートに接続します。接続後にどのデバイスファイルが使われるか確認するため、dmesgコマンドを実行して確認します。

[ 1416.548666] usb 7-1.2: new high-speed USB device number 3 using xhci-hcd
[ 1416.569605] usb 7-1.2: New USB device found, idVendor=152d, idProduct=2339, bcdDevice= 1.00
[ 1416.569619] usb 7-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[ 1416.569629] usb 7-1.2: Product: USB to ATA/ATAPI Bridge
[ 1416.569639] usb 7-1.2: Manufacturer: JMicron
[ 1416.569649] usb 7-1.2: SerialNumber: DA50176188FF
[ 1416.571336] usb-storage 7-1.2:1.0: USB Mass Storage device detected
[ 1416.573339] scsi host0: usb-storage 7-1.2:1.0
[ 1416.591530] usbcore: registered new interface driver uas
[ 1417.663548] scsi 0:0:0:0: Direct-Access     WDC WD10 EADS-00M2B0           PQ: 0 ANSI: 2 CCS
[ 1417.664617] sd 0:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
[ 1417.665289] sd 0:0:0:0: [sda] Write Protect is off
[ 1417.665305] sd 0:0:0:0: [sda] Mode Sense: 3c 00 00 00
[ 1417.665812] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 1417.677026] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 1425.811503]  sda: sda1
[ 1425.813425] sd 0:0:0:0: [sda] Attached SCSI disk

今回は/dev/sdaが使われます。

パーティション切り

fdiskコマンドでパーティションを切ります。cfdisk /dev/sdaの方がわかりやすいかもしれません。

# fdisk /dev/sda

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): p
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x61661c6d

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-1953525167, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default 1953525167): 


Created a new partition 1 of type 'Linux' and of size 931.5 GiB.
Command (m for help): p

Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x61661c6d

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931.5G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

btrfsフォーマット

fdiskコマンドで作成した/dev/sda1パーティションをbtrfsでフォーマットします。

# mkfs.btrfs /dev/sda1
btrfs-progs v4.15.1
See http://btrfs.wiki.kernel.org for more information.

Label:              (null)
UUID:               3efe13e5-c7e5-4b6b-ac49-a3e539026d36
Node size:          16384
Sector size:        4096
Filesystem size:    931.51GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         DUP               1.00GiB
  System:           DUP               8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1   931.51GiB  /dev/sda1

ここで得られたUUIDである3efe13e5-c7e5-4b6b-ac49-a3e539026d36を使うと他のパーティションと間違えて操作する不安がなくなるので、以降の手順ではUUIDを指定します。

また、デバイスファイル→UUIDの確認はblkidコマンド、UUID→デバイスファイルの確認はlsで確認できます

$ blkid /dev/sda1
/dev/sda1: UUID="3efe13e5-c7e5-4b6b-ac49-a3e539026d36" UUID_SUB="6646f669-4e18-4534-81c3-c5900034788d" TYPE="btrfs" PARTUUID="61661c6d-01"
$ ls -l /dev/disk/by-uuid/3efe13e5-c7e5-4b6b-ac49-a3e539026d36
lrwxrwxrwx 1 root root 10  3月 26 11:49 /dev/disk/by-uuid/3efe13e5-c7e5-4b6b-ac49-a3e539026d36 -> ../../sda1

AutoFS設定

パッケージのインストール

# apt-get install autofs

設定ファイルの記述

AutoFSの全体の設定は/etc/autofs.confにあり、どこに設定を書けば良さそうかというと

master_map_name = /etc/auto.master

なので、/etc/auto.masterを見てみると

+dir:/etc/auto.master.d
+auto.master

となっていて、/etc/auto.master.dの下に設定ファイル(拡張子.autofs)を作ると後々管理が楽そうなので、/etc/auto.master.dディレクトリを作成して、

# mkdir /etc/auto.master.d

/etc/auto.master.d/usbhdd1.autofsを作成します。

/- /etc/auto.usbhdd1

ここで指定した/etc/auto.usbhdd1を作成します。

/autofs/usbhdd1 -fstype=btrfs,rw :/dev/disk/by-uuid/3efe13e5-c7e5-4b6b-ac49-a3e539026d36

ここで記述したマウントポイントを作ります。

# mkdir -p /autofs/usbhdd1

設定ファイルの反映確認

上で指定した設定値が反映されているか確認します。

# automount -m

autofs dump map information
===========================

global options: none configured

Mount point: /-

source(s):

  instance type(s): file 
  map: /etc/auto.usbhdd1

  /autofs/usbhdd1 | -fstype=btrfs,rw :/dev/disk/by-uuid/3efe13e5-c7e5-4b6b-ac49-a3e539026d36

反映されてそうなので、serviceを再起動してステータスを確認します。

# systemctl restart autofs.service
# systemctl status autofs.service
● autofs.service - Automounts filesystems on demand
   Loaded: loaded (/lib/systemd/system/autofs.service; enabled; vendor preset: e
   Active: active (running) since Thu 2020-03-26 00:58:24 JST; 6s ago
  Process: 5162 ExecStart=/usr/sbin/automount $OPTIONS --pid-file /var/run/autof
 Main PID: 5163 (automount)
    Tasks: 4 (limit: 4611)
   CGroup: /system.slice/autofs.service
           └─5163 /usr/sbin/automount --pid-file /var/run/autofs.pid

 3月 26 00:58:24 nanopim4v2 systemd[1]: Starting Automounts filesystems on deman
 3月 26 00:58:24 nanopim4v2 systemd[1]: Started Automounts filesystems on demand

マウントされているかどうか確認します。

$ mount | egrep "(autofs|usbhdd)"
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=36,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
/etc/auto.usbhdd1 on /autofs/usbhdd1 type autofs (rw,relatime,fd=6,pgrp=5163,timeout=300,minproto=5,maxproto=5,direct)

autofsとしてはマウントされていますが、実際のファイルシステムはマウントされていなので、lsでマウントされているはずの/autofs/usbhdd1を見てみます。

$ ls /autofs/usbhdd1/
$ mount | egrep "(autofs|usbhdd)"
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=36,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
/etc/auto.usbhdd1 on /autofs/usbhdd1 type autofs (rw,relatime,fd=6,pgrp=5163,timeout=300,minproto=5,maxproto=5,direct)
/dev/sda1 on /autofs/usbhdd1 type btrfs (rw,relatime,space_cache,subvolid=5,subvol=/)

実際にアクセスすることでbtrfsとしてマウントされることを確認できました。

スポンサーリンク


  1. 実際にはRaspberry Pi3Bでパーティションを切って使っていたHDDを繋いでいるので多少違いはあるかもしれません [return]

comments powered by Disqus