AWS EBSボリューム拡張とファイルシステムの概要を学ぼう!

eyecatch-aws-ebs-file-system
目次

ファイルシステムと周辺用語の理解

概要

普段、様々な場面でファイルを扱うことがあると思いますが、それを管理しているのがファイルシステムについて説明します。この記事ではファイルシステムとストレージについて整理し、AWS EBSのボリューム拡張の方法を解説します。EBSで容量を変更すれば終わりではなく、ちょっとした手間が発生するのでそれを見ていきましょう!

ファイルシステム

ファイルシステムとはコンピュータのストレージデバイス(ハードディスク、SSD、USBメモリなど)にデータを効率的に保存、管理、アクセスするための方法や構造のことです。わかりやすく言うと、ファイルやフォルダ(ディレクトリ)の整理整頓をする仕組みです。

ファイルシステムはデータの保存と管理を行うソフトウェア層であり、ファイルの作成、削除、移動、名前変更などの操作をサポートします。また、ファイルをフォルダで階層的に整理し、効率的なデータ管理を実現します。さらに、ファイルシステムはデータの読み書き操作を効率的に行うための仕組みを提供し、必要なデータを迅速に見つける手段を提供します。データ保護の観点では、アクセス権限を設定して不正アクセスを防ぎ、データの整合性を保つための機能も備えています。

例えばファイルシステムを図書館の管理に例えると分かりやすいです。この場合、本(ファイル)は実際に保存されたデータを、本棚(フォルダ)は本を整理するための分類、目次(インデックス)は本の場所を見つけるためのリストを指します。図書館(ストレージデバイス)の中の本や本棚をきちんと管理し、利用者(ユーザー)が簡単に本を見つけられるようにするのがファイルシステムの役割です。

OSファイルシステム特徴
Linuxext4主にLinuxディストリビューションで使用される。ジャーナリング機能を持ち、高いパフォーマンスと信頼性を提供。
XFS大規模なファイルシステムに適しており、優れたスケーラビリティとパフォーマンスを提供。
Btrfs大規模なファイルシステムに適しており、優れたスケーラビリティとパフォーマンスを提供。高度な機能(スナップショット、自己修復、圧縮など)を持ち、データの整合性と管理の向上を目指す。
ZFS高度なデータ保護機能(スナップショット、RAID-Z、データ圧縮など)を持つ。
WindowsNTFS (New Technology File System)標準的なWindowsファイルシステム。セキュリティ機能やファイル圧縮、クォータ管理などをサポート。
FAT32 (File Allocation Table)古いファイルシステムで、互換性が高いが、4GB以上のファイルや2TB以上のパーティションをサポートしない。
exFAT (Extended File Allocation Table)FAT32の制限を克服したファイルシステムで、大容量ドライブや大きなファイルをサポート。
macOSAPFS (Apple File System)高速なパフォーマンスとデータの整合性を重視。スナップショットや暗号化、クラッシュプロテクションを提供。
HFS+ (Hierarchical File System Plus)APFSの前身で、macOS High Sierra以前の標準ファイルシステム。ジャーナリングとファイル圧縮をサポート。

ストレージ(アーキテクチャ観点)

アーキテクチャ観点でストレージをとらえた場合、データの管理、保存、およびアクセスの方法に基づいた分類を指すことが多いと思います。

今回扱うAWS EBS(Amazon Elastic Block Store)は、Amazon Web Servicesが提供するブロックレベルのストレージサービスです。EC2インスタンスにアタッチして使用し、データの永続性と高可用性を確保します。EBSはスナップショットを活用し、データのバックアップやリカバリーを支援します。異なるパフォーマンスオプション(プロビジョンドIOPS、汎用SSD、Cold HDD)を提供し、セキュリティ対策としてスナップショットの暗号化も可能です。

特徴データ構造用途AWSのサービス
ブロック
ストレージ
データはブロック単位で保存され、各ブロックにはユニークなアドレスがあり、必要に応じて個々のブロックに直接アクセス可能。データベース、仮想マシンのディスクストレージ、トランザクション処理システムなど。Amazon EBS
オブジェクト
ストレージ
データは「オブジェクト」として保存し、各オブジェクトはデータ自体とメタデータ、ユニークな識別子を持つ。
スケーラビリティ: 大規模なデータセットの保存に適し、地理的に分散されたデータセンターにまたがる。
バックアップ、アーカイブ、大規模なデータ分析、ウェブアプリケーションのコンテンツ配信など。Amazon S3
ファイル
ストレージ
データはファイルとして保存され、ディレクトリ構造で管理。共有ファイルシステム、ホームディレクトリ、メディアストリーミングなど。Amazon EFS

ストレージ(デバイス観点)

