1 分で読了 #devops
このページの目次

ディスク操作マニュアル

確認

# ブロックデバイスの木構造 (サイズ、タイプ、マウントポイント、UUID を含む)
lsblk -f
# NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
# sda
# ├─sda1 ext4   1.0         abc123-def456                        50G     30%    /
# └─sda2 swap   1           fed987                                                       [SWAP]

df -h                                   # ファイルシステムの使用率
df -i                                   # inode の使用率 (inode 枯渇 = ファイル作成不可)
du -sh /path                            # ディレクトリ/ファイルのサイズ
du -sh * | sort -rh | head -10          # 現在のディレクトリで最大のファイル/ディレクトリ

# 現代的な代替コマンド
duf                                    # カラフルな df、loop/tmpfs を自動フィルタリング
dust                                   # 木構造の du、自動ソート
dust -d 2                              # 深さ制限 2 レベル
ncdu /                                 # インタラクティブな du (矢印キーでナビゲーション、d で削除)

# ファイル検索とナビゲーション
fd pattern                             # find の代替: ファイル名で検索 (デフォルトは正規表現、.gitignore を無視)
fd -e rs                               # 拡張子で検索
rg pattern                             # grep -r の代替: ファイル内容の検索
rg -t py pattern                       # ファイルタイプで検索 (py, js, md...)
rg -l pattern                          # ファイル名のみをリスト表示
bat file                               # cat の代替: 構文ハイライト + 行番号 + Git diff マーク
z dirname                              # zoxide: 最後にアクセスした一致ディレクトリにジャンプ (cd の代替)
fzf                                    # ファジー検索: Ctrl+T でファイル検索、Ctrl+R で履歴検索

fdisk -l                                # MBR パーティションテーブル
gdisk -l                                # GPT パーティションテーブル
blkid                                   # 全デバイスの UUID + FS タイプ

# SMART 健康状態 (ハードディスク自己診断)
smartctl -a /dev/nvme0n1                # NVMe: Percentage Used, Data Units Written
smartctl -a /dev/sda                    # SATA: Reallocated_Sector_Ct, Pending_Sector
smartctl -t short /dev/sda              # 短時間テストの実行 (2〜5 分)
smartctl -l selftest /dev/sda           # テスト結果の確認

パーティション作成とフォーマット

# GPT パーティション (推奨、2TB 超対応)
gdisk /dev/sda
  n  → 新規パーティション作成
  t  → パーティションタイプ変更 (8300 = Linux ファイルシステム, 8200 = swap)
  w  → 書き込み

mkfs.ext4 /dev/sda1                     # ext4 でフォーマット
mkfs.ext4 -L mylabel /dev/sda1          # ラベル付きフォーマット (ラベルで UUID 置換マウント)
mkswap /dev/sda2
swapon /dev/sda2

マウント

mount /dev/sda1 /mnt/data
umount /mnt/data
umount -l /mnt/data                     # ラジアンマウント (すべてのプロセスが参照を解放するのを待ってから自動アンマウント)

# fstab での永続化設定 (/dev/sdX ではなく UUID を使用すること。/dev/sdX はデバイス名が変動する可能性がある)
lsblk -f                                # UUID を取得
# /etc/fstab:
UUID=abc123-def456 /mnt/data ext4 defaults,noatime 0 2
# noatime: ファイル読み取り時にアクセス時間を更新しない (SSD の書き込み削減)
# 0: dump バックアップ (デフォルトで無効)
# 2: fsck の優先度 (0=チェックしない, 1=root, 2=その他)

# fstab のテスト (再起動不要)
mount -a                                # fstab に記載されたすべてのデバイスをマウント
systemctl daemon-reload

LVM

pvcreate /dev/sda4                      # 物理ボリューム作成
vgcreate vg0 /dev/sda4                  # ボリュームグループ作成
lvcreate -L 10G -n lv0 vg0              # ロジカルボリューム作成 (10G)
lvcreate -l +100%FREE -n lv0 vg0        # 空き容量すべてを使用

lvextend -L +5G /dev/vg0/lv0            # LV の拡張
resize2fs /dev/vg0/lv0                  # ファイルシステムの拡張 (ext4)

pvs / vgs / lvs                         # 状態確認
lvremove /dev/vg0/lv0                   # LV の削除 (データ消失!)

fstrim (SSD の定期 discard)

fstrim -v /                             # 手動 trim (削除済みブロックの回収)
systemctl enable fstrim.timer           # 自動 trim を週 1 回に有効化
systemctl status fstrim.timer

トラブルシューティング

# IO エラー
dmesg | grep -i "I/O error"
# → ディスクに不良セクターがある可能性 → smartctl -a で確認

# リアルタイム IO モニタリング
iostat -x 1                             # await (レイテンシ), %util (利用率)
cat /proc/diskstats                      # 累積 IO カウント

# ファイルシステムが読み取り専用になっている場合 (remounted read-only)
# → 通常、FS が不整合を検出したため → fsck が必要
dmesg | grep -i "remounted.*read-only"
fsck -n /dev/sda1                       # チェックのみ実行 (修復は行わない、アンマウントが必要)
fsck /dev/sda1                          # チェックと修復 (アンマウント必須!)