EBS とファイルシステムを理解する
こんにちは!よしななです。
今回は、ファイルシステムのマウントについて調査したので、
備忘録としてブログに残します。
目次
- ファイルシステムとは何か
 - ルートボリュームとデータボリューム
- 違いについて
 - 使い分けの理由
 
 - システムのマウントについて
 - EBS を使用してシステムをマウントする手順
 - 最後に
 
ファイルシステムとは何か
- コンピュータのオペレーティングシステム(OS)が、コンピューターでファイルやディレクトリを管理するための仕組みです。
- 普段意識せず使っている Windows の C ドライブもファイルシステム
 - OS ごとにファイルシステムの企画が異なる
 
 - ハードディスクや SSD、USB メモリなどのストレージデバイスに保存されたデータを整理・管理する役割があります。
 
ファイルシステムの種類
以下の通り、OS ごとにさまざまな規格のファイルシステムが使われています。
- Windows
- FAT(File Allocation Table)
- Microsoft が開発
 - MS-DOS から採用されているファイルシステム
 
 - NTFS(NT File System)
- FAT を進化させたファイルシステム
 - ファイルの変更履歴などの情報を保存するジャーナリング機能を完備
 - FATよりも高機能で堅牢なシステム
 - 圧縮機能、ファイル単位の暗号化機能も備える
 
 
 - FAT(File Allocation Table)
 - Mac
- HFS+(Hierarchical File System +)
- HFS(Hierarchical File System)の後継として、1998年から Mac OS 8.1 で導入された
 - ひとつのファイルとして扱える容量が8EB(エクサバイト)
 - ただし、MacOSにしか対応していない
 
 - APFS(Apple File System)
- 2016年に Apple が発表した新しいファイルシステム
 - SSD やフラッシュメモリなどに最適化されている
 - ファイルコピーの速度が高速化
 
 
 - HFS+(Hierarchical File System +)
 - Linux
- XFS(Extents File System)
- 64ビットのジャーナリングファイルシステム
 - ファイルを階層構造で保存し、FAT や NTFS の元になっている
 - UNIX でもかなり古い形式のため安定している
 - 削除したファイルを復元することができない
 
 - ext4(Fourth Extended Filesystem)
- Linux ディストリビューションのデフォルトファイルシステム
 - ジャーナリング機能によるデータ保護
 - システムクラッシュ時のデータ復旧が容易
 - ファイルシステムの整合性を保持
 
 
 - XFS(Extents File System)
 
ルートボリュームとデータボリューム
次に、ボリュームについてまとめます。
ボリュームとは何か?
コンピューターのストレージデバイス上に作成された、オペレーティングシステムがデータを読み書きするために利用する論理的な領域のことを指します。
ハードディスクやSSDなどの物理的なストレージデバイスは、ひとつまたは複数のボリュームに分割され、各ボリュームが異なるデータを保管するために使われます。
ルートボリュームとデータボリュームの違い
- ルートボリューム
- ルートボリュームは、コンピュータや仮想マシン(VM)の起動時にオペレーティングシステム(OS)がロードされる主要なストレージパーティションまたはドライブ
 - 通常、ルートボリュームには OS、システム設定、必要なプログラムが含まれ、システムが正常に起動し動作するために必要な全てのファイルを保持している
 - ルートボリュームは、OS がインストールされる場所として特別な役割を持ち、一般的に変更することは少ない
 
 - データボリューム
- データボリュームは、追加のストレージスペースとして機能し、ユーザーデータ、アプリケーションデータ、バックアップなどを保存するために使用される
 - システムのルートボリュームとは別に設定され、データの保存や特定のアプリケーションの実行に特化していることが多い
 - データボリュームは柔軟性を提供し、ストレージ容量の拡張やバックアップ、特定のアプリケーションの需要に応じて容易に追加や交換ができる
 
 
ルートボリュームはシステムの起動と基本的な運用に必要な OS を含むボリュームであり、データボリュームは追加のデータを保存するために使用される追加のストレージスペースです。
両者はコンピュータやサーバーの運用において異なる役割を果たしています。
使い分けの理由
ルートボリュームとデータボリュームを分ける主な理由は、パフォーマンスの最適化、セキュリティの強化、そしてデータ管理の効率化にあります。
- パフォーマンスの最適化
- システムオペレーションとデータ操作を物理的に異なるドライブに分けることで、I/O(入出力)オペレーションが互いに干渉するのを避け、システムのパフォーマンスを向上させることができる
 - 例えば、データベースサーバーではデータの読み書きに高い I/O が発生するため、オペレーティングシステムを別のドライブに置くと、全体の性能を最適化できる
 
 - セキュリティの強化
- セキュリティ上の理由から、OSとユーザーデータを分離することは非常に重要
 - 万が一セキュリティ侵害が発生した場合に、データボリュームのセキュリティ設定を強化しやすくなり、必要ならデータボリュームのみを別の環境に移行することが可能になる
 
 - データ管理の効率化
- データバックアップやリカバリをより効率的に行うためにも、ルートボリュームとデータボリュームを分けることは有効
 - 例えば、システムに不具合が発生した場合に、ルートボリューム(OS)だけを再インストールまたは修復することができ、ユーザーデータは安全に保持できる
 
 - ストレージの最適化とコスト削減
