ストレージ操作マニュアル
LVM、ファイルシステム、マウント、swap などのストレージ層の操作。ディスクの表示/SMART については disk-ops.md を参照してください。
LVM (論理ボリューム管理)
LVM の3層: PV (物理ボリューム、ディスク/パーティション) → VG (ボリュームグループ、PV のプール) → LV (論理ボリューム、フォーマット可能なブロックデバイス)。
pvdisplay pvs pvcreate /dev/sdb1 pvremove /dev/sdb1 pvresize /dev/sdb1
vgdisplay vgs vgcreate vg0 /dev/sdb1 vgextend vg0 /dev/sdc1 vgreduce vg0 /dev/sdc1 vgremove vg0
lvdisplay lvs lvcreate -L 50G -n data vg0 lvcreate -l 100%FREE -n data vg0 lvcreate -L 50G -n data vg0 --type raid1 lvremove vg0/data lvextend -L +10G vg0/data lvextend -l +100%FREE vg0/data lvreduce -L -10G vg0/data
resize2fs /dev/vg0/data xfs_growfs /mnt/data
lvrename vg0 oldname newname
lvcreate -L 5G -s -n snap_data vg0/data lvcreate -L 5G -s -n snap_data vg0/data --permission r lvconvert --merge vg0/snap_data lvs -a
vgscan --mknodes vgchange -ay vg0 vgchange -an vg0
ファイルシステム
mkfs.ext4 -L mylabel /dev/sdb1 mkfs.ext4 -L mylabel -m 0 /dev/sdb1 mkfs.xfs -L mylabel /dev/vg0/data mkfs.btrfs -L mylabel /dev/sdb1 mkfs.vfat -F32 /dev/sdb1 mkfs.exfat /dev/sdb1 mkswap -L swap /dev/vg0/swap
e2label /dev/sdb1 mylabel xfs_admin -L mylabel /dev/vg0/data btrfs filesystem label /dev/sdb1 mylabel
blkid findfs UUID=abc123 dumpe2fs /dev/sdb1 | head -40 xfs_info /mnt/data btrfs filesystem show btrfs filesystem df /mnt
fsck /dev/sdb1 fsck -y /dev/sdb1 fsck -n /dev/sdb1 xfs_repair /dev/vg0/data xfs_repair -n /dev/vg0/data btrfs check /dev/sdb1 btrfs check --repair /dev/sdb1
tune2fs -c 1 /dev/sdb1 touch /forcefsck
マウント (mount / fstab)
mount /dev/sdb1 /mnt/data
mount -t ext4 /dev/sdb1 /mnt/data mount -o ro,noexec /dev/sdb1 /mnt/data mount -o remount,rw / mount -o remount,ro / umount /mnt/data umount -l /mnt/data umount -f /mnt/data fuser -mv /mnt/data
mount -a findmnt --verify
findmnt findmnt -t ext4,xfs findmnt /home
swap
swapon --show free -h cat /proc/swaps
swapon /dev/vg0/swap swapoff /dev/vg0/swap mkswap -L swap /dev/vg0/swap swapon -a
dd if=/dev/zero of=/swapfile bs=1M count=4096 chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sysctl vm.swappiness
btrfs 常用
btrfs subvolume list / btrfs subvolume create /mnt/@data btrfs subvolume delete /mnt/@data btrfs subvolume snapshot /mnt/@data /mnt/@data-snap
btrfs scrub start /mnt
btrfs scrub status /mnt
btrfs scrub cancel /mnt
btrfs device add /dev/sdc1 /mnt btrfs device delete /dev/sdc1 /mnt btrfs balance start /mnt
パーティション操作
fdisk -l gdisk -l parted -l
gdisk /dev/sdb
parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary ext4 0% 100% parted /dev/sdb mkpart primary ext4 1MiB 51201MiB
growpart /dev/sdb 1
sgdisk --backup=table.bak /dev/sdb sgdisk --load-backup=table.bak /dev/sdb
ZFS (Zettabyte File System)
Pool: tank
| 属性 | 値 |
| タイプ | Mirror (2-way) |
| ディスク | WDC WD40EFZZ 4TB ×2 (D4-320 USB3) |
| ashift | 12 (4K) |
| ARC 上限 | 32GB (/etc/modprobe.d/zfs.conf) |
| マウントポイント | /tank |
| 作成日 | 2026-07-02 |
/dev/disk/by-id/ata-WDC_WD40EFZZ-68CPAN0_WD-WX12DA5H2PCN → sda
/dev/disk/by-id/ata-WDC_WD40EFZZ-68CPAN0_WD-WX12DA5H234S → sdb
Dataset 構成
| Dataset | recordsize | compression | 用途 | 共有 |
| tank | 128K | lz4 | ルート | - |
| tank/media | 1M | lz4 | 家庭用映画ライブラリ | SMB + NFS |
| tank/photos | 128K | lz4 | 家庭用アルバム | SMB + NFS |
| tank/data | 128K | lz4 | 追加ストレージ | SMB + NFS |
| tank/backup | 128K | lz4 | バックアップコンテナ | 非共有 |
| tank/backup/system | 1M | lz4 | システムディスクバックアップ (restic) | 非共有 |
常用操作
zpool status tank zpool list -v tank zfs list -r tank zpool events tank -v
zpool scrub tank zpool scrub -s tank zpool status tank | grep scan
zfs snapshot tank/documents@before-reorg zfs list -t snapshot zfs rollback tank/documents@before-reorg zfs destroy tank/documents@old-snap
zpool offline tank <故障ディスクID>
zpool replace tank <旧ディスクID> <新ディスクID>
zpool status -v tank
zpool export tank zpool import -d /dev/disk/by-id/ tank
arc_summary zpool iostat -v 1
サービス一覧
| サービス | systemd unit | 説明 |
| Samba | smb.service | guest 共有 /tank/{media,photos,data} |
| NFS | nfs-server.service | 192.168.31.0/24 へエクスポート |
| ZFS マウント | zfs-mount.service | 起動時に dataset を自動マウント |
| ZFS イベント | zfs-zed.service | ディスク故障時のメール通知 (root) |
| ZFS メトリクス | zfs-prometheus.timer | 5分ごと収集 → Prometheus |
| 月次 scrub | zfs-scrub-monthly@tank.timer | データ整合性の月次チェック |
Grafana 監視
- ダッシュボード: ホストステータス / li-home-0 · ZFS Pool (uid: host-li-home-0-zfs)
- アラートルール:
/etc/grafana/provisioning/alerting/zfs-storage.yaml
- pool DEGRADED/FAULTED → critical
- 容量 >80% → warning, >90% → critical
- 単一 VDEV の故障 → critical
- ARC ヒットレート <50% → warning
復旧手順
単一ディスク故障 (mirror 存続)
zpool status tank で故障ディスク ID を確認
- 故障ディスクを物理的に交換
zpool replace tank <旧> <新>
zpool status -v tank で resilver の完了を監視
プールをインポートできない場合
ls /dev/disk/by-id/ata-* でディスクが見えるか確認
zpool import -f -d /dev/disk/by-id/ tank で強制インポート
- すでにエクスポート済みの場合:
zpool import -d /dev/disk/by-id/ -a
Samba が利用できない場合
systemctl status smb
zfs mount で /tank がマウントされているか確認
testparm && systemctl restart smb
NFS が利用できない場合
systemctl status nfs-server
showmount -e localhost
exportfs -ra
USB ディスクの接続断 (D4-320)
- USB ケーブルが緩んでいないか確認
dmesg | tail -30 で USB disconnect のログを確認
echo "0224" | sudo -S modprobe -r usb-storage uas && echo "0224" | sudo -S modprobe uas usb-storage
zpool online tank <ディスク> (自動で offline になっていた場合)