kazmax - Linux で自宅サーバー

Linux ハードディスクをマウント(mount)する

増設したハードディスクへfdiskでパーティションを作成し、そのパーティション上へmkfsでファイルシステムを作成しました。最後にマウント(mount)する事でやっとそのハードディスクを利用する事ができます。

Last Update : 2013年08月15日

Linux ハードディスクをマウント(mount)する 項目

  1. mountとは
  2. mountコマンドの書式
  3. mountする
  4. OSを再起動した後もmountさせる

1. mountとは

Linuxのディレクトリ構造は、「/(ルートディレクトリ)」とよばれる一番上のディレクトリからはじまるツリー状の構造になっていますが、増設したハードディスクの様な記憶装置を、このツリー構造のあるポイントへ登録する事をマウントといいます。

また、「あるポイント」の事をマウントポイントといいます。

2. mountコマンドの書式

mountコマンドの書式

mount -t <タイプ> -o <オプション> <デバイスファイル> <マウントポイント>

有用なオプション

オプション 意味
-t タイプ マウントするデバイスのファイルシステムを指定する
-o オプション 読込のみ、読書可等のフラグを指定する

デバイスファイルは、/dev/sdb1のようにパスで指定する。
マウントポイントも、/mnt/diskAのようにパスで指定する。

オプション無しで実行すると、現在マウントしているファイルシステムを表示する。

※ このページではハードディスクをマウントするという視点からmountコマンドを説明しています。実際には、もっと多くのオプションがあり、ハードディスクをマウントするだけに使われるわけではありません。

memo

-o オプションについて

オプションは色々あります。複数のオプションを指定する際は、「,(カンマ)」で区切って指定します。

オプション 意味
defaults デフォルトのオプション(rw, suid, dev, exec, auto, nouser, async)でマウントする
rw 読み書き可能なモードでマウントする
suid SUID および SGID ビットを有効にする
dev ファイルシステム上のキャラクタ・スペシャル・デバイスやブロック・スペシャル・デバイスを利用できるようにする
exec バイナリの実行を許可する
auto mount コマンドに-a が指定されたときにマウントされるようになる。
nouser 一般ユーザー (スーパーユーザー以外のユーザー) のマウントを禁止する
async そのファイルシステムに対するすべての I/O が非同期に行われる
ro リードオンリーでマウントする
nosuid SUID  および SGID ビットを無効にする
nodev ファイルシステム上のキャラクタ・スペシャル・デバイスやブロック・スペシャル・デバイスを利用できないようにする
noexec バイナリの直接実行を禁止する
noauto mount コマンドの-a オプションでマウントされない
user 一般ユーザーでもファイルシステムをマウントできるようにする
users 全てのユ ーザーがファイルシステムをマウント・アンマウント出来るようにする
remount すでにマウントされているファイルシステムを再マウントする。オプションを変えてマウントし直したい時、例えば、リードオンリーを読書き可能としてマウントし直す際等に使用する。

※オプションはまだまだあります。

3. mountする

/dev/sdb5 パーティションを、/mnt/diskA ディレクトリ配下へマウントしてみます。

# mount -t ext4 -o defaults /dev/sdb5 /mnt/diskA/ ← mountする

マウントされたか確認します。確認は、以下のようにします。

