ファイルシステムの特徴と選定 ─ 構築の入口の新卒未経験学生向け 学習支援スペシャル編

-- Views

May 13, 26

スライド概要

profile-image

何卒よろしくお願い申し上げます。 一流のIT研修講師を目指し、日々研鑽を続けております。 本資料は外部公開用としてご提供するものです。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

LinuC LEVEL 2 / 102試験範囲|30分前半 5章 5.5 - 5.8 ファイルシステム の特徴と選定 ─ 構築の入口の新卒未経験学生向け 学習支援スペシャル編 ext4 / xfs / btrfs の特徴と選定 パーティション → mkfs → mount → fstab の流れ fdisk / parted / mkfs.ext4 / mount / fstab Yukiko Ishiguro Filesystem 公式: LinuC試験範囲 https://linuc.org/ Layer Foundation

2.

AGENDA / 30分前半の流れ 本セッションのゴール 「なぜそのファイルシステムを選ぶのか」を、原理から説明できるようになる 01 なぜFSが必要か Why ブロックデバイスの「生」をユーザー視点で扱える形に変える層が必要 ── これがFS 02 ext4 / xfs / btrfs の特徴 What ジャーナリング・スケーラビリティ・CoW ── 3つの代表FSの設計思想と適用領域 03 How 04 Verify 実装の4ステップ fdisk/parted で区画 → mkfs.* でFS作成 → mount で接続 → fstab で永続化 確認・障害復旧の入り口 df / lsblk / blkid / fsck ── 「いま何が起きているか」を観測する手段 LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分 02 / 22

3.

§5.5 INTRO 03 / 22 なぜファイルシステムが必要か ストレージは「番地付きブロックの集まり」── 名前で扱える層が必要 USER / アプリケーション層 「report.pdf を開く」 ファイルシステム層 (ext4/xfs/btrfs) ファイル名 inode ブロック番号 の変換 ブロックデバイス層 (/dev/sda1 等) セクタ・ブロックの集合(番地のみ) ▷ 原理原則 [理系] ファイルシステムの本質は「変換テーブル」。ファイル名 → inode番号 → データブロック群、を辞書引きで解決する仕組み。 この「辞書」が壊れると、ブロック自体が無事でもデータは見えなくなる ── これがFS破損の正体。fsckはこの辞書を整合性チェック・修復する。 LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

4.

SECTION 5.5 5.5 ファイルシステムの種類と特徴 EXT4 / XFS / BTRFS なぜ 3つあるのか ── 設計思想と適用領域を理解する 04 / 22

5.

§5.5 ファイルシステムの種類 05 / 22 ext4 ── Linux標準のジャーナリングFS 「迷ったらext4」と言われる定番。安定・互換性・運用ノウハウ量で勝る ● 系譜 ext2(1993, 非ジャーナル)→ ext3(2001, ジャーナル追加)→ ext4(2008, エクステント・大容量対応) 最大サイズ 1EiB / 16TB ファイルシステム最大1エクサバイト、ファイル最大16TB(実用上は事実上無制限) ジャーナリング メタデータ + 任意でデータ 書込み前にジャーナル領域へ操作記録 → 障害時もFS整合性を回復可能(fsck高速化) エクステント 連続ブロック範囲管理 ブロック1個ずつ管理する旧方式から、「N〜M番」と範囲指定に。フラグメンテーション抑制・大容量に強い ▷ 適用領域: 汎用サーバ / デスクトップ / 既存システム移行先 / 「とりあえず」の選択 Debian/Ubuntu系の既定。RHEL系では7まで既定だった(8以降xfsへ) LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

6.

§5.5 ファイルシステムの種類 06 / 22 xfs ── 大容量・並列性能特化のジャーナリングFS RHEL系 7以降の既定。エンタープライズのDB・大量データに強い ● 系譜 SGI が IRIX 向けに開発(1993)→ Linuxへ移植(2001)→ RHEL 7 で既定FS に採用(2014) 最大サイズ 8EiB / 8EiB FS・ファイル共に8エクサバイト。ext4より2桁大きく、ペタバイト級ストレージで採用 並列I/Oに強い アロケーショングループ構造 ストレージを複数のAG(独立した管理領域)に分割 → 同時I/Oを並列化。マルチコア・SSDで真価 動的inode割当 縮小不可・拡張のみ inodeを動的確保(ext4は事前固定)。xfs_growfsで拡張可、ただし縮小は不可能(要再作成) ▷ 適用領域: 大容量データウェアハウス / DB / 高並列I/O / RHEL系本番環境 AlmaLinux/Rocky/CentOS Stream の既定。「縮小不可」を運用設計で意識する必要あり LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

7.

