WindowsではUSBメモリは外付けHDD等の外部ストレージを挿すと自動的に適当なドライブレター(Cドライブ、Dドライブなど)が割り当てられそちらからアクセスすることが出来ます。
しかし、LinuxでUSBメモリなどを接続しても自動的にアクセス出来るようにはなりません。
今回はストレージにアクセス出来るように接続(マウント)する方法を説明します。
この記事で行うこと
1. WindowsとLinuxでのストレージ管理の違い
ストレージの中にはパーティション(ファイルシステム)が存在しています。これはストレージを複数に分割したものです。
ストレージを分割することで1つのストレージで色々な用途で使えます。単一の用途で使うストレージであれば、そのストレージ容量と同じ大きさの1つのパーティションのみとすることも出来ます。
パーティションの存在は、WindowsでもLinuxでも変わらない部分となります。
そして、Windowsではパーティション毎にドライブレターという英字が設定されて、ドライブレターでストレージを指定して、その中の場所を指定する形となります。
例として、一般的にWindowsのユーザフォルダは C:\Users
に配置されます。これは、Cに割り当てられたパーティション(Cドライブ)の直下にあるUsersというフォルダという意味になります。
それに比べて、Linuxでは一般的に全てのパーティションは /
(ルート)から始まる好きな場所に配置できます。
以下のコマンドを使用する事で、各パーティションがどこに配置されているか確認出来ます。
[root@localhost ~]# df -h -T
df
: 接続されているパーティションの一覧を表示するコマンド。-h
: パーティションの容量を読みやすいようにKiBやMiB単位で表示する。(KBやMBで表示したい場合は-H
を使います)-T
: パーティションで使われているファイルシステム形式を表示します。
コマンドを実行すると、以下のような結果が表示されるかと思います。(以下は一部抜粋した物です。また、サーバのストレージ構成によって表示は変わります。)
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
/dev/mapper/cl-root xfs 150G 6.3G 144G 5% /
/dev/mapper/cl-home xfs 75G 568M 75G 1% /home
/dev/sda1 ext4 976M 318M 592M 35% /boot
この例で言うと、基本的には /dev/mapper/cl-root
というパーティションに保存されますが、 /home
以下は /dev/mapper/cl-root
というパーティションに、 /boot
以下は /dev/sda1
というパーティションに保存されるようです。
このように、Linuxでは特定のディレクトリに接ぎ木のようにパーティションを割り当てることが出来ます。
当然ルート直下以外でも割り当てられるので、例えば /home/user
というディレクトリ以下にパーティションを割り当てるといったことも出来ます。
しかし、好きな場所に割り当てられるために、ストレージを接続する際にユーザがどこに割り当てるかを指定してあげる必要があるのです。
2. 接続されているストレージ・パーティション一覧の確認
パーティションにパスを割り当てるには、そのパーティションの名称を確認する必要があります。
しかし、先ほど使用した df
コマンドでは既にパスが割り当てられているパーティションしか表示されません。
接続されているストレージのパーティション全て表示するには以下のコマンドを使います。
[root@localhost ~]# fdisk -l
fdisk
: パーティションを管理するコマンドです。新たにパーティションを作成する際などにもこのコマンドを使います。パーティションの作成は次回の記事で説明します。-l
: 一覧を表示するオプションです。認識している全てのパーティションの一覧を表示します。
コマンドを実行すると、接続されているストレージとそのパーティションが表示されます。
見出しに「ディスク」となっているのがストレージでその下にある「デバイス」がそのストレージ内にあるパーティション一覧です。
USBを挿す前後でコマンドを実行したり、容量が同じ物を探すなどして、該当するデバイスを探します。
Windowsで使っていたUSBメモリをLinuxに挿した際の表示例が以下となります。
ディスク /dev/sdb: 14.4 GiB, 15500574720 バイト, 30274560 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x67d6d025
デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ
/dev/sdb1 * 2048 30273535 30271488 14.4G c W95 FAT32 (LBA)
この場合、USBメモリ自体を指す場合は /dev/sdb
で、USBメモリ内のパーティションを指す場合(今回はパーティションは1つしかありません)は /dev/sdb1
となります。
3. パーティションのマウント
パーティションを接続してアクセス出来るようにすることをマウントといいます。
パーティションのマウントは以下のコマンドで行えます。
[root@localhost ~]# mount [パーティション名] [マウント先]
mount
: 見ての通りパーティションをマウントするためのコマンドです。[パーティション名]
: マウントしたいパーティションを指定します。ストレージではなく、パーティションの名前なので注意してください。df
コマンドを使った際に「デバイス」の欄に表示された物となります。[マウント先]
: マウントしたいディレクトリを指定します。なお、マウントされたディレクトリに元々入っていたファイルやディレクトリはマウントを解除するまでアクセス出来ないので注意してください。
Linuxでは好きな場所にマウントできると言いましたが、一時的にマウントを行う為のディレクトリが存在しています。(ちょっとUSBメモリの中身を見たいだけなのにその度にマウント先を悩むのも面倒ですから)
/mnt
が一時的なマウント用のディレクトリとなります。
先ほど確認したUSBメモリのパーティションを /mnt
にマウントする場合のコマンドは以下のようになります。
[root@localhost ~]# mount /dev/sdb1 /mnt
また、パーティションのマウント解除は以下のコマンドで行えます。ストレージを取り外す前にはマウントを解除するようにしましょう。(Windowsで「ハードウェアの安全な取り外し」を行う必要があるのと同様です)
4. 自動マウントの設定
USBメモリや増設したHDD等を繋げっぱなしにする場合、そのままでは再起動する度にマウントをやり直す必要があります。
これでは面倒なので、サーバが起動する際に自動的にマウントを行うように設定することができます。
自動マウントは /etc/fstab
を編集することで設定できます。
ファイルの中身は以下のようになっているはずです。
#
# /etc/fstab
# Created by anaconda on Mon Aug 10 14:03:10 2020
#
# 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX /boot ext4 defaults 1 2
/dev/mapper/cl-home /home xfs defaults 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
1番下に新たに自動でマウントしたい内容を記入します。
[パーティション名] [マウント先] [パーティションのファイルシステム] [オプション] [dumpによるバックアップ要否] [ディスクチェックの要否]
先ほどマウントした例だと以下のようになります。
/dev/sdb1 /mnt vfat defaults 0 0
[パーティションのファイルシステム]
:df -T
を実行すると出てくる「タイプ」列の内容となります。(マウントしていないとパーティションが表示されないので注意してください)[オプション]
: マウントする際のオプションです。他のディレクトリと同じように使うのであればdefaults
を設定すれば大丈夫です。オプションを別途設定することでファイルの実行を出来なくしたり、読み取り専用にするといった事が出来ます。[dumpによるバックアップ要否]
:dump
というバックアップ用のコマンド使った際にこのパーティションを対象とするかというものです。1が対象、0が対象外です。dump
コマンドを使わないのであれば0で良いと考えます。[ディスクチェックの要否]
: システム起動時にfsck
というコマンドを使ってディスクのファイルに破損などが無いかを確認するか否かというものです。0はチェックしない、1は最優先でチェックする(ブート用のシステムなど)、2はチェックするとなります。
設定後にサーバを再起動すると、マウントされたままになっていると思います。
なお、この設定がされているストレージが取り外された状態でサーバを起動すると起動しなくなってしまう(エマージェンシーモードとなり、ほとんどの機能が制限される状態になる)ので、注意してください。
エマージェンシーモードとなったら、rootでログインして /etc/fstab
から取り外したストレージの記述を消して再起動することで直ります。
まとめ
今回はUSBメモリなどの外部ストレージを取り付けた際に使えるようにする方法について説明しました。
内部ストレージの場合もマウントの方法は同じです。
ただし、新品のストレージを新たに使う際にはパーティションを新しく作成してあげる必要があります。(Windowsだとフォーマットとか呼ばれることもあるアレです)
次回はこのパーティションの作成について説明したいと思います。