# mount -t ext4 ← ext4でマウントされているファイルシステムのリストを表示する
/dev/mapper/vg_sandbox1-lv_root on / type ext4 (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sdb5 on /mnt/diskA type ext4 (rw) ← ext4でマウントされている

一度マウントしてしまえば、普通のディレクトリのように使う事ができます。

4. OSを再起動した後もmountさせる

OSを再起動した後もmountさせるには、/etc/fstab へ記述しておきます。

例えば、再起動後も /dev/sdb5 パーティションを、/mnt/diskA ディレクトリ配下へマウントさせるには、以下のように追記します。

/dev/sdb5 /mnt/diskA ext4 defaults 0 0

/etc/fstab について

fstabファイルの中身をみてみます。

# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Aug 13 09:25:19 2013
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_sandbox1-lv_root             /           ext4    defaults        1 1
UUID=b5bc792e-4c30-48a5-bd1a-f071192d5573   /boot       ext4    defaults        1 2
/dev/mapper/vg_sandbox1-lv_swap             swap        swap    defaults        0 0
tmpfs                                       /dev/shm    tmpfs   defaults        0 0
devpts                                      /dev/pts    devpts  gid=5,mode=620  0 0
sysfs                                       /sys        sysfs   defaults        0 0
proc                                        /proc       proc    defaults        0 0

fstab ファイルは、それぞれのファイルシステムのマウント情報を1行に1つずつ書きます。各行のフィールドは、スペースか、TABで区切られます。

また、fsck mount, umount などのfstabファイルを利用するプログラムは、 fstab ファイルを先頭から順に読み込んで処理するため、fstabの中にに記述されるレコード(ファイルシステム)の順序は重要です。

各フィールドについて
フィールド 記述内容
第1フィールド マウントしたいデバイスファイルを書く。
例:/dev/sdb5
UUIDや、ボリュームラベルで指定する事もできる。LABEL=Boot、UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
第2フィールド ファイルシステムのマウントポイントを記述する。
例:/mnt/diskA
第3フィールド ファイルシステムのタイプを記述する。
例:ext3, ext4, iso9660, nfs 等
第4フィールド ファイルシステム毎のマウントオプションを記述する。オプションが複数ある場合は、「,カンマ」で区切る。
第5フィールド ファイルシステムを dump コマンドがダンプする必要があるかを記述する。1が必要。0が不要。記述がないのも不要とみなす。
第6フィールド fsckが、ブート時にファイルシステムのチェックを実行する順序を決定するために参照される。
ルートファイルシステムは、1と記述する必要がある。それ以外のパーティションは、2と記述する。
0の場合は、fsckによるチェックが不要とみなす。

memo

ラベルとは

ハードディスク等の記憶装置を識別するために、ユーザが自由に付けられる名前の事をいいます。

mkfs コマンド実行時に、オプションに、-L ラベル名と指定したり、e2label コマンドを使うことで、ボリュームにラベルをつける事ができます。

# mkfs -t ext4 -L hdd1 /dev/sdb5 ←/dev/sdb5にhdd1というラベル名をつける

や、

# e2label /dev/sdb5 hdd1 ←/dev/sdb5にhdd1というラベル名をつける

どちらの手順でもラベル名をつける事ができます。

ラベルを確認する

e2label コマンドで確認できます。

# e2label /dev/sdb5
hdd1  ←/dev/sdb5のラベル名が表示される。

ラベルをつけたファイルシステムをfstabへ記述する場合は、以下のように記述します。

LABEL=hdd1 /mnt/diskA ext4 defaults 0 0

memo

UUIDとは

UUIDとは、機器を管理・識別ためのIDです。誰かが重複しないように管理しているわけではないのですが、機器を識別するためのユニークなIDとして存在しており、ハードディスクにもUUIDが割り振られています。

ハードディスクのUUIDを調べるには、blkid コマンドを使います。

# blkid
/dev/sda1: UUID="b5bc792e-4c30-48a5-bd1a-f071192d5573" TYPE="ext4"
/dev/sda2: UUID="50KmAJ-A2Le-xYiK-ag0P-sQgb-bZXI-rWa21g" TYPE="LVM2_member"
/dev/sdb5: LABEL="hdd1" UUID="8b976773-def1-4a70-acc1-6284f53cf230" TYPE="ext4"
↑ /dev/sdb5のラベル、UUID、Typeがわかる

/dev/mapper/vg_sandbox1-lv_root: UUID="fa117ec8-70ec-4fc5-bff2-f74bbe58b972" TYPE="ext4"
/dev/mapper/vg_sandbox1-lv_swap: UUID="38037ae3-a844-487b-8b49-98d98cff0b69" TYPE="swap"

fstabにUUIDでレコードを記述しておくと、ハードディスクの接続を物理的に変えたり、 デバイスの追加・変更等でデバイス名が変更されてしまった場合(例えば、sda1がsdb1に変更された等)でも、 fstabに書いたそのレコードは指定したUUIDのデバイスを選択してくれます。 fstabをデバイス名で記述していた場合、デバイス名が変更されてしまったとしたら正常に起動してこない場合もあります。

fstabへの記述例

UUID=8b976773-def1-4a70-acc1-6284f53cf230 /mnt/diskA ext4 defaults 0 0

ハードディスクのUUIDも、ファイルシステムを作る際に生成されています。mkfsコマンドに-U オプションを指定すれば好きなUUIDをつける事ができます。

# mkfs -t ext4 -L hdd1 -U aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa /dev/sdb5 ← UUIDを指定

# blkid
/dev/sda1: UUID="b5bc792e-4c30-48a5-bd1a-f071192d5573" TYPE="ext4"
/dev/sda2: UUID="50KmAJ-A2Le-xYiK-ag0P-sQgb-bZXI-rWa21g" TYPE="LVM2_member"
/dev/sdb5: LABEL="hdd1" UUID="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" TYPE="ext4"
↑ UUIDが指定したものに
/dev/mapper/vg_sandbox1-lv_root: UUID="fa117ec8-70ec-4fc5-bff2-f74bbe58b972" TYPE="ext4"
/dev/mapper/vg_sandbox1-lv_swap: UUID="38037ae3-a844-487b-8b49-98d98cff0b69" TYPE="swap"

誰も得しませんがこういう仕組みということで。。

Linuxファイルシステム 関連記事
Linux 基礎知識 関連記事