Linux端末からストレージデバイスをマウントおよびアンマウントする方法

  • LinuxおよびUnix系オペレーティングシステムのファイルシステムは、端末を使用してマウント、アンマウント、および再マウントできます。
  • Linuxのファイルシステムは、マウントされたストレージデバイスがファイルシステムの不可欠な部分として表示される、オールインワンのディレクトリツリーです。
  • mountコマンドとumountコマンドを使用すると、ユーザーはシステムへの接続を制御し、マウントポイントや読み取り/書き込み権限など、ファイルシステムに関する決定を下すことができます。

LinuxやmacOSなどのUnix系オペレーティングシステムのファイルシステムは、端末を使用してマウント、アンマウント、および再マウントできます。これは強力で多用途のツールです。知っておくべきことはすべてここにあります。

Linuxファイルシステム

Linux、macOS、およびその他のUnix系オペレーティングシステムのファイルシステムでは、Windowsのように、ストレージデバイスに個別のボリューム識別子は使用されません。Windowsでは、各ボリュームにC:またはD:などのドライブ文字が割り当てられ、各ボリュームのファイルシステムはそのドライブ文字の下にあるディレクトリのツリーです。

Linuxでは、ファイルシステムはオールインワンのディレクトリツリーです。マウントされたストレージデバイスのファイルシステムは、そのツリーに接合され、1つのまとまりのあるファイルシステムの不可欠な部分であるかのように表示されます。新しくマウントされたファイルシステムには、マウントされたディレクトリからアクセスできます。そのディレクトリをそのファイルシステムのマウントポイントといいます。

多くのファイルシステムは、起動時に自動マウントされるか、実行中にコンピュータに接続されたストレージボリュームとしてその場でマウントされます。注意深いシステム管理者は、実行時の自動マウント機能をオフにして、システムへの接続を制御できます。

つまり、実行中に接続されたストレージデバイスは自動マウントされない可能性があり、手動でマウントする必要があります。ファイルシステムを手動でマウントすると、マウントポイントの場所やファイルシステムをリードオンリーにするか読み取り/書き込みにするかなど、そのファイルシステムに関する決定を下すことができます。

必要性からでも選択からでも、mountumountremountコマンドを使用すると、Linuxシステムのこの重要な側面を制御できます。

mountを使用してファイルシステムを照会する

Mountには多くのオプションがありますが、コンピュータ上のすべてのマウント済みファイルシステムを一覧表示するには、オプションはまったく必要ありません。mountと入力してEnterキーを押すだけです。

mountは、ターミナルウィンドウに接続されているすべてのファイルシステムを一覧表示します。

そのデータダンプを調べて目的のファイルを見つけるのは難しい場合があります。

mountに、目的のファイルシステムのみを一覧表示するように要求することで、出力を絞り込むことができます。-t(タイプ)オプションは、mountに報告するファイルシステムの種類を指示します。

mount -t tmpfs

mount -t ext4

たとえば、mounttmpfsファイルシステムのみを一覧表示するように要求しました。はるかに管理しやすい出力が得られます。

tmpfsファイルシステムは、通常のマウントされたファイルシステムのように見えますが、永続的なストレージデバイスではなく、揮発性メモリ(tmpは一時的な略)に実際に格納されます。

目的のファイルの種類のパラメータをtmpfsに置き換える必要があります。

ext4ファイルシステムを一覧表示するコマンドも発行しました。このテストコンピュータには単一のext4ファイルシステムがあり、デバイスsda(最初にマウントされたストレージデバイス、通常はメインのハードドライブ)にあり、ファイルシステムツリーのルートである/にマウントされています。

他のインジケーターの意味は次のとおりです。

  • rw:ファイルシステムは読み取りと書き込みが可能です。
  • relatime:カーネルは、ファイルのアクセスと変更のメタデータを記録するために最適化されたスキームを使用しています。
  • errors=remount -o:十分に深刻なエラーが検出された場合、ファイルシステムは診断できるように読み取り専用モードで再マウントされます。

dfを使用してファイルシステムを照会する

dfコマンドを使用して、どのファイルシステムがマウントされていて、マウントポイントがどこにあるかを表示することもできます。