- ストレージの種類によってコストとパフォーマンスが異なる
 - 重要なデータを高速な SSD に、一時的なファイルやバックアップなどを HDD に保存するなど、ストレージを賢く活用することができる
 
 
これらの理由から、特に大規模なシステムや、パフォーマンス、セキュリティ、データ管理が重要な場合には、ルートボリュームとデータボリュームを分けることが一般的に推奨されます。
システムのマウントについて
- オペレーティングシステム(OS)がストレージデバイスやファイルシステムにアクセスするために、それらをディレクトリに紐づけることを意味する
 - OSが特定のストレージを使えるように、それをシステムの一部として認識させる作業
 - USBドライブをPCに挿すと、それが自動的にマウントされ、ファイルマネージャーなどを通じて中のファイルにアクセスできるようになる
 - Linuxのようなシステムでは、
/etc/fstabファイルを編集することで、起動時に自動的に特定のデバイスをマウントするよう設定できる - コマンドラインからは、
mountコマンドを使って手動でマウントすることもできる 
EBS を使用してシステムをマウントする
概要がつかめてきたので、AWS 上でストレージデバイスにあたる Amazon Elastic Block Storage を使用し、
EC2 内に立てた Linux サーバにファイルシステムをマウントしてみます。
EC2 起動
EC2 インスタンスを起動します。
以下のパラメーターを入力し、インスタンスを起動してください。
- パラメータ
- 名前:任意のインスタンス名
 - インスタンスタイプ:'t2.micro'
 - キーペア:任意のキーペアを指定
 - ネットワーク設定
- ネットワーク:任意の VPC を設定
 - サブネット:任意のサブネットを設定
 - パブリック IP の自動割り当て:有効化
 - ファイアウォール:任意のセキュリティグループを指定(SSH 接続できるようにセキュリティグループを作成する)
 
 
 
EBS 作成
以下のコマンドを実行し、データボリュームを作成します。
# データボリュームの作成
aws ec2 create-volume \
    --volume-type gp3 \
    --size 1 \
    --availability-zone ap-northeast-1a
起動した EC2 インスタンスに作成したデータボリュームをアタッチします。
# データボリュームのアタッチ
aws ec2 attach-volume \
    --volume-id $TARGET_EC2_CREATE_VOLUME_ID \
    --instance-id $TARGET_EC2_INSTANCE_ID \
    --device /dev/xvdf
SSH 接続
次に、ローカル環境で SSH 接続を行います。
# SSH 接続実行
ssh -i ~/.ssh/"キー名".pem ec2-user@0.0.0.0
EBS マウント
次に、データボリューム'/dev/xvdf'に XFS 形式のファイルシステムを作成します。
sudo mkfs -t xfs /dev/xvdf
次に、マウントポイント(マウント用ディレクトリ)を作成します。
sudo mkdir -p /mnt/:wq
次に、blkidコマンドを使用して UUID を確認します。
現在のデバイス名/dev/xvdfでもマウントできますが、インスタンスの再起動を実行するとマウントが外れるため
UUID を使用してマウントを行います。
sudo blkid
出力:
/dev/xvda128: SEC_TYPE="msdos" UUID="9AA3-6C3B" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="32beaf50-f049-4a2e-9404-fb52dce87853"
/dev/xvda127: PARTLABEL="BIOS Boot Partition" PARTUUID="f21c4b92-7bdc-4d4e-be64-fdb0cedf3e5a"
/dev/xvda1: LABEL="/" UUID="f3225129-f7e3-4da4-90f7-5035c457993d" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux" PARTUUID="7198aae6-3d36-4761-a593-b74880056701"
/dev/xvdf: UUID="aebf131c-6957-451e-8d34-ec978d9581ae" TYPE="xfs"
次に、vim などのテキストエディタを使用して、/etc/fstabファイルを開きます。
sudo vim /etc/fstab
次に、指定されたマウントポイントにデバイスをマウントするため、
/etc/fstabに以下の内容を編集します。
UUID=aebf131c-6957-451e-8d34-ec978d9581ae  /data_volume  xfs  defaults,nofail  0  2

UUIDaebf131c-6957-451e-8d34-ec978d9581aeを使用して、デバイスをマウントポイント/dataにマウントし、
xfs ファイルシステムを使用します。
defaultsフラグとnofailフラグを使用し、デバイスが存在しない場合でもブートを続行します。
dumpフラグを使用し、ファイルシステムがダンプされないように 0 を指定します。
ルート以外のデバイスであることを示すように 2 を指定します。
マウント実行
最後に、以下のコマンドを実行してデバイスをアンマウントし、すべてのファイルシステムを/etc/fstabにマウントします。
エラーがなければ、ファイルシステムは再起動後に自動的にマウントされます。
sudo umount /data
sudo mount -a
最後に
mountコマンドだけでは再起動後にマウントが外れるのを初めて知ったので、勉強になりました。
Linux の仕様や中身についてももっと詳しくなりたいです。
参考文献