デバイス視点でストレージをとらえた場合、データを物理的に保存するためのハードウェアや仮想環境を指すことが多いと思います。

  • ハードディスクドライブ(HDD): 機械的にデータを読み書きするストレージデバイス。
  • ソリッドステートドライブ(SSD): フラッシュメモリを使用してデータを保存する、高速なストレージデバイス。
  • ネットワークアタッチトストレージ(NAS): ネットワークを介してアクセスできる共有ストレージデバイス。
  • ストレージエリアネットワーク(SAN): 高速ネットワークを介して接続された専用ストレージ。

3つの概念のまとめ

これまでに説明した3つの概念はLinuxOSのシステムアーキテクチャで理解することができます。こちらのサイトにあるアーキテクチャ図を下記に引用します。図の真ん中あたりにある「ファイルシステム」、「ブロック型デバイスドライバ」、「ディスクやCD」に注目してみると物理層とカーネルの関係が理解できるのではないかと思います。AWS EC2のlinuxOSのボリュームを拡張する場合、このアーキテクチャに従ってブロックストレージであるEBSを拡張することになるのだと理解しています。

Atmark Techno, 組み込みLinuxシステムとは

AWS EBSボリュームの拡張

前提

Cloud9(ubuntu, amazon linux 2023)

参考にした手順:AWS公式

ボリューム確認

df -Tコマンドを実行し/dev/rootの現在のデバイス容量を確認することができます。ちなみにdev/rootはLinuxシステムにおけるルートファイルシステムで、linuxのファイルやディレクトリがここに保存されます。

3行目を確認すると、/dev/rootがTypeでファイルシステムがext4、Useで使用容量が77%、Mounted onでルートにマウントされていることがわかります。この使用容量を下げ、空き容量に余裕を持たせたいと思います。

df -T
Filesystem     Type  1K-blocks    Used Available Use% Mounted on
/dev/root      ext4    9974088 7676596   2281108  78% /
tmpfs          tmpfs    486020       0    486020   0% /dev/shm
tmpfs          tmpfs    194408     912    193496   1% /run
tmpfs          tmpfs      5120       0      5120   0% /run/lock
/dev/xvda15    vfat     106832    6186    100646   6% /boot/efi
tmpfs          tmpfs     97204       4     97200   1% /run/user/1000

パーティション確認

続いてパーティションの確認をします。lsblkコマンドは現在利用できるブロックデバイスを一覧表示します。詳しい仕様はこちらのブログを参考にしてみてください。

15行目を見ると/dev/xvda というデバイスがあり、これが物理ディスクを表しています。その下にはパーティションが表示されており、それぞれのパーティションがどのようにマウントされているかが示されています。例えば、/dev/xvda1 はルートファイルシステムとしてマウントされており、/ というマウントポイントが示されています。今回はこの/dev/xvda1の容量を拡大することが目標です。

lsblk
NAME     MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0      7:0    0  25.2M  1 loop /snap/amazon-ssm-agent/7993
loop1      7:1    0 104.2M  1 loop /snap/core/17200
loop2      7:2    0  55.7M  1 loop /snap/core18/2823
loop3      7:3    0  55.7M  1 loop /snap/core18/2829
loop4      7:4    0  63.9M  1 loop /snap/core20/2318
loop5      7:5    0  74.2M  1 loop /snap/core22/1380
loop6      7:6    0  61.9M  1 loop /snap/go/10630
loop7      7:7    0    87M  1 loop /snap/lxd/28373
loop8      7:8    0  38.8M  1 loop /snap/snapd/21759
loop9      7:9    0   4.2M  1 loop /snap/tree/18
loop10     7:10   0  61.9M  1 loop /snap/go/10660
xvda     202:0    0    10G  0 disk 
├─xvda1  202:1    0   9.9G  0 part /
├─xvda14 202:14   0     4M  0 part 
└─xvda15 202:15   0   106M  0 part /boot/efi

EBSボリュームの拡張

AWSマネジメントコンソールでの容量変更はそんなに難しくはないのでこちらを参考にしてみてください。

パーティションの再確認

再度lsblkコマンドを実行すると14行目で容量が50Gになっていることがわかります。しかし、15行目のxvda1は9.9Gのままですね。次は拡張した容量をパーティションに割り当てていきます。

lsblk
NAME     MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0      7:0    0  25.2M  1 loop /snap/amazon-ssm-agent/7993
loop1      7:1    0 104.2M  1 loop /snap/core/17200
loop2      7:2    0  55.7M  1 loop /snap/core18/2823
loop3      7:3    0  55.7M  1 loop /snap/core18/2829
loop4      7:4    0  63.9M  1 loop /snap/core20/2318
loop5      7:5    0  74.2M  1 loop /snap/core22/1380
loop6      7:6    0  61.9M  1 loop /snap/go/10630
loop7      7:7    0    87M  1 loop /snap/lxd/28373
loop8      7:8    0  38.8M  1 loop /snap/snapd/21759
loop9      7:9    0   4.2M  1 loop /snap/tree/18
loop10     7:10   0  61.9M  1 loop /snap/go/10660
xvda     202:0    0    50G  0 disk 
├─xvda1  202:1    0   9.9G  0 part /
├─xvda14 202:14   0     4M  0 part 
└─xvda15 202:15   0   106M  0 part /boot/efi