パラメータなしで使用されるdfは、mountと同じ情報過多の問題を引き起こします。たとえば、Ubuntu Linuxでは、snapコマンドを使用してインストールされたすべてのアプリケーションに対してsquashfs疑似ファイルシステムが作成されます。それらすべてを見たい人はいますか?

dfにそれらを無視させる(または他のファイルシステムの種類を無視させる)には、-x(除外)オプションを使用します。

df -x squashfs

ファイルシステムの名前、容量、使用済みスペースと空きスペース、およびマウントポイントを簡単に確認できます。

fstabのすべてのファイルシステムを再マウントする

起動時にマウントされたすべてのファイルシステムには、/etc内にあるファイルシステムテーブルであるfstabというファイルのエントリがあります。

mountを使用して、fstabにリストされているすべてのファイルシステムを強制的に「更新」し、再マウントできます。通常の動作条件では、これは必要ありません。複数のファイルシステムに問題がある場合は、真価を発揮します。

sudoを使用する必要がありますが、パスワードの入力を求められます。

sudo mount -a

正しく動作しているコンピュータでは、少し物足りないことは認められます。

ただし、ファイルシステムに問題があるコンピュータでは、再マウントによって問題が解消される場合があります。それが起こらない場合は、少なくとも画面とシステムログに診断メッセージが表示され、問題の原因を突き止めることができます。

ISOイメージのマウント

ISOイメージをマウントして、ファイルシステムの一部としてその内容にアクセスするのは簡単です。

これはどのISOイメージでも機能します。この例では、ダウンロードが便利で高速なため、Tiny Core Linux ISOを使用しています。(GUIを備えた小さなLinuxディストリビューション、18 MB!おそらくそれよりも大きな.mp3ファイルを持っているでしょう。)

ISOイメージと同じディレクトリで、このコマンドを発行します。マウントするISOファイルの名前を置き換えます。

sudo mount -t iso9660 -o loop TinyCore-current.iso /mnt

sudoを使用する必要があるため、パスワードを入力する必要があります。

-t(タイプ)オプションは、mountにマウントするファイルシステムの種類を指示します。これはISOファイルなので、iso9660タイプ指定子を提供します。

-o(オプション)フラグは、mountに余分なパラメータを渡すために使用されます。パラメータはloopです。

loopを使用して、mountにループデバイスファイルを使用してISOイメージに接続するように強制しています。ループデバイスファイルを使用すると、ファイル(ISOイメージなど)をマウントし、ストレージデバイスであるかのように扱うことができます。

デバイスファイルは、接続されたデバイスが通常のファイルシステムファイルであるかのように見えるように、インターフェイスとして使用される特別なファイルです。これは、Linuxのすべてがファイルであるという設計思想の一部です。

さまざまなタイプのデバイスファイルがあります。このテストマシンの唯一のext4ファイルシステムが/にマウントされ、sdaと呼ばれていたことに注意したとき、そのうちの1つを見ました。

より正確に言うと、そのext4ファイルシステムは、/dev/sdaデバイスファイルを通じてファイルシステムに接続されたストレージデバイス上にあり、そのストレージデバイス上のファイルシステムが/にマウントされています。

もちろん、ISOイメージの名前を指定する必要があり、mountにファイルシステムをマウントする場所を知らせる必要があります。/mntを選択しました。

ISOイメージがマウントされました。ISOイメージは常に読み取り専用モードでマウントされるというリマインダーがターミナルウィンドウに表示されます。

ISOイメージの探索

マウントされたので、ファイルシステムの他の部分と同じように、ISOイメージのディレクトリをナビゲートできます。ISOイメージのファイルを一覧表示してみましょう。/mntにマウントされていることを忘れないでください。

ls /mnt

ls /mnt/cde/

ISOイメージのマウント解除

マウントされたファイルシステムをアンマウントするには、umountコマンドを使用します。「u」と「m」の間に「n」がないことに注意してください。コマンドはumountであり、「unmount」ではありません。

アンマウントするファイルシステムをumountに伝える必要があります。ファイルシステムのマウントポイントを指定して行います。

sudo umount /mnt

何も報告することがなければ、すべてがうまくいっています。

マウントポイントの作成

独自のマウントポイントを作成して使用できます。isomntというマウントポイントを作成し、その上にISOイメージをマウントします。マウントポイントは単なるディレクトリです。したがって、mkdirを使用して新しいマウントポイントを作成できます。

