🐧 Linux 総合学習プラットフォーム
ストレージ/ファイルシステム ・ 中級

マウントとアンマウント

Linuxではファイルシステムを使う前に、ディレクトリツリーのどこかに接続する「マウント」が必要です。接続先のディレクトリを「マウントポイント」と呼び、mount /dev/sda1 /mnt のように指定します。引数なしの mount や findmnt で現在の接続状況を確認できます。取り外す前には umount でアンマウントしてバッファを書き込み切る必要があり、使用中だと外せないため lsof などで利用プロセスを確認します。

ファイルシステムを作っただけでは、まだその中身に普段のようにアクセスすることはできません。Windowsのように「Dドライブ」といったドライブレターでディスクが独立して見える仕組みとは違い、Linuxではすべてのファイルが / を頂点とするただ1本のディレクトリツリーに統合されています。新しく用意したファイルシステムを使うには、この1本のツリーのどこかに枝として接ぎ木する操作が必要で、これをマウントと呼びます。接ぎ木する先のディレクトリのことをマウントポイントといい、マウントするとそのファイルシステムの中身が、指定したマウントポイント以下に見えるようになります。Linuxにドライブレターという概念がなく、すべてが1つのツリーに収まるのは、この「マウントしてツリーに繋ぐ」という考え方があるからです。

mount でツリーに接続する

マウントを行うのが mount コマンドです。書式は mount デバイス マウントポイント で、たとえば mount /dev/sda1 /mnt とすると、/dev/sda1 のファイルシステムが /mnt ディレクトリ以下に接続され、以後 /mnt の中を見ればそのファイルシステムの中身が見えるようになります。マウントポイントには通常、あらかじめ用意した空のディレクトリを使い、無ければ mkdir /mnt/data のように先に作っておきます。一時的な作業には /mnt がよく使われ、USBメモリなどのリムーバブルメディアには /media 以下が慣例です。ファイルシステムの種類は mount が自動判別してくれることがほとんどですが、明示したいときは mount -t ext4 /dev/sda1 /mnt のように -t で指定します。デバイス名の代わりに、blkid で調べた UUID を使って mount UUID=xxxx-xxxx /mnt のように指定することもでき、こちらのほうが取り違えが起きにくく安全です。

注意したいのは、すでに何かファイルが入っているディレクトリをマウントポイントにすると、マウントしている間は元の中身が見えなくなる(隠される)という挙動です。元のファイルが消えるわけではなく、アンマウントすればまた現れますが、混乱のもとなので、マウントポイントには空のディレクトリを使うのが安全です。

マウントオプションで挙動を変える

mount には -o に続けてマウントオプションを指定でき、ファイルシステムの扱われ方を細かく制御できます。よく使うのは、書き込みを禁止して読み取り専用にする ro(逆に読み書き可は rw)、実行ファイルの実行を禁じる noexec、そのファイルシステム上のファイルへのアクセス時刻の記録を省いて性能を上げる noatime などです。たとえば mount -o ro /dev/sda1 /mnt とすると、誤って書き換える心配なく中身を確認できます。複数指定するときは mount -o ro,noexec /dev/sda1 /mnt のようにカンマで区切ります。これらのオプションは、次のトピックで扱う /etc/fstab の第4フィールドにそのまま書く値でもあるので、ここで意味を押さえておくと後がスムーズです。

現在の状態を確認する

いまどのファイルシステムがどこにマウントされているかは、引数なしの mount を実行すると一覧で確認できます。ただし出力が多く読みにくいため、より見やすい findmnt コマンドがおすすめです。findmnt はマウントの状態をツリー形式で整然と表示してくれ、findmnt /mnt のように対象を指定して個別に確認することもできます。また、これまで使ってきた lsblk も、各ブロックデバイスのMOUNTPOINT列でマウント先を示してくれるので、「このパーティションはどこに繋がっているか」を確認するのに役立ちます。マウントポイントの空き容量を知りたいときは、後のトピックで扱う df コマンドが使えます。

umount で安全に取り外す

マウントしたファイルシステムを切り離すにはアンマウントを行い、コマンドは umount です(unmount ではなく n が1つ少ない綴りに注意してください)。umount /mnt のようにマウントポイントを指定するか、umount /dev/sda1 のようにデバイス名を指定します。アンマウントが重要なのは、Linuxが書き込みの効率を上げるために、データを一度メモリ上のバッファに溜めてからまとめてディスクへ書く仕組みを持っているからです。umount はこの溜まった未書き込みのデータをすべてディスクへ書き切って(フラッシュして)から接続を解除します。この手順を踏まずにUSBメモリをいきなり引き抜くと、バッファ内のデータが書かれないまま失われ、ファイルが壊れる原因になります。リムーバブルメディアを抜く前には必ず umount する、というのは安全運用の基本です。

「使用中で外せない」ときの対処

アンマウントしようとすると「target is busy(デバイスがビジー状態です)」というエラーで失敗することがあります。これは、そのファイルシステムの中のファイルを開いているプロセスがあったり、そのディレクトリをカレントディレクトリにしているシェルがあったりするためです。よくある原因は、自分自身が cd でマウントポイントの中に入ったままアンマウントしようとしているケースで、この場合は cd / などで外へ出てから umount し直せば解決します。誰がそのファイルシステムを使っているのかを突き止めるには lsof +D /mnt(指定ディレクトリ以下で開かれているファイルを一覧する)や fuser -m /mnt といったコマンドが役立ちます。原因のプロセスを終了させてから、改めてアンマウントしてください。どうしても外せず、かつ安全が確認できる場合に限り、遅延アンマウントの umount -l という手段もありますが、これは中途半端な状態を生むこともあるため、まずは使用中のプロセスを正しく止めるのが本筋です。なお、mount コマンドでの接続はあくまで一時的なもので、システムを再起動すると消えてしまいます。起動のたびに自動で繋ぎたい場合は、次のトピックで扱う /etc/fstab を使います。

この項目に出てくる用語

マウントポイントまうんとぽいんと
ファイルシステムをディレクトリツリーに接続する先のディレクトリ。/mnt や /home などがその例。
ファイルシステムふぁいるしすてむ
ディスク上にファイルやディレクトリを整理して記録する仕組み。ext4・xfs などの種類があり、mkfs で作成する。
ブロックデバイスぶろっくでばいす
データを一定サイズの「ブロック」単位で読み書きする記憶装置。ディスクやSSD、USBメモリが該当し、/dev/sda などの名前で扱う。

関連コマンド

mountumountlsblkblkid

▶ 学習アプリでこの続きを学ぶ・演習する