はじめに
EBSはEC2にアタッチするだけでは使用できません。
アタッチしただけではOS側から"ただのディスク"としか見られていないため、
使用するにはEBSをフォーマット
した上でマウント
する必要があります。
ここではマウントまでの手順を解説します。
※AWS, Linuxの初学者を対象にしています。
【フォーマット】
記憶装置の内部を小さな区画に分割し、管理用のデータ保管領域などを確保することにより、特定の箇所へのデータの読み書きができるよう準備する操作
IT用語事典 e-words
【マウント】
周辺機器をOSなどのソフトウェアに認識させ、操作・利用可能な状態にすること
IT用語事典 e-words
環境
- パソコン:Mac
- AMI:Amazon Linux 2
前提
- EC2インスタンスを作成していること。
- EBSを作成しEC2にアタッチしていること。
- ターミナルからEC2にSSH接続済みであること。
手順
①EC2のコンソールからアタッチしたEBSのデバイス名を確認
ここですね。/dev/sdf
となっていることを確認できます。
②root権限に切り替える
ここから先はroot権限が必要な操作ばかりなので切り替えます。
[ec2-user@ip-123-45-67-89 ~]$ sudo su -
または
[ec2-user@ip-123-45-67-89 ~]$ sudo -i
▪️参考:sudo -i と sudo su- のどちらを使うべきか?
▪️参考:AWS公式ドキュメント(公式では権限を切り替えずに以降の手順をすべて sudo で実行しています)
③デバイス上にファイルシステムを作成する
ファイルシステムとは?
`NTFS`や`FAT32`など聞いたことありませんか? `「Windowsで使ってた外付けHDDをMacに接続しても認識しない!」`等の経験ありませんか? 今回はその話です。 ファイルシステムとは**記憶装置に保存されたデータを管理し操作するために必要な機能**です。 ファイルシステムがないとEBSも外付けHDDもただの箱です。 ファイルシステムは様々な種類がありますがLinuxでは主に`XFS`や`ext4`が使われているようです。 ▪️参考:[ファイルシステムとは?](https://hnavi.co.jp/knowledge/blog/filesystem/ "ファイルシステムとは?今さら聞けない基礎知識とOSごとの種類")まず現在のデバイスのファイルシステムをfile
コマンドを使って確認します。
対象が今回のようなデバイスファイルの場合は-s
オプションを付ける必要があるようです。
▪️参考:wikipedia: file (UNIX)
[root@ip-123-45-67-89 ~]$ file -s /dev/sdf
/dev/sdf: symbolic link to `xvdf'
よくわからないですが/dev/sdf
はxvdf
へのシンボリックリンクですよーと出てきます。
(シンボリックリンクとはショートカットのようなものです)
本体がxvdf
であるならばなぜsdf
というショートカットを挟まなければいけないのか、
このあたりの理由は調べてもわかりませんでした。「こういうものだ」と処理します。
▪️参考:EC2:EBSデバイスIDの混乱(/ dev / sdfと/ dev / xvdf)
実際にlsblk
コマンド(ブロックデバイスを一覧表示するコマンド)を実行してみても
接続されているデバイスはxvdf
であることが確認できます。
[root@ip-123-45-67-89 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 500G 0 disk
気を取り直して、改めて現在のファイルシステムを確認します。
[root@ip-123-45-67-89 ~]# file -s /dev/xvdf
/dev/xvdf: data
data
とだけ表示される場合、ファイルシステムが作られていないことを意味します。
ではmkfs
コマンド(ファイルシステムを作成するコマンド)でファイルシステムを作成します。
今回はext4
にしたいと思いますので-t
オプションで指定します。
▪️参考:【 mkfs 】コマンド――HDDなどをフォーマットする
[root@ip-123-45-67-89 ~]# mkfs -t ext4 /dev/xvdf
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
32768000 inodes, 131072000 blocks
6553600 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2279604224
4000 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
長々と出てきましたが、これでファイルシステムの作成は完了です。
file
コマンドでファイルシステムを確認してみます。
[root@ip-123-45-67-89 ~]# file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=2c3d4ee5-d35f-4344-993f-9fe4303899d5 (extents) (64bit) (large files) (huge files)
ext4 filesystem data
と表示されており、
無事ext4
でファイルシステムの作成ができたことを確認できます。
ちなみにここで表示されているUUID
は後ほど使いますのでどこかに控えておいてください。
④マウントするディレクトリを作成する
まずマウント
の概念を理解する必要があります。
この2つの記事を読めば大まかには理解できるはずです。
▪️参考:この1ページで一通りわかる!Linuxのマウント(mount)について
▪️参考:「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典:マウント (mount)
ではmkdir
コマンド(ディレクトリを作成するコマンド)でマウントするディレクトリを作成します。
ディレクトリ名は自由です。今回はAWS公式ドキュメントに倣ってdata
とします。
[root@ip-123-45-67-89 ~]# mkdir /data
ls
コマンド(ファイルやディレクトリを一覧確認するコマンド)で確認してみます。
[root@ip-123-45-67-89 ~]# ls /
bin boot data dev etc ...
無事data
が作成されていることを確認できます。
⑤マウントする
俺お前より詳しいぜ
失礼しました。作成したdata
ディレクトリに/dev/xvdf
をマウントします。
マウントするにはmount
コマンドを使います。
▪️参考:【 mount 】コマンド――ファイルシステムをマウントする
[root@ip-123-45-67-89 ~]# mount /dev/xvdf /data
特に何も表示されることなくしれっと完了します。
ではdf
コマンド(ディスクの空き領域を調べるコマンド)を使って/dev/xvdf
が表示されるかどうかを確認します。
空き領域が表示される=マウントされている を意味します。
-h
オプションを付けることでギガバイトはG
やメガバイトはM
など、わかりやすい単位で表示してくれます。
▪️参考:【 df 】コマンド――ディスクの空き領域を表示する
[root@ip-123-45-67-89 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 532K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.4G 6.7G 18% /
tmpfs 99M 0 99M 0% /run/user/1000
/dev/xvdf 493G 73M 467G 1% /data
/dev/xvdf
が表示されており、問題なくマウントできていることを確認できます。
これでアタッチされたEBSが使用可能ということになります。
⑥再起動後も自動でマウントされるように設定する
実はマウントをしてもEC2インスタンスの停止や再起動のタイミングで外れてしまいます。
停止や再起動をしても自動で再マウントされるように設定を追加したいと思います。
/etc/fstab
というファイルシステムの情報を記述するファイルを編集していきます。
OS起動時にシステムがデバイスをディレクトリにマウントしますが、
どのデバイスにどのディレクトリをマウントするかの処理は/etc/fstab
ファイルの記述に従って進行されます。
▪️参考:Linux豆知識 175「/etc/fstab」ファイル
手順③のファイルシステム作成時に表示されたUUID
が必要になります。
メモに控えていなかった場合は再度file
コマンドで確認するか、またはblkid
コマンド(ブロックデバイスの属性を表示させるコマンド)でも確認できます。
[root@ip-123-45-67-89 ~]# blkid
/dev/xvda1: LABEL="/" UUID="90e29211-2de8-4967-b0fb-16f51a6e464c" TYPE="xfs" PARTLABEL="Linux" PARTUUID="2c7bff30-ed75-4ab8-999f-02e40450fd0f"
/dev/xvdf: UUID="2c3d4ee5-d35f-4344-993f-9fe4303899d5" TYPE="ext4"
...
ではvi
コマンド(エディタを起動するコマンド)で/etc/fstab
の編集画面を出します。
▪️参考:viコマンドについて詳しくまとめました 【Linuxコマンド集】
[root@ip-123-45-67-89 ~]# vi /etc/fstab
以下のような編集画面が表示されます。
#
UUID=90e29211-2de8-4967-b0fb-16f51a6e464c / xfs defaults,noatime 1 1
~
~
~
~
~
"/etc/fstab" 2L, 91C
キーボードのiキー
でINSERTモード(編集モード)
にし、
2行目以降に今回追加するデバイスの情報を入力します。
#
UUID=90e29211-2de8-4967-b0fb-16f51a6e464c / xfs defaults,noatime 1 1
UUID=2c3d4ee5-d35f-4344-993f-9fe4303899d5 /data ext4 defaults 1 1
~
~
~
~
~
"/etc/fstab" 2L, 91C
第1フィールド:デバイス名
第2フィールド:マウントポイント
第3フィールド:ファイルシステムの種類
第4フィールド:各種オプション
第5フィールド:ファイルシステムをdumpするか否かの指定
第6フィールド:OS起動時にfsckチェックを行うか否かの指定を行う
▪️参考:Linux豆知識 175「/etc/fstab」ファイル
入力後はescキーで
コマンドモードに戻り、:wq
と打ちreturnキー
を押して上書き保存します。
以上で設定は完了です。
これでEC2が再起動をしても指定したデバイスが自動でマウントされます。
#終わりに
しゃーしゃーと解説しましたが私自身がAWSの初学者です。
途中でも書きましたが、本体がxvdf
であるならば何故sdf
と名乗る必要があるのか、
ここだけはどんなに調べてもわからず、ずっとモヤモヤしています。
詳しい方は私にマウントしてください。
追記:
利用するAMIなどによってマウント対象のドライブの命名規則が変動するようです。
これは仕様ということで理解します。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/device_naming.html