sudo mkdir /media/dave/isomnt

これで、以前と同じコマンド形式を使用してISOイメージをマウントできます。今回は/mntではなく、/media/dave/isomnt/にマウントします。

sudo mount -r -t iso9660 -o loop TinyCore-current.iso /media/dave/isomnt/

新しいマウントポイントからマウントされたファイルシステムにアクセスできるようになりました。

ls /media/dave/isomnt/cde/optional

しかし、これらのパスは非常に長くなっています。すぐに面倒になります。これについて何かしましょう。

マウントポイントのバインド

マウントポイントを別のディレクトリにバインドできます。その後、マウントされたファイルシステムには、元のマウントポイントまたはそれにバインドされたディレクトリからアクセスできます。

実例を挙げましょう。ホームディレクトリにisoというディレクトリを作成します。その後、ISOイメージ/media/dave/isomntのマウントポイントをホームディレクトリの新しいisoディレクトリにバインドします。

元のマウントポイント/media/dave/isomntと新しいisoディレクトリからISOイメージにアクセスできるようになります。-B(バインド)オプションには、マウントポイントの名前とバインドするディレクトリの名前が必要です。

mkdir iso

sudo mount -B /media/dave/isomnt/ iso

ls iso

ls /media/dave/isomnt

cd iso

ls

cd cde

バインドを使用したumountの使用

マウントポイントが別のディレクトリにバインドされているファイルシステムは、マウントポイントとバインドポイントからアンマウントする必要があります。

ファイルシステムを元のマウントポイントからアンマウントしても、バインドされたディレクトリからファイルシステムにアクセスできます。ファイルシステムはそのディレクトリからもアンマウントする必要があります。

sudo umount /media/dave/isomnt

ls iso

sudo umount iso

ls iso

フロッピーディスクのマウント

フロッピードライブ(中にフロッピーディスクがある)はストレージデバイスです。つまり、sd(ストレージデバイスの略)デバイスファイルを使用して物理デバイスに接続されます。どのsdデバイスファイルが次に使用できるかを確立する必要があります。これを行うには、dfの出力にパイプを接続し、grepを使用して「sd」を含むエントリを検索します。

df | grep /dev/sd

このコンピュータでは、1つのsdデバイスファイルが使用されています。これは/dev/sdaです。発行される次のsdデバイスファイルは/dev/sdbになります。つまり、フロッピードライブをコンピュータに接続すると、Linuxは/dev/sdbを使用してフロッピードライブに接続します。

mountに、/dev/sdbに接続されているフロッピードライブのフロッピーディスク上のファイルシステムを/mntマウントポイントにマウントするように指示します。

フロッピーディスクをフロッピードライブに挿入し、フロッピードライブをコンピュータのUSBポートに接続します。次のコマンドを発行します。

sudo mount /dev/sdb /mnt

ファイルシステムのラベル

-l(ラベル)オプションをmountと一緒に使用して、ファイルシステムに添付されているラベルがあるかどうかを確認できます。ラベルは任意の名前です。機能的な目的はありません。

-t(タイプ)オプションを使用して、mountvfatファイルシステムのみを報告するように要求しています。

mount -l -t vfat

リストの最後に角括弧でラベルが表示されます。このフロッピードライブのラベルはNORTUNです。

/mntマウントポイントからフロッピードライブにアクセスできます。

cd /mnt

ls

ls -l AMATCH.C

フロッピーにはC言語のソースコードファイルが含まれています。1つのファイルの日付スタンプは、最後に1992年10月に変更されたことを示しています。おそらく私たちの読者の多くよりも古いです。(言うまでもなく、ラベルとしてのNORTUNの意味は時間の経過とともに失われています。)

dfgrepにパイプしてsdデバイスファイルをリストするコマンドを繰り返すと、2つあることがわかります。

df | grep /dev/sd

フロッピードライブは予想通り/dev/sdbにマウントされた状態で表示されます。ドライブ内のフロッピーディスクのファイルシステムは/mntにマウントされています。

フロッピーをアンマウントするには、umountを使用してパラメータとしてデバイスファイルを渡します。

sudo umount /dev/sdb

umountの遅延オプション