パーティションへの容量拡張と確認

1行目のgrowpartコマンドでパーティションに容量を割り当てます。2行目のようにCHANGEDが表示されていれば成功です。

sudo growpart /dev/xvda 1
CHANGED: partition=1 start=227328 old: size=20744159 end=20971487 new: size=104630239 end=104857567

lsblkコマンドで確認しましょう。15行目を見てみるとこれまで9.9Gだった表示が49.9Gに変化していることがわかります。

lsblk
NAME     MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0      7:0    0  25.2M  1 loop /snap/amazon-ssm-agent/7993
loop1      7:1    0 104.2M  1 loop /snap/core/17200
loop2      7:2    0  55.7M  1 loop /snap/core18/2823
loop3      7:3    0  55.7M  1 loop /snap/core18/2829
loop4      7:4    0  63.9M  1 loop /snap/core20/2318
loop5      7:5    0  74.2M  1 loop /snap/core22/1380
loop6      7:6    0  61.9M  1 loop /snap/go/10630
loop7      7:7    0    87M  1 loop /snap/lxd/28373
loop8      7:8    0  38.8M  1 loop /snap/snapd/21759
loop9      7:9    0   4.2M  1 loop /snap/tree/18
loop10     7:10   0  61.9M  1 loop /snap/go/10660
xvda     202:0    0    50G  0 disk 
├─xvda1  202:1    0  49.9G  0 part /
├─xvda14 202:14   0     4M  0 part 
└─xvda15 202:15   0   106M  0 part /boot/efi

またdf -T/dev/rootの現在のデバイス容量を確認します。3行目を見るとまだ変化がありません。最後にファイルシステムの容量を上げる設定を行います。

df -T
Filesystem     Type  1K-blocks    Used Available Use% Mounted on
/dev/root      ext4    9974088 7676612   2281092  78% /
tmpfs          tmpfs    486020       0    486020   0% /dev/shm
tmpfs          tmpfs    194408     904    193504   1% /run
tmpfs          tmpfs      5120       0      5120   0% /run/lock
/dev/xvda15    vfat     106832    6186    100646   6% /boot/efi
tmpfs          tmpfs     97204       4     97200   1% /run/user/1000

ファイルシステム容量拡張と確認

1行目のsudo resize2fs /dev/rootコマンドでファイルシステムを拡張します。ここで指定する名前は直前のコードの3行目の/dev/rootにあるように拡張したい対象のファイルシステム名を指定します。

sudo resize2fs /dev/root
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 7
The filesystem on /dev/root is now 13078779 (4k) blocks long.

最後にdf -Tでボリューム拡張ができているかを確認します。3行目の/dev/rootで空き容量(Available)が約42G、使用容量(Use)が16%になり容量が拡張してされていることが確認できました!

df -T
Filesystem     Type  1K-blocks    Used Available Use% Mounted on
/dev/root      ext4   50620216 7676628  42927204  16% /
tmpfs          tmpfs    486020       0    486020   0% /dev/shm
tmpfs          tmpfs    194408     904    193504   1% /run
tmpfs          tmpfs      5120       0      5120   0% /run/lock
/dev/xvda15    vfat     106832    6186    100646   6% /boot/efi
tmpfs          tmpfs     97204       4     97200   1% /run/user/1000

補足:ファイルシステムがXFSの場合

df -Tでファイルシステムを確認した際、TypeがXFSの場合はxfs_growfsをお試しください。もしコマンドがインストールされていなければ1行目を実行してから2~3行目を実行してください。

sudo apt install xfsprogs
xfs_growfs -d /dev/root
df -T

まとめ

本記事ではファイルシステムの概要とEBSのボリューム拡張について解説しました。EBSのボリューム拡張をしたことはあってもブロックストレージってなんだっけという疑問を持たれていた方もストレージについてすっきり理解できたのではないでしょうか?Linuxのファイルシステムの詳細やAWSのストレージについてはまた別記事で解説していこうと思います!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Hack Luck Labの管理人hakula(ハクラ)です。2012年にSIerに新卒入社し、SE、新規事業、情シスを担当。その後、ITコンサルを経て、現在はバックエンドエンジニア。過去にはC#、SQL Server、JavaScriptで開発を行い、現在はPython、Rest Framework、Postgresql、Linux、AWSなどを使用しています。ノーコードツールやDX関連も興味あり。「技術は価値を生むために使う」ことが信条で、顧客や組織への貢献を重視しています。

目次