パーティションテーブルの管理:fdisk、gdisk、parted

ディスクをパーティションに分割するには、パーティションテーブルの形式に応じたツールを使います。

ツール対応するパーティションテーブル形式特徴
fdiskMBR・GPT対話的な操作で、伝統的に広く使われている
gdiskGPT専用fdiskのGPT版という位置づけ
partedMBR・GPTの両方対話的にも、コマンドライン一発(非対話)でも操作できる
fdisk /dev/sdb        # 対話的にパーティションを操作する(サブコマンドn=新規作成、d=削除、p=表示、w=書き込み)
parted /dev/sdb print # パーティションテーブルの内容を表示する

fdiskとgdiskでは、変更内容を明示的に書き込む(fdiskではw)までディスクに反映されません。一方、partedではパーティションの作成・削除などの変更はコマンド実行時にディスクへ反映されます。

ファイルシステムの作成:mkfs、mkswap

パーティションを作成した後は、用途に応じたファイルシステムを構築します。
mkfsは、ファイルシステムごとの作成コマンドを呼び出す共通のフロントエンドです。

> 注意: mkfsを実行すると、その領域に保存されている既存データは失われます。対象デバイスとアンマウント状態を事前に確認してください。

mkfs -t ext4 /dev/sdb1    # mkfs.ext4を呼び出してext4を作成
mkfs.ext4 /dev/sdb1       # ファイルシステム別コマンドを直接実行
mkfs -t xfs /dev/sdb2     # XFSを作成
mkfs.vfat /dev/sdb3       # VFATを作成

-Lオプションを使用すると、ファイルシステムにラベルを設定できます。

mkfs.ext4 -L DATA /dev/sdb1
mkfs.xfs -L XFS_DATA /dev/sdb2
ファイルシステム主な特徴
ext2ジャーナリング機能を持たない、伝統的なLinuxファイルシステム
ext3/ext4ジャーナリング機能を持つ。ext4は大容量化や性能面が改善されている
XFS大容量のファイルやファイルシステム、高い並列処理性能に強い
VFAT・exFATWindowsなどとの互換性が高い。FAT32は単一ファイルが約4GiBまで
Btrfsコピーオンライト、サブボリューム、スナップショットなどを提供する

XFSの特徴

XFSは、主にメタデータの更新内容をジャーナルへ記録するジャーナリングファイルシステムです。
障害発生後はジャーナルを利用して整合性を回復できるため、大容量環境でも再起動時の確認を効率化できます。

内部を複数のアロケーショングループに分割して管理し、複数の処理を並行して実行しやすい設計です。
また、連続したブロックを範囲として管理するエクステント方式により、大きなファイルを効率よく扱えます。

XFSは、マウントしたままxfs_growfsでファイルシステムを拡張できます。
一方、XFSファイルシステムの縮小はできない点に注意が必要です。

スワップ領域の作成

スワップ用パーティションにはmkfsではなく、mkswapでスワップ署名を書き込みます。

mkswap /dev/sdb4          # スワップ領域として初期化
swapon /dev/sdb4          # スワップ領域を有効化
swapoff /dev/sdb4         # スワップ領域を無効化

ファイルシステムの整合性の維持

空き容量・inodeの監視:df、du

dfはファイルシステム全体の空き容量を、duはディレクトリ・ファイル単位のディスク使用量を表示します。

コマンド主なオプション効果
df -h人間に読みやすい単位で表示するファイルシステムごとの使用量・空き容量の概観をつかむ
df -iinodeの使用状況を表示する容量に空きがあってもinodeが枯渇すると新規ファイルを作成できなくなるため、両方の確認が重要
du -sh ディレクトリ指定したディレクトリ全体の合計サイズを人間に読みやすい単位で表示する特定のディレクトリの使用量を調べる

空き容量に余裕があるように見えても、inode(ファイルの管理情報の単位)が枯渇していると新しいファイルを作成できなくなる点に注意してください。小さなファイルを大量に作成するような用途では、特にinodeの枯渇に注意が必要です。

整合性の検証・修復:fsck、e2fsck

fsckは、ファイルシステムの整合性を検査し、必要に応じて修復するための共通のフロントエンドコマンドです。実行する検査・修復の内容はファイルシステムの種類に依存し、ext系ファイルシステムに対しては内部的にe2fsckが呼び出されます。

主なオプション(e2fsck)効果
-fファイルシステムが正常(クリーン)と記録されている場合でも、強制的に検査する
-y検出した問題の修復について、すべて「はい」と自動的に答える(非対話的に実行する)
fsck -f /dev/sdb1     # ext系ファイルシステムを強制的に整合性検査する
e2fsck -y /dev/sdb1   # 問題があれば自動的に修復する

マウント中のファイルシステムに対してfsck/e2fsckを実行するのは、一般的に安全ではありません。 検査・修復は、対象のファイルシステムをアンマウントした状態で行うのが原則です。ルートファイルシステムを検査する場合は、レスキューメディアなどから起動し、対象をアンマウントした状態で行います。

パラメータの調整・確認:tune2fs

tune2fsは、ext2/ext3/ext4ファイルシステムの各種パラメータ(ボリュームラベル、マウント回数のカウント、予約領域の割合等)を調整・確認するコマンドです。

tune2fs -l /dev/sdb1    # 現在のファイルシステムのパラメータ(スーパーブロックの内容)を一覧表示する

XFS専用のツール:xfs_repair、xfs_fsr、xfs_db

XFSファイルシステムには、ext系とは別の専用ツール群があります。

コマンド役割
xfs_repairアンマウントしたXFSファイルシステムの整合性を検査・修復する(e2fsckのXFS版に相当)
xfs_fsr断片化したファイルをデフラグする(reorganizer)
xfs_dbXFSファイルシステムの内部構造を直接調べる・編集するデバッグツール

マウントとアンマウント:mount、umount

手動でのマウント・アンマウント

ファイルシステムを利用するには、ディレクトリ階層上のマウントポイントに接続します。マウントポイントには、あらかじめ存在するディレクトリを指定します。

mount /dev/sdb1 /mnt/data           # /dev/sdb1を/mnt/dataにマウント
mount -t ext4 /dev/sdb1 /mnt/data   # ファイルシステムの種類を明示
mount -o ro /dev/sdb1 /mnt/data     # 読み取り専用でマウント
umount /mnt/data                     # マウントポイントを指定してアンマウント
umount /dev/sdb1                     # デバイスを指定してアンマウント

mountを引数なしで実行すると、現在マウントされているファイルシステムを確認できます。
-tではファイルシステムの種類、-oではマウントオプションを指定します。複数のオプションはカンマで区切ります。

mount -t ext4 -o ro,noexec /dev/sdb1 /mnt/data

/etc/fstabに登録されている場合は、デバイスまたはマウントポイントの一方だけでもマウントできます。

mount /mnt/data

アンマウント対象でファイルを開いている、またはカレントディレクトリとして使用しているプロセスがあると、通常は「target is busy」となり失敗します。

umount -l /mnt/data

-lはレイジーアンマウントです。ファイルシステムを階層から切り離し、実際の後処理を使用中でなくなるまで遅延させます。

主なマウントオプション

オプション内容
defaults標準的なオプションをまとめて指定する
rw / ro読み書き可能/読み取り専用でマウントする
auto / noautomount -aや起動時の処理対象にする/しない
exec / noexec格納された実行ファイルの実行を許可/禁止する
suid / nosuidSUID・SGIDビットの効果を有効/無効にする
dev / nodevデバイスファイルを解釈する/解釈しない
user / nouser一般ユーザーによるマウントを許可/禁止する
users任意の一般ユーザーによるマウントとアンマウントを許可する
sync / async入出力を同期/非同期で行う
remountマウントしたままオプションを変更する

defaultsは一般にrw,suid,dev,exec,auto,nouser,asyncに相当します。個別のオプションを追加すると、標準設定の一部を変更できます。

mount -o remount,ro /mnt/data    # 読み取り専用として再マウント
mount -o remount,rw /mnt/data    # 読み書き可能として再マウント

自動マウントの設定:/etc/fstab

/etc/fstabは、起動時などにマウントするファイルシステムや、有効化するスワップ領域を定義するファイルです。1行を空白文字で区切り、6つのフィールドを記述します。

順番フィールド内容
1デバイス/dev/sdb1、UUID=、LABEL=など
2マウントポイントマウント先のディレクトリ。スワップではnone
3種類ext4、xfs、vfat、swapなど
4オプションdefaultsやro,noexecなどをカンマ区切りで指定
5dumpフラグdumpのバックアップ対象なら1、通常は0
6fsck順序ルートは1、その他は2、検査しない場合は0
UUID=1234abcd-1234-1234-1234-123456789abc  /      ext4  defaults        0  1
UUID=5678efab-1234-1234-1234-123456789abc  /home  ext4  defaults,nodev  0  2
UUID=9abc1234-1234-1234-1234-123456789abc  none   swap  sw              0  0
/dev/sdb1                                   /mnt   ext4  noauto,user     0  0

mount -aを実行すると、/etc/fstabにあるエントリのうち、noautoが指定されていないファイルシステムがまとめてマウントされます。

mount -a

設定変更後にmount -aを実行すると、記述ミスの確認に役立ちます。ただし、既存のマウントオプションを変更しただけでは自動的に再マウントされないため、必要に応じてremountを使用します。

デバイスの識別:blkid、lsblk

デバイス名は接続順序によって変わる可能性があるため、/etc/fstabでは通常、永続的な識別子であるUUID=を使用します。

blkid /dev/sdb1
# /dev/sdb1: UUID="1234abcd-..." TYPE="ext4"

lsblk
# NAME   SIZE TYPE MOUNTPOINT
# sdb     20G disk
# └─sdb1  20G part /mnt/data

blkidはUUID・ラベル・ファイルシステムの種類を確認するコマンドです。lsblkはブロックデバイス、パーティション、マウントポイントの関係をツリー形式で表示します。

リムーバブルメディアとsystemdマウントユニット

USBメモリなどのリムーバブルメディアは、多くのデスクトップ環境で/media/ユーザー名/以下や/run/media/ユーザー名/以下に自動的にマウントされます。自動マウント先はデスクトップ環境・ディストリビューション・設定によって異なります。また、systemdを採用する環境では、/etc/fstabの代わりに.mountユニットファイルによってマウントを定義することもできます。.mountユニットは、/etc/fstabのファイルシステム用エントリと概念的に対応しており、実際/etc/fstabのファイルシステム用エントリはsystemdによって自動的に.mountユニットへ変換されて扱われます。swapエントリは.swapユニットとして扱われます。