Linuxでよく出てくるマウントとは、外部の記憶媒体を扱うための方法だ。
USBやCDROMなどが外部記憶媒体に当たる。WindowsであればUSBをPCにつなげるとすぐに使えるようになるはずだ。しかし、Linuxの場合ただ繋げただけだと使えないことが多い。マウントしてはじめて、使えるようになる。
このページではLinuxのマウントについて一通りわかるようにご紹介した。参考にしてほしい。
目次
Linuxのマウントとは?
枝を追加すること
一般的にUSBメモリを始めとした外部記憶媒体をPCに接続するとWindowsOSの場合は「Dドライブ」や「Eドライブ」として認識される。この「D」や「E」のことを「ドライブレター」という。
しかしLinuxにはドライブレターという概念はない。ではLinuxではどうなっているのか?
イメージとしては「/」から始まるディレクトリツリー、「樹木構造(階層構造)」に記憶媒体という「枝」を追加するというのを想像してもらえるとわかりやすいだろう。
詳しくわからないという方は下記の記事などを参考にしていただけるといいだろう。
この枝を追加する行程を「マウント」という。
「/」のしたであればほぼどこのディレクトリでも枝を追加することは可能だ。一般的に「/mnt」もしくは「/media」にマウントすることが多い。
mountコマンドはシステムに関わるコマンドなので基本的にスーパユーザ権限で実行することが多い。後ほど詳しくご紹介するが「fstabファイル」に設定を記述すれば一般ユーザでのマウントが可能になる。
マウントとアンマウント
記憶媒体は基本的にマウントすることで読み込み書き込みが可能になる。
記憶媒体をとり外すときは必ず「umount」コマンドを実行する。このコマンドにより、記憶媒体が安全にとりはずせるようになる。
もしumountコマンドを発行せずに記憶媒体をひきぬいた場合ファイルシステムが破損する可能性があるので必ず実行すること。
WindowsでいうところではUSB機器にたいしてタスクバーの「ハードウェアを安全に取り外す」という項目がlinuxのアンマウントに相当する。基本的に「外部記憶媒体」を接続したらマウントし、使用し終えたらアンマウントすることを頭にいれておこう。
実際にやってみよう
とにかく「マウント」してみよう。
ここまで言っていることと矛盾するが、CentOS7のデスクトップ環境の場合USB記憶媒体を刺した時点で、デスクトップにアイコンが出てくるのでそれをクリックすれば通常通り、ファイルの読み書きができることが多い。
しかし、LinuxはCUIで使うことの方が多い。CUIでの動作の場合、手動でマウント操作が必要になる。
dmesgコマンド
まずは、dmesgコマンドでデバイスが認識されていることを確認する。
$ dmesg
多くの場合はsdb1となっていることが多いだろう、今回は表示の関係上「grep」コマンドで絞ってある。
マウントを実行
このデバイスの割り当ては環境の状態によってかわるので注意すること、とりあえず記憶媒体「sdb1」をマウントしてみよう、以下のコマンドをスーパユーザ権限で実行してみよう。
# mount /dev/sdb1 /mnt
そしたら
$ ls /mnt
としてみよう、記憶媒体の中身がみえるはずだ。次に「df」コマンドでどのデバイスがどこにマウントされているのか確認しよう。
$ df -Th
/dev/sdb1が/mntにマウントされている。確認できたら、とりあえず、スーパユーザ権限で
# touch /mnt/testfile.txt
としてみよう、正常に書き込みがなされるはずだ。継木が完成しているというのがわかる。
$ ls /mnt
これで中身が確認できる。
アンマウントにチャレンジ
そしたら今度はアンマウントしてみよう、スーパユーザになって以下のコマンドを叩いてみよう。
# umount /mnt
とする。外付けのUSB記憶媒体などのアクセスランプが点灯しているばあいは、ランプが消灯するまでまとう。dfコマンドでアンマウントされことを確認したあと記憶媒体をひきぬこう。
/dev/sdb1がなくなっていることが確認できた。
アンマウントできないときは?
今おこなったのは、「マウント」し「書き込み」を行い「アンマウント」したのである。もしこのときデバイスがビジーであると警告が表示される場合、デバイスになにかしらの、アクセスがかかっており、アンマウントできない状態になっている、そういった場合は「lsof」でデバイスにアクセスがかかっていないか確認しよう。
今回は先の手順で再びマウントを行い
$ lsof /mnt
とすると状態が把握できる。試しに
$ cd /mnt
とした状態で
# umount /mnt
としてみるとアンマウントできないはずだ。
$ lsof /mnt
で確認するとそこにアクセスをかけているプロセスIDや、そのユーザ名が表示されるので、アクセスをかけているプロセスをなくしてから再度「umount」すると正常にアンマウントできるはずだ。
一般ユーザでもマウントができるようにする
基本的にマウントしたデバイスはシステムの一部としてアクセスができるが、デフォルトの挙動ではスーパユーザ権限でマウントされ、通常の一般ユーザは読み込みはできるが書き込みができない状態になっている。
そこで「-o uid=<ユーザID>,gid=<グループID>」を追加してマウントしてみよう、すると無事にidで指定したユーザIDとグループIDで書き込みができるはずだ。「id」コマンドでユーザIDとグループIDは判別できる。
# mount -o uid=<ユーザID>,gid=<グループID> /dev/sdb1 /mnt
アンマウントするときはスーパユーザ権限が必要となる。
fstabに記述する
もうひとつの手段として「fstab」に特別な手段として記述しておくという方法がある「/dev/sdb1 /mnt/ auto noauto,user 0 0」と記述
# echo “/dev/sdb1 /mnt/ auto noauto,user 0 0” >> /etc/fstab
すると
$ mount /mnt
とするだけで/dev/sdb1が/mntにマウントできるようになる。ここの辺りはLPICでも結構、出題される範囲だ。受けようと思っている方は理解しておいた方がいい。
ここで気をつけなければならないのは、例えばいま「/dev/sdb1」が認識された状態でもうひとつ記憶媒体を認識させると、大概は「/dev/sdc1」となることが多い、このように状態によりけりで、デバイスファイルの指定が変わるので、その点を念頭においておこう。
fstab設定ファイル
少々ややこしい記述となっているが、一番下の行先ほど追加した/dev/sdb1を見ていただきたい。デバイスとUUIDの関連づけを確認するには
$ ls -l /dev/disk/by-uuid
で確認できる。
fstabにUUIDでデバイスを記述することで、デバイスの接続順に関係なくマウントが可能になる。デバイスの識別別名だと思えばいいだろう。
書式設定は
- カラム1がデバイス名
- カラム2がマウントポイント
- カラム3がファイルシステム
- カラム4がマウントオプション
- カラム5がファイルシステムをdumpの必要かどうか
- カラム6がシステム起動時にfsckチェックを行うかどうか
を表わしている。
fstabのオプション
defaultsとすると「 rw, suid, dev, exec, auto, nouser, async」それぞれを有効にしてマウント。
auto とするとmount コマンド -a オプションでマウントされる。
user 一般ユーザもファイルシステムをマウント可能にする。
uid = マウント時のユーザID指定
gid = マウント時のグループID指定
noauto コマンドで明示的にマウントしないかぎり、マウントしない。
マウントに関連する各種コマンド
最後に、マウントに関連する各種コマンドをさらっとご紹介しておこう。
mountコマンド
デバイスをマウントするときに使用するコマンド
主要オプション
- -a /etc/fstabに記述されたファイルシステムを全てマウントする例外としてnoautoオプションが記述されている場合そのデバイスはマウントしない。
- -tファイルシステムを指定してマウント、サポートされているファイルシステムは、/etc/filesystemsに記述されている。
- -oでさらにこまかいオプションが存在する。
- uid= ユーザID指定
- gid= グループID指定
- ro 読み込み専用
- rw書き込みの許可
umountコマンド
デバイスをアンマウントするときに使用するコマンドだ。
基本的にはマウントポイントを指定してアンマウントするだけなので、複雑なことを考えなくてもよい。
もし誤ってアンマウントせずにデバイスをぬいてしまった場合、マウント情報がシステムに残留するので「-f」オプション使って、強制アンマウントという形で対処する。
dfコマンド
ディスクの空き状況やマウントポイントなどを表示する。
主要オプション
- -h 人間にわかりやすい単位で表示
- -T ファイルタイプを表示
lsofコマンド
開いているファイルやディレクトリやソケットを表示する。
主要オプション
- -u <ユーザ名> ユーザが開いているファイルなどを表示
- -p <プロセスID> プロセスIDで開いているファイルを表示
まとめ
このページではLinuxのマウントについて一通りまとめてきた。このページに載っていることを理解していれば、大体のことは実行できるはずだ。
マウントについて忘れてしまったら、時々見返していただければと思う。
Linux初心者です。マウントのことよく分かりました。ただ、1つ質問があります。
マウントポイント配下に既にファイルがあった場合、それらは見えなくなるのでしょうか?
いつもご愛読いただきありがとうございます。
(1) 例えば /mnt/test というフォルダを作り、その中に test.txtなど適当なテキストファイルを作ります。
(2) 続いて mount /dev/sda1 /mnt/test を実行します
その後に作成した /mnt/test/test.txt がどうなってしまうか、ということですね。
結果としては、ls -al /mnt/test を実行するとマウントされた /dev/sda1 下のフォルダ内容が表示されます。
そのためtest.txtは見えなくなります。
その後、 umount /mnt/test を実行してマウントを解除、ls -al /mnt/test を実行すると
test.txt のみが表示されます。 /mnt/test の「行き先」が変わるだけなので元あったファイルは残っています。