アンマウントしようとしたときに、ファイルシステムを使用している場合(または他のユーザーが使用している場合)はどうなりますか?アンマウントは失敗します。

sudo umount /dev/sdb

失敗したのは、ユーザーの現在の作業ディレクトリがアンマウントしようとしているファイルシステム内にあるためです。Linuxは、座っている枝を切り落とさないように十分に賢いです。

これを克服するには、-l(遅延)オプションを使用します。これにより、umountはファイルシステムが安全にアンマウントできるまで待機します。

sudo umount -l /dev/sdb

ls

cd ~

ls /mnt

umountコマンドが発行されたにもかかわらず、ファイルシステムは引き続きマウントされ、ユーザーは通常どおりファイルのリストを作成できます。

ユーザーがホームディレクトリにディレクトリを変更するとすぐに、フロッピーファイルシステムが解放されてアンマウントされます。/mntのファイルをリストしようとすると、結果が得られません。

Samba共有のマウント

Sambaは、LinuxやUnix系オペレーティングシステムとWindowsオペレーティングシステムの間でネットワーク共有を相互にアクセスできるようにする一連のソフトウェアサービスです。

Sambaのセットアップはこの記事の範囲外です。ただし、利用可能なSamba共有へのアクセス権限が付与されている場合は、Linuxでマウントする方法を次に示します。

テストマシンと同じネットワークに接続されたRaspberry Piには、Samba共有があります。これは、"共有"というSamba名が付けられたBackupというディレクトリです。SSH接続して、共有ディレクトリの内容を確認しましょう。共有ディレクトリは、PiにマウントされたUSBスティックにあります。

ユーザー名はpiで、Raspberry Piのネットワーク名はmarineville.localです。

ssh [email protected]

ls /media/pi/USB64/Backup

exit

ユーザーはSSHコマンドを発行し、Raspberry Piのパスワードを求められます。

パスワードを入力すると、認証されます。Raspberry Piに接続されているため、ターミナルウィンドウのプロンプトがpi@marinevilleに変更されます。

共有ディレクトリの内容を/media/pi/USB64/Backupにリストします。内容は2つのディレクトリで、1つはdave、もう1つはpatという名前です。これで、Samba共有をマウントしたときに何が起こるかを理解できます。

exitと入力してRaspberry Piから切断し、プロンプトがdave@howtogeekに戻ります。

Sambaを使用するには、cifs-utilsパッケージをインストールする必要があります。

Ubuntuまたはその他のDebianベースのディストリビューションを使用している場合は、apt-getを使用してこのパッケージをシステムにインストールします。他のLinuxディストリビューションでは、代わりにLinuxディストリビューションのパッケージ管理ツールを使用します。

sudo apt-get install cifs-utils

インストールが完了したら、次のようなコマンドで共有をマウントします。IPアドレス、共有名、マウントポイント(すでに存在している必要があります)を状況に合わせて変更します。

sudo mount -t cifs -o credentials=/etc/samba/creds,uid=1000,gid=1000 //192.168.4.13/share /media/dave/NAS

そのコマンドの部分を分解してみましょう。

  • -t cifs:ファイルシステムの種類はcifsです。
  • -o credentials=/etc/samba/creds,uid=1000,gid=1000:オプションパラメータは、保護されていてRaspberry Piユーザーのユーザー名とパスワードが含まれているcredsというファイルへのパスです。ファイルシステムのルートの所有者とグループを設定するために使用されるユーザーID(UID)とグループID(GID)。
  • //192.168.4.13/share:Samba共有があるデバイスのネットワーク上の場所と、共有ディレクトリのSamba名。共有のルートはBackupというディレクトリですが、そのSamba共有名はshareに設定されています。
  • /media/dave/NAS:マウントポイントの名前。マウントポイントは事前に作成する必要があります。

/media/dave/NASの私たちのマウントポイントにアクセスすることで、ネットワークを介してRaspberry Pi上の共有ディレクトリにアクセスしています。Raspberry Pi上のdavepatという2つのフォルダーを確認できます。

cd /media/dave/NAS

ファイルシステムの作成とマウント

ddコマンドを使用してイメージファイルを作成し、mkfsを使用してその中にファイルシステムを作成できます。その後、そのファイルシステムをマウントできます。これはmountの練習と実験を行うのに適した方法です。

