- LinuxおよびUnix系オペレーティングシステムのファイルシステムは、端末を使用してマウント、アンマウント、および再マウントできます。
- Linuxのファイルシステムは、マウントされたストレージデバイスがファイルシステムの不可欠な部分として表示される、オールインワンのディレクトリツリーです。
- mountコマンドとumountコマンドを使用すると、ユーザーはシステムへの接続を制御し、マウントポイントや読み取り/書き込み権限など、ファイルシステムに関する決定を下すことができます。
LinuxやmacOSなどのUnix系オペレーティングシステムのファイルシステムは、端末を使用してマウント、アンマウント、および再マウントできます。これは強力で多用途のツールです。知っておくべきことはすべてここにあります。
Linuxファイルシステム
Linux、macOS、およびその他のUnix系オペレーティングシステムのファイルシステムでは、Windowsのように、ストレージデバイスに個別のボリューム識別子は使用されません。Windowsでは、各ボリュームにC:またはD:などのドライブ文字が割り当てられ、各ボリュームのファイルシステムはそのドライブ文字の下にあるディレクトリのツリーです。
Linuxでは、ファイルシステムはオールインワンのディレクトリツリーです。マウントされたストレージデバイスのファイルシステムは、そのツリーに接合され、1つのまとまりのあるファイルシステムの不可欠な部分であるかのように表示されます。新しくマウントされたファイルシステムには、マウントされたディレクトリからアクセスできます。そのディレクトリをそのファイルシステムのマウントポイントといいます。
多くのファイルシステムは、起動時に自動マウントされるか、実行中にコンピュータに接続されたストレージボリュームとしてその場でマウントされます。注意深いシステム管理者は、実行時の自動マウント機能をオフにして、システムへの接続を制御できます。
つまり、実行中に接続されたストレージデバイスは自動マウントされない可能性があり、手動でマウントする必要があります。ファイルシステムを手動でマウントすると、マウントポイントの場所やファイルシステムをリードオンリーにするか読み取り/書き込みにするかなど、そのファイルシステムに関する決定を下すことができます。
必要性からでも選択からでも、mount
、umount
、remount
コマンドを使用すると、Linuxシステムのこの重要な側面を制御できます。
mountを使用してファイルシステムを照会する
Mountには多くのオプションがありますが、コンピュータ上のすべてのマウント済みファイルシステムを一覧表示するには、オプションはまったく必要ありません。mount
と入力してEnterキーを押すだけです。
mount
は、ターミナルウィンドウに接続されているすべてのファイルシステムを一覧表示します。
そのデータダンプを調べて目的のファイルを見つけるのは難しい場合があります。
mount
に、目的のファイルシステムのみを一覧表示するように要求することで、出力を絞り込むことができます。-t
(タイプ)オプションは、mount
に報告するファイルシステムの種類を指示します。
mount -t tmpfs
mount -t ext4
たとえば、mount
にtmpfs
ファイルシステムのみを一覧表示するように要求しました。はるかに管理しやすい出力が得られます。
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
(タイプ)オプションを使用して、mount
にvfat
ファイルシステムのみを報告するように要求しています。
mount -l -t vfat
リストの最後に角括弧でラベルが表示されます。このフロッピードライブのラベルはNORTUNです。
/mnt
マウントポイントからフロッピードライブにアクセスできます。
cd /mnt
ls
ls -l AMATCH.C
フロッピーにはC言語のソースコードファイルが含まれています。1つのファイルの日付スタンプは、最後に1992年10月に変更されたことを示しています。おそらく私たちの読者の多くよりも古いです。(言うまでもなく、ラベルとしてのNORTUNの意味は時間の経過とともに失われています。)
df
をgrep
にパイプして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上のdave
とpat
という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
(リードオンリー)フラグを使用します。その後、mount
をgrep
にパイプして、フロッピーファイルシステムの詳細を確認します。
sudo mount -r /dev/sdb /mnt
mount | grep /mnt
ハイライトされたro
が示すように、ファイルシステムはリードオンリーでマウントされています。
rw
(リードライト)フラグを使用して-o remount
オプションを使用すると、新しい設定でファイルシステムをアンマウントして再マウントできます。すべて1つのコマンドで実行できます。
sudo mount -o remount,rw /mnt
mount
をgrep
にパイプすることを繰り返すと、ro
がrw
(ハイライト)に置き換えられていることがわかります。ファイルシステムは現在、リードライトモードです。
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つの理由でここでは紹介しません。
- 予測できない動作を起こす可能性があります。
- 永続的ではなく、再起動のたびに繰り返す必要があります。
Devuan Linuxはsystemd
ではなくSysV
initを使用しています。最新バージョンのDevuanを搭載したコンピュータをロードしてテストしました。そのシステムでは-M
(移動)オプションが想定どおりに機能しました。
-M
(移動)オプションのsystemd
の問題を除けば、mount
とumount
の使用は簡単であることがわかります。これらのコマンドは、破損したシステムに直面したときや、手動でファイルシステムを再構築する必要があるときに備えて、袖に持っておくのに最適なコマンドです。
コメントする