ファイルシステムと周辺用語の理解
概要
普段、様々な場面でファイルを扱うことがあると思いますが、それを管理しているのがファイルシステムについて説明します。この記事ではファイルシステムとストレージについて整理し、AWS EBSのボリューム拡張の方法を解説します。EBSで容量を変更すれば終わりではなく、ちょっとした手間が発生するのでそれを見ていきましょう!
ファイルシステム
ファイルシステムとはコンピュータのストレージデバイス(ハードディスク、SSD、USBメモリなど)にデータを効率的に保存、管理、アクセスするための方法や構造のことです。わかりやすく言うと、ファイルやフォルダ(ディレクトリ)の整理整頓をする仕組みです。
ファイルシステムはデータの保存と管理を行うソフトウェア層であり、ファイルの作成、削除、移動、名前変更などの操作をサポートします。また、ファイルをフォルダで階層的に整理し、効率的なデータ管理を実現します。さらに、ファイルシステムはデータの読み書き操作を効率的に行うための仕組みを提供し、必要なデータを迅速に見つける手段を提供します。データ保護の観点では、アクセス権限を設定して不正アクセスを防ぎ、データの整合性を保つための機能も備えています。
例えばファイルシステムを図書館の管理に例えると分かりやすいです。この場合、本(ファイル)は実際に保存されたデータを、本棚(フォルダ)は本を整理するための分類、目次(インデックス)は本の場所を見つけるためのリストを指します。図書館(ストレージデバイス)の中の本や本棚をきちんと管理し、利用者(ユーザー)が簡単に本を見つけられるようにするのがファイルシステムの役割です。
OS | ファイルシステム | 特徴 |
---|---|---|
Linux | ext4 | 主にLinuxディストリビューションで使用される。ジャーナリング機能を持ち、高いパフォーマンスと信頼性を提供。 |
XFS | 大規模なファイルシステムに適しており、優れたスケーラビリティとパフォーマンスを提供。 | |
Btrfs | 大規模なファイルシステムに適しており、優れたスケーラビリティとパフォーマンスを提供。高度な機能(スナップショット、自己修復、圧縮など)を持ち、データの整合性と管理の向上を目指す。 | |
ZFS | 高度なデータ保護機能(スナップショット、RAID-Z、データ圧縮など)を持つ。 | |
Windows | NTFS (New Technology File System) | 標準的なWindowsファイルシステム。セキュリティ機能やファイル圧縮、クォータ管理などをサポート。 |
FAT32 (File Allocation Table) | 古いファイルシステムで、互換性が高いが、4GB以上のファイルや2TB以上のパーティションをサポートしない。 | |
exFAT (Extended File Allocation Table) | FAT32の制限を克服したファイルシステムで、大容量ドライブや大きなファイルをサポート。 | |
macOS | APFS (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のストレージについてはまた別記事で解説していこうと思います!