if(入力ファイル)オプションを使用して、/dev/zeroからのゼロ値のストリームを入力ファイルとして使用するようにddに指示します。

of(出力ファイル)はgeek_fsという新しいファイルです。

bs(ブロックサイズ)オプションを使用して、1 MBのブロックサイズを要求しています。

countオプションを使用して、出力ファイルに20ブロックを含めるようにddに指示します。

dd if=/dev/zero of./geek_fs bs=1M count=20

これにより、イメージファイルが作成されます。ゼロ値のみが含まれています。

mkfsコマンドを使用して、geek_fsファイル内に機能するファイルシステムを作成できます。-t(タイプ)オプションを使用すると、ファイルシステムの種類を選択できます。ext4システムを作成しています。

mkfs -t ext4 ./geek_fs

これだけで、機能するファイルシステムが完成します。

/media/dave/geekにマウントし、chownを使用して所有者とグループの所有権を設定してアクセスできるようにしましょう。

sudo mount ./geek_fs /media/dave/geek

sudo chown dave:users /media/dave/geek

機能していますか?新しいファイルシステムに変更してファイルのコピーを作成して確認しましょう。

cd /media/dave/geek

cp /etc/fstab .

ls -l

新しいファイルシステムにディレクトリを変更することができ、/etc/fstabファイルのコピーを正常に作成できました。機能しています!

-t(タイプ)オプションを使用してmountを使用してマウントされたファイルシステムをリストしますが、出力をext4ファイルシステムに制限すると、現在2つのマウントされたext4ファイルシステムがあることがわかります。

mount -t ext4

ファイルシステムの再マウント

ファイルシステムを再マウントするには、-o remountオプションを使用します。通常は、ファイルシステムをリードオンリー(テスト)状態からリードライト(運用)状態に変更するために使用されます。

フロッピードライブをもう一度マウントしてみましょう。今回は-r(リードオンリー)フラグを使用します。その後、mountgrepにパイプして、フロッピーファイルシステムの詳細を確認します。

sudo mount -r /dev/sdb /mnt

mount | grep /mnt

ハイライトされたroが示すように、ファイルシステムはリードオンリーでマウントされています。

rw(リードライト)フラグを使用して-o remountオプションを使用すると、新しい設定でファイルシステムをアンマウントして再マウントできます。すべて1つのコマンドで実行できます。

sudo mount -o remount,rw /mnt

mountgrepにパイプすることを繰り返すと、rorw(ハイライト)に置き換えられていることがわかります。ファイルシステムは現在、リードライトモードです。

mount | grep /mnt

ファイルシステムの移動(失敗)

以前は、1つのコマンドでファイルシステムをアンマウントして別のマウントポイントに再マウントできました。

mount-M(移動)オプションは、まさにそれを行うために存在します。しかし、systemdに移行したLinuxディストリビューションでは機能しなくなりました。そして、それはほとんどの大手です。

/mntから./geekにファイルシステムを移動しようとすると、失敗し、下に示すエラーメッセージが表示されます。./geekを介してファイルシステムのファイルをリストしようとすると、結果は返されません。

sudo mount -M /mnt ./geek

ls ./geek

回避策は、以前のオリジナルのマウントポイントを新しいマウントポイントにバインドするために使用した-B(バインド)オプションを使用することです。

sudo mount -B /mnt ./geek

ls ./geek

オリジナルのマウントポイントを解放しないことを除けば、これは同じ実践的な結果をもたらします。

最後の観察

--make-privateオプションを使用すると、systemdバージョンのLinuxで強制的に移動を実行することができました。その手法は、2つの理由でここでは紹介しません。

  1. 予測できない動作を起こす可能性があります。
  2. 永続的ではなく、再起動のたびに繰り返す必要があります。

Devuan LinuxはsystemdではなくSysVinitを使用しています。最新バージョンのDevuanを搭載したコンピュータをロードしてテストしました。そのシステムでは-M(移動)オプションが想定どおりに機能しました。

-M(移動)オプションのsystemdの問題を除けば、mountumountの使用は簡単であることがわかります。これらのコマンドは、破損したシステムに直面したときや、手動でファイルシステムを再構築する必要があるときに備えて、袖に持っておくのに最適なコマンドです。