§5.5 ファイルシステムの種類 07 / 22 btrfs ── CoW + スナップショット + 統合RAID 「次世代Linux FS」── 機能豊富、SUSE系の既定、用途次第で強力 ● 系譜 Oracle 主導で開発開始(2007)→ Linux 3.0 でstable宣言(2011)→ SUSE/openSUSE で既定採用 CoW (Copy-on-Write) 書込み時に新ブロックへ複製 上書きせず新領域に書き、ポインタを切替。整合性保証+スナップショット容易(差分のみ保存) スナップショット 瞬時のFSコピー btrfs subvolume snapshot で論理スナップ即作成。バックアップ・更新前の安全弁として運用 RAID統合 FSレイヤーでRAID 0/1/10 mdadm/LVMに頼らずFS層で冗長化・分散。デバイス追加削除がコマンド一発(btrfs device add/remove) ▷ 適用領域: スナップショット運用 / コンテナホスト / バックアップサーバ / SUSE環境 RAID 5/6は2024年時点でも実験的扱い。本番ではRAID 1/10に限定推奨 LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

8.

§5.5 ファイルシステムの種類 08 / 22 3つのFS 比較表 ── 選定のための一枚 「どれを使うか」迷ったら、要件側から逆引きで選ぶ 観点 ext4 xfs btrfs 登場年 2008 1993(IRIX) 2007 ジャーナル ○ メタ+任意でデータ ○ メタデータ × (CoWで実現) 最大FSサイズ 1 EiB 8 EiB 16 EiB 拡張縮小 拡張○ 縮小○ 拡張○ 縮小× 拡張○ 縮小○ スナップショット × (LVM併用) × (LVM併用) ○ 標準機能 CoW × × ○ RAID内蔵 × × ○ (1/10は安定) 既定の代表ディストリ Debian/Ubuntu RHEL/Alma/Rocky openSUSE ▷ 選定: 迷ったらext4/RHEL系本番ならxfs/スナップショット運用ならbtrfs LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

9.

SECTION 5.6 5.6 ファイルシステムの作成 (mkfs) MKFS FAMILY パーティション → FS変換の儀式 ── 作ったら戻せないことを意識する 09 / 22

10.

§5.6 mkfs ファミリ 10 / 22 mkfs ── 「番地のブロック」をFSとして使える形に 実体は mkfs.<type> のラッパー。スーパーブロック・inodeテーブルを書き込む (1) 区画あり (2) mkfs.ext4 /dev/sdb1 (3) FSとして使える mkfs.ext4 /dev/sdb1 /dev/sdb1 (ext4) FS情報なし スーパーブロック mount可能な状態 =「未整地の土地」 + inodeテーブル書込み UUID付与済み ● mkfs の実体 ── FS別の専用コマンドを呼ぶラッパー $ mkfs -t ext4 /dev/sdb1 → mkfs.ext4 を呼ぶ $ mkfs -t xfs /dev/sdb1 → mkfs.xfs を呼ぶ $ mkfs -t btrfs /dev/sdb1 → mkfs.btrfs を呼ぶ ▷ 原理: mkfs はブロックデバイスにスーパーブロック・inodeテーブル等のFSメタデータを書く。既存データは破壊される(=フォーマット) LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

11.

§5.6 mkfs ファミリ 11 / 22 mkfs.ext4 / mkfs.xfs ── 実践オプション 現場でよく使う3つだけ覚える ── ラベル / UUID / ブロックサイズ mkfs.ext4 mkfs.xfs Debian/Ubuntu系の定番フォーマット RHEL/Alma/Rocky系の定番フォーマット -L LABEL ラベル付与(fstab で LABEL= 指定可) -L LABEL ラベル付与(最大12文字) -U UUID UUID明示指定(通常は自動生成) -b size=4096 ブロックサイズ(既定4096) -b 4096 ブロックサイズ指定(既定4096) -d agcount=N アロケーショングループ数(並列性能) -m 1 予約ブロック率1%(root用、既定5%) -i size=512 inodeサイズ(拡張属性用に大きく) -T largefile 大ファイル向け inode少なめ設定 -f 強制実行 -F 強制実行(既にFSがあっても上書き) -m crc=1 CRC32整合性チェック有効(既定) $ mkfs.ext4 -L data -b 4096 /dev/sdb1 $ mkfs.xfs -L data -i size=512 /dev/sdb1 既存パーティションの中身は完全消失する。実行前に必ず df, lsblk, blkid で対象を確認 ── 1文字違いで本番破壊 LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

12.

SECTION 5.7 5.7 マウントと永続化 MOUNT & FSTAB 「FSをディレクトリツリーに接続する」 ── マウントの仕組み 12 / 22

13.

§5.7 マウント 13 / 22 mount ── 「FSをディレクトリツリーに接続する」 Unixの世界では、ストレージは「ディレクトリのどこかに生える」もの ● マウント前: /dev/sdb1 はブロックデバイスとしてだけ存在 / (ルート) /dev/sdb1 (ext4, 未マウント) ├── bin/ [ doc1.txt ] ├── etc/ [ doc2.txt ] ├── home/ [ photos/ ] ← 空ディレクトリ └── mnt/ → アクセス手段なし $ mount /dev/sdb1 /mnt ● マウント後: /mnt 配下が sdb1 の中身に切り替わる / (ルート) ├── bin/ ├── etc/ └── mnt/ ├── home/ ← /dev/sdb1 が接続され、中身が見える ├── doc1.txt ├── doc2.txt (sdb1 のファイル) └── photos/ ▷ 原理: カーネルのVFSが「マウントポイント」を切替え、以後そのパスへのI/Oを当該FSドライバへ転送する LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

14.
[beta]
§5.7 マウント

14 / 22

mount / umount ── 実践コマンド
覚える基本構文と現場で使う主要オプション

$ mount
# 例:

[-t TYPE]

[-o OPTIONS]

<デバイス>

<マウントポイント>

$ mount -t ext4 -o rw,noatime /dev/sdb1 /mnt/data

● よく使う -o オプション

● 確認・解除コマンド

rw / ro

読書可 / 読取専用

$ mount

現在のマウント一覧表示

noatime

アクセス時刻を更新しない(SSD推奨・性能向上)

$ mount | grep sdb

特定デバイスのみ

nodev

デバイスファイル無効化(セキュリティ)

$ findmnt

ツリー形式でマウント一覧

nosuid

SUID/SGID無効化(セキュリティ)

$ df -h

FS使用量+マウントポイント

noexec

実行ファイル禁止(/tmp等で使用)

$ lsblk

ブロックデバイス+マウント先

defaults

rw,suid,dev,exec,auto,nouser,async の組合せ

$ umount /mnt

マウント解除

remount

マウント解除せず設定変更

$ umount -l /mnt

遅延解除(busy時)

▷ umount時 "target is busy" → lsof /mnt や fuser -m /mnt で掴んでいるプロセスを特定 → 終了後 umount
LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

15.

§5.7 マウント 15 / 22 /etc/fstab ── 再起動後もマウントを自動復元する 「次回起動時にもこのデバイスをここに繋いで」と OS に伝える宣言ファイル ● fstab の1行 = 6フィールド構造 UUID=abc-123 /data ext4 defaults,noatime デバイス指定 ① ② ③ UUID=xxx / LABEL=xxx / /dev/sdb1 のいずれか 0 マウントオプション ④ defaults / noatime / nofail など UUID推奨(デバイス名は順序変動で変わる) mount -o と同じ書式(カンマ区切り) マウントポイント dump /data / /home / /var/log など ⑤ 0 (使わない) / 1 (バックアップ対象) 事前にディレクトリ作成が必要 現代ではほぼ 0 でOK FSタイプ fsck順序 ext4 / xfs / btrfs / swap / nfs など mkfsで作ったFS種別と一致させる LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分 2 ⑥ 0 (チェック無) / 1 (/) / 2 (その他) 起動時の整合性チェック順

16.

§5.7 マウント 16 / 22 fstab 実例 & 安全な編集フロー fstab を壊すと起動不能 ── 検証してから再起動する ● 実例: /etc/fstab の典型エントリ # <device> <mount> <type> <options> <dump> <fsck> UUID=aaaa-bbbb / xfs defaults 0 1 UUID=cccc-dddd /home ext4 defaults,noatime 0 2 UUID=eeee-ffff none swap sw 0 0 /dev/sr0 /media/cdrom iso9660 ro,user,noauto 0 0 nas.local:/share /mnt/nas 0 0 nfs rw,nofail ● 安全な編集フロー(再起動前に必ず実施) 1 cp /etc/fstab /etc/fstab.bak バックアップ取得(鉄則) 2 編集(UUIDを blkid で確認しコピペ) デバイス名でなくUUID推奨 3 mount -a fstab全体を試走 ── エラーがあれば指摘 4 findmnt --verify fstab構文+整合性をチェック 5 問題なければ再起動 / 問題あれば fstab.bak を戻す 再起動で確認 LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

17.

SECTION 5.8 5.8 パーティション編集 FDISK / PARTED ディスクという土地を区画整理する ── すべての出発点 17 / 22

18.

§5.8 パーティション編集 18 / 22 MBR と GPT ── 2つのパーティションテーブル形式 ディスクサイズと用途で使い分け ── これを誤ると後で困る MBR (Master Boot Record) GPT (GUID Partition Table) 1983年〜の旧式 2000年〜の現代規格 ● 最大容量 2 TiB まで ● 最大容量 9.4 ZB(事実上無制限) ● 最大パーティション プライマリ4個まで(拡張で論理拡張可) ● 最大パーティション 128個(既定)/拡張不要 ● BIOSとの相性 ○ レガシーBIOS対応 ● UEFIとの相性 ◎ UEFI標準 ● ブートコード MBRに直接書込み(446バイト) ● ブートコード EFIシステムパーティション(ESP)に分離 ● ツール fdisk が伝統的 ● ツール parted / gdisk / fdisk(新版) ● 用途 小容量HDD / 古いシステム / 互換性重視 ● 用途 現代の大容量SSD / 本番サーバ / UEFI機 $ fdisk -l /dev/sda $ parted /dev/sda print ▷ 現代のサーバ・SSD は GPT が標準。2TiB超では GPT 必須。新規構築なら基本 GPT を選ぶ LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

19.

§5.8 パーティション編集 19 / 22 fdisk ── MBR向け対話型パーティション編集 対話モードのキー操作を覚える ── 最低限の n / p / w ● fdisk 対話モードの主要キー m ヘルプ(迷ったら) p 現在のパーティションテーブル表示 n 新規パーティション作成 d パーティション削除 ● 実行例: 新規パーティション作成 $ sudo fdisk /dev/sdb Command (m for help): p → 現状確認 Command (m for help): n Partition type: p (primary) Partition number: 1 First sector: [Enter] t パーティションタイプ変更 Last sector: +10G ← 10GB分作成 Command (m for help): w l タイプ一覧表示 w 変更を書き込んで終了(commit) q 変更を捨てて終了 → 書込み確定 $ partprobe /dev/sdb $ lsblk ← 反映 ← 確認 w するまで変更はディスクに書かれない/間違えたら q で全部破棄。GPTディスクには fdisk より parted 推奨 LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分

20.

§5.8 パーティション編集 20 / 22 parted ── GPT/MBR両対応の現代的ツール コマンドラインで非対話実行も可能 ── 自動化スクリプトに組込みやすい ● parted の主要サブコマンド print パーティションテーブル表示 mklabel TYPE ● 実行例: GPT作成 + パーティション $ sudo parted /dev/sdb (parted) print → 現状確認 パーティションテーブル作成(gpt/msdos) mkpart NAME FS START END (parted) mklabel gpt → GPTテーブル作成 パーティション作成 rm N (parted) mkpart data ext4 0% 50% パーティションN削除 resizepart N END パーティションサイズ変更 set N FLAG on/off フラグ設定(boot/lvm/raid等) quit 終了(変更は即時反映) → 先頭50%にパーティション作成 (parted) mkpart backup ext4 50% 100% (parted) print (parted) quit $ partprobe /dev/sdb $ lsblk -f ▷ parted は fdisk と違い、サブコマンド実行時点で即書込み(commit不要)。慎重に LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分 ← FS含めて確認

21.

STORAGE PROVISIONING FLOW 21 / 22 全体フロー ── 「新ディスクを使える状態にする」4ステップ 5.5〜5.8で学んだコマンドを順序で繋ぐと、こうなる lsblk ① 現状確認 パーティション作成 $ parted /dev/sdb mkpart data 0% 100% $ mkfs.ext4 -L data /dev/sdb1 ファイルシステム作成 ext4 / xfs / btrfs から選び、ラベル等を付与 mount + fstab ④ $ parted /dev/sdb mklabel gpt GPTテーブル作成 → 必要数のパーティションを切る mkfs.<type> ③ $ blkid /dev/sdb があるか確認 ── 既存FSが無いことも parted / fdisk ② $ lsblk マウントと永続化 テストマウント → 動作確認 → fstabに登録 LinuCレベル2 5章 5.5-5.8|ファイルシステム前半30分 $ mount /dev/sdb1 /data $ echo 'UUID=... /data ext4 defaults 0 2' >> /etc/fstab

22.

22 / 22 SUMMARY まとめ ── 30分前半で押さえたこと 「ストレージを使える状態にする」一連の流れと、その背後にある原理 5.5 5.6 5.7 5.8 FS3選 ext4 = 汎用安定 / xfs = 大容量並列 / btrfs = CoW+スナップ mkfs FSメタデータをデバイスに書込む。ラッパー mkfs.<type> mount + fstab VFS経由でディレクトリツリーに接続。fstabで永続化 fdisk/parted MBR(2TiB) vs GPT(現代標準)。partedはGPT/非対話可 ● 参考資料・公式ドキュメント ▷ 小豆本 LinuCレベル2 試験対策本(5章 5.5-5.8 該当範囲) ▷ LPI-Japan Linuxサーバー構築標準教科書 https://linuc.org/textbooks/server/ ▷ LinuC公式 試験範囲一覧 https://linuc.org/linuc2/range/ ▷ man pages $ man mkfs.ext4 / man mount / man fstab / man parted / man fdisk