90年代後半から2000年代ごろのアプリケーションの中には、その起動に際し、CD-ROMの挿入を求められるものがある。Microsoft Bookshelfのような辞書、百科事典は、そのようなアプリケーションの典型例だ。
現在ならば、CD-ROMをISOファイル化し、マウントして対応することだろう。PC起動時に、目的のISOファイルを自動マウントするのだ。よりこだわるなら、遅延マウントでもよいだろう。あらかじめ定義しておいたISOマウント設定を、マウントが必要になった時点で呼び出し、自動的にマウントするのだ。
いずれにせよfstab、あるいはsystemdを活用することになる。このタイミングで、それぞれ、おさらいしておくことにした。
比較:fstab、systemdのマウント
最初に、fstabを用いる場合、systemdを用いる場合の違いについて触れておく。
起動時の自動マウント | 遅延マウント | 実行タイミング | |
---|---|---|---|
fstab | 対応 | 不可 | 起動時のみ |
systemd | 対応 | 対応 | 調整可能 |
PCにログインすれば、必要なデバイスがマウントされている、そのような状態を端的に実現したいのであれば、fstabを用いればよい。ファイルの記述も簡単だし、何より余計なことを考えずに済む。
デバイスを参照する必要のあるタイミングで、自動的にマウントされる状態、いわゆる遅延マウントを実現したいのであれば、systemdで対応する必要がある。
あるいは、マウントポイントとなるディレクトリを、マウントのタイミングで自動生成する必要があるならば、systemdで対応する必要がある。もし存在しないディレクトリをマウントポイントとして指定した場合、fstabではマウントに失敗する。
fstab
/etc/fstab
fstabは、マウントするファイル・システムの情報を定義するファイルだ。PC起動時、デバイスはこの定義に従ってマウントされる。ただしClear Linuxのように、fstabを参照しない場合もある。*1
Clear Linuxのstateless OS architectureの前提では、fstabを必要としていないのだ。ただし、fstabを参照しないからと言って、ユーザーがfstabを作ることを禁じているわけではない。必要があれば、作成すればよい。作成したからと言って、statelessの前提を損なうわけでもない。
fstab中の1行に、次の情報を空白(半角スペース、あるいはTAB)区切りで記述する。
デバイス名 | 絶対パスで記述 ISOファイルの場合、ファイル名までの絶対パス |
マウントポイント | 絶対パスで記述 既存のディレクトリを指定 |
ファイル・システム | ISOファイルの場合→iso9660 |
オプション | mountコマンドのオプション |
dump可否 | 0: 不可 1: dump可能 |
起動時のfsck要否 | 0: 不要 1: rootファイルシステムのみ実施 2:rootファイルシステム以外で実施 |
存在しないパスをマウントポイントに指定すると、マウントに失敗する。パスに該当するディレクトリが自動的に生成されることはない。
オプション
特にISOファイルのマウントに関連するオプションに限定すると、
auto noauto |
自動マウント 手動マウント |
defaults | "auto,exec,nouser,rw,suid"と同義 |
dev nodev |
デバイス・ファイルのマウントを可否 |
exec noexec |
実行ファイルの実行可否 |
ro |
読み取り専用、読み書き可能 |
user nouser |
ユーザー・アカウントでマウント可能 rootアカウントのみマウント可能 |
suid | SetUID、SetGIDを許可 |
オプションに"noauto"を指定すると、起動時にマウントされない。任意のタイミングで手動マウントする必要があるのだが、fstabに記載したデバイスをマウントする際、コマンド入力を簡略化できる。*2
起動時にマウントされずとも、必要な瞬間に自動的にマウントされるよう、遅延マウントとして定義するならば、systemdに頼ることになる。
systemd.mount, automount
systemdにデバイスをマウントさせるために、2つのユニット・ファイルを作成する。mountファイルと、automountファイルだ。
PCの起動時にデバイスをマウントさせるだけならば、mountファイルを作成するだけで済む。これはfstabを作成するのと、本質的に変わりがない。特徴的な違いを挙げるとすれば、どのサービスの後に実行するなど、実行タイミングの調整が可能なことだ。
さらに、遅延マウントを実現したい場合に、automountファイルも作成する。
ユニット・ファイルは、次のディレクトリに格納する。ユニット・ファイルの格納場所についての詳細を確認する必要があれば、投稿末尾に掲載している参照先を訪問してほしい。
/etc/systemd/system/
ここでは、次の前提でマウント・ファイルを作成することにする。ちなみに、ここで指定しているISOファイルは、Microsoft BookshelfというWindowsアプリケーションのインストール・メディアだ。
デバイス | /home/▯▯▯▯/sdcard/software/Microsoft Bookshelf Basic/BSBASIC2.ISO |
マウントポイント | /run/media/▯▯▯▯/BSBASIC2 |
オプション | 遅延マウント 読み取り専用 suid許可 ユーザーによるマウント可 |
まずmountファイルのファイル名は、マウントポイントのパスと同名にする必要がある。ディレクトリの区切りは"-"を用いる。今回の場合、ファイル名は次のようになる。
run-media-▯▯▯▯-BSBASIC2.mount
このmountファイルの内容は次のようになる。UnitセクションのDescriptionには、任意の情報を定義する。
[Unit] Description=Microsoft Bookshelf [Mount] What=/home/▯▯▯▯/sdcard/software/Microsoft Bookshelf Basic/BSBASIC2.ISO Where=/run/media/▯▯▯▯/BSBASIC2 Type=iso9660 Options=noauto,ro,suid,user
今回は遅延マウントを前提としているため、Optionsへnoautoを指定した。PC起動時にマウントを済ませておくならば、代わってautoを設定する。
遅延マウントを前提としているため、mountファイルに対応するautomountファイルを用意する。ファイル名は、mountファイルと同名にする必要がある。つまり、
run-media-▯▯▯▯-BSBASIC2.automount
その内容は次のようになる。mountファイル同様、UnitセクションのDescriptionには、任意の情報を定義する。
[Unit] Description=Microsoft Bookshelf [Automount] Where=/run/media/▯▯▯▯/BSBASIC2 [Install] WantedBy=multi-user.target
以上の準備が整ったら、systemdへ登録し、設定を有効にする。次のコマンドを実行する。
systemctl daemon-reload
systemctl enable --now run-media-▯▯▯▯-BSBASIC2.automount
この状態では、まだBSBASIC2.ISOはマウントされていない。このISOファイルを参照する必要性が生じれば、自動的にマウントされる。例えば、次のコマンドを実行する。
ls -la /run/media/▯▯▯▯/BSBASIC2
左の画像がコマンド実行前の状態を示している。コマンド実行後、右の画像が示すように、BSBASIC2がマウントされているのが分かる。コマンドの実行結果も、マウント後の状態を反映した情報が出力される。