|||||||||||||||||||||

なんぶ電子

- 更新: 

Debian13で、USBディスクを自動マウント、自動解除

Debian

Debian13で、外付けUSBディスクを管理する際に自動マウントや、自動停止をしたい時の設定の覚書です。

USBディスクのフォーマット

今回はWindowsと共用したいので、USBディスクのフォーマットはntfsにしたいと思います。

まず、Debian13では標準でntfsフォーマットができないので、ntfs-3g パッケージを使います。

# apt install ntfs-3g

次にUSBを接続し、対象となるデバイス名を確認します。lsblkコマンドの o オプションで次のように表示項目を絞ると分かりやすいと思います。

# lsblk -o NAME,MODEL,SERIAL,VENDOR,TRAN
NAME   MODEL                      SERIAL          VENDOR   TRAN
sda    ST500DM002-1BD142          xxxxxx          ATA      sata
sdb    ST2000VM006-3GW102         xxxxxx          BUFFALO  usb
sdc    Multi-Card                 xxxxxx          Generic- usb
sr0    TSSTcorp DVD+/-RW SH-216DB xxxxxx          TSSTcorp sata

lsblkコマンドはブロックデバイスをリストするものです。ブロックデバイスとは、データを一定サイズ(512byte)等で読み書きできるデバイスの事を指し、ディスクはほぼすべてこれにあたります。

ちなみに、対になる概念としてはキャラクタデバイスという言葉があり、こちらはデータを1バイト単位でシリアルに読み書きするデバイスを指します。こちらの例はシリアルポートの他、マウス、サウンド等も含まれます。

他には、udevadm((user space device administration)コマンド でデバイスを指定して info オプションを使う方法もあります。

# udevadm info --query=all --name=/dev/sdb

パーテーションを作ります。先ほどの出力でデバイスはsdbであると決定された前提で話を進めます。Debian13では標準でインストールされている fdisk でもGPTテーブルが作成可能です。他のパーテーション作成ツールは parted や gdiskを使います。gdiskはGPT版のfdiskにあたるもので、GPTテーブルの修正にも強いです。

fdiskでGPTテーブルを作成する際は、初回のコマンドで gを入力します。するとGPTパーテーションテーブルが作られます。

fdisk /dev/sdb
Command (m for help): g
Created a new GPT disklabel (GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
Command (m for help): n
Partition number (1-128, default 1): 
...
Command (m for help): t (Windowsで扱いたいので、11を指定してMicrosoft basic dataに)
Command (m for help): p(確認)
Command (m for help): w(書込)

筆者の環境では、fdiskで作成したパーテーションだとWindowsから認識できずに

パーテーション内をntfsでフォーマットします。ntfs-3gをインストールすると、mkfs.ntfs コマンドが利用可能になります。 -f(--fast)オプションはクイックフォーマットです。

# mkfs.ntfs -f /dev/sdb1

ちなみに、fdiskは今でも標準でインストールされていて今回のような用途では有効ですが、MBRでなくGPTディスクがメインになる近頃は代替のgdiskを使います。

自動マウントの設定

/etc/fstabに記述を追加して自動マウントするようにします。

今回はバックアップ用のディスクで使用するタイミングが限られることから、利用時にマウントされるようにします。

マウント用にUUIDを確認します。

# blkid /dev/sdb1
/dev/sdb1: BLOCK_SIZE="512" UUID="xxxxx" TYPE="ntfs" PARTUUID="yyyyy"

UUIDはファイルシステムを変更(フォーマット)すると変更されますが、PARTUUIDは変更されません。fstabにはどちらでも指定が可能となっています。

/etc/fstab

UUID=xxxxx /mnt/usb ntfs-3g defaults,nofail,hide_hid_files,noauto,x-systemd.automount 0 0

書式は、つぎのようになっています。

[UUID(PARTUUID)] [マウントポイント] [タイプ] [オプション] [dump] [pass]

UUID指定時なら、UUID=、PARTUUID指定時なら PARTUUID=から書き始めます。

dumpはほぼ使われないので0を指定しておけばいいです。

passは fsckがファイルすシステムをチェックする順序を指定します。0はチェックしません。ルートだと1、それ以外は2を指定します。

オプション値の概略は次の通りです。

  • defaults

    rw(読み書き可),suid(SUID 有効),dev(デバイスファイル有効),exec(バイナリ実行可),auto(通常は自動マウント対象),nouser(一般ユーザーは mount/umount 不可、root のみ可),async(非同期書き込み)

  • noauto

    ブート時に自動マウントしないオプションで、defaultsに含まれる autoを打ち消します。こうすることで x-systemd.automountのアクセス時のマウントを有効しんします。

  • hide_hid_files

    隠しファイルを表示しない指定です。Windowsに接続するとSystem Volume Information や $RECYCLE.BIN が書き込まれるためそれを非表示にする設定です。それらのファイルは消しても問題ないのですが、接続のたびに復活するので非表示にしておきます。

  • nofail

    バイスが存在しない場合でも 起動エラーにせず、システムのブートを継続させます。USBが取り外されていることもあるという想定上のオプションです。

自動アンマウント

筆者の環境では、一日に一回バックアップをUSBディスクへ書き出す設計としています。なので、使わない時はアンマウントしておきたいです。今度はその設定をします。

fstabのoptionを追加するだけで実現できます。

x-systemd.idle-timeout=300

先の例だと300秒アイドルが続いた際にアンマウントされます。

本当はこれだけなのですが、先ほどのx-systemd.automountも含め背後ではどのような動きをしているか知るのに役立つとおもいますので、systemd系からの設定方法を書き残します。

fstabの設定で、x-systemd.automountを設定したことで、mnt-[マウントポイント名].mount と mnt-[マウントポイント名].automount のユニットができます。

このユニットが実質のマウントを管理していて、マウントポイントが /mnt/usb だったら、ユニット名はそれぞれ mnt-usb.automount、mnt-usb.mount となります。

自動アマウント時の設定をしたいので今編集の対象は mnt-usb.automount となります。

.automountや.mountはマウントはユニットです。このようなユニットの仲間には .serviceユニットや複数のユニットがまとめられた .target がよく見られますが、他にはソケットアクセスに対して反応する .socket ユニットや、ファイル監視用の .path などもあります。

mnt-[マウントポイント名].automount は自動で作られるユニットの為、直接編集しても上書きされてしまうことがあります。

そのため、systemctl edit mnt-[マウントポイント名].automount とします。ここから編集することで、通常の設定に差し込みを行うことができます。

systemctl edit

### Editing /etc/systemd/system/mnt-usb.automount.d/override.conf
### Anything between here and the comment below will become the new contents of the file
# 表記されているように間に追加分の設定を書き込みます

[Automount]
TimeoutIdleSec=300s

### Lines below this comment will be discarded
# これ以下には自動生成されたユニットの仕様が書かれています

設定後 systemctl daemon-reload の後マウントし直すか、システムを再起動します。

ちゃんとアンマウントが実行されているかは、サービスの時と同様に journalctlから確認ができます。

ただ、-uオプションに指定するユニット名は .automountではなくて、.mountの方を指定しないとアンマウント時のログは出てこないようです。

#journalctl -u mnt-usb.mount
systemd[1]: Mounted mnt-usb.mount - /mnt/usb.
Unmounting mnt-usb.mount - /mnt/usb
...
Unmounting /dev/sdb1 
mnt-usb.mount: Deactivated successfully.
Unmounted mnt-usb.mount - /mnt/usb.

systemctl editは元のサービスファイルを編集しないため、破棄したい時は単純に削除するだけで元に戻せます。

editで記述際の編集データは、/etc/systemd/system/mnt-[マウントポイント名].d/override.confに入っっています(編集時にも所在がコメントで表示されています)。ですのでこれを消します。

# rm /etc/systemd/system/mnt-usb.mount.d/override.conf
# systemctl daemol-reload

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告