パーティションテーブルの管理:fdisk、gdisk、parted
ディスクをパーティションに分割するには、パーティションテーブルの形式に応じたツールを使います。
| ツール | 対応するパーティションテーブル形式 | 特徴 |
|---|---|---|
fdisk | MBR・GPT | 対話的な操作で、伝統的に広く使われている |
gdisk | GPT専用 | fdiskのGPT版という位置づけ |
parted | MBR・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・exFAT | Windowsなどとの互換性が高い。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 -i | inodeの使用状況を表示する | 容量に空きがあっても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_db | XFSファイルシステムの内部構造を直接調べる・編集するデバッグツール |
マウントとアンマウント: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 / noauto | mount -aや起動時の処理対象にする/しない |
exec / noexec | 格納された実行ファイルの実行を許可/禁止する |
suid / nosuid | SUID・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などをカンマ区切りで指定 |
| 5 | dumpフラグ | dumpのバックアップ対象なら1、通常は0 |
| 6 | fsck順序 | ルートは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 0mount -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/datablkidはUUID・ラベル・ファイルシステムの種類を確認するコマンドです。lsblkはブロックデバイス、パーティション、マウントポイントの関係をツリー形式で表示します。
リムーバブルメディアとsystemdマウントユニット
USBメモリなどのリムーバブルメディアは、多くのデスクトップ環境で/media/ユーザー名/以下や/run/media/ユーザー名/以下に自動的にマウントされます。自動マウント先はデスクトップ環境・ディストリビューション・設定によって異なります。また、systemdを採用する環境では、/etc/fstabの代わりに.mountユニットファイルによってマウントを定義することもできます。.mountユニットは、/etc/fstabのファイルシステム用エントリと概念的に対応しており、実際/etc/fstabのファイルシステム用エントリはsystemdによって自動的に.mountユニットへ変換されて扱われます。swapエントリは.swapユニットとして扱われます。