block-storage について
Linux 管理者向けのストレージ管理スキルです。ディスク、LVM、AWS EBS、ファイルシステム、スナップショット、ソフトウェア RAID の設定と保守に加え、拡張やトラブルシューティングも扱います。
主な機能
- 01ディスクのパーティションとファイルシステム管理
- 02LVM の構成とオンライン拡張
- 03AWS EBS ボリューム管理
- 04スナップショットの作成と復元
- 05ソフトウェア RAID の構成
- 06ストレージのトラブル診断
活用シーン
- 01Linux サーバーへのディスク追加とフォーマット
- 02本番環境での論理ボリューム拡張
- 03バックアップや移行でのスナップショット利用
- 04冗長性や性能を目的とした RAID 構成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ bagelhole/ devops-security-agent-skills --skill block-storageインストール後、Claude Code で/block-storageを入力して読み込まれたか確認します。
詳細
ブロックストレージ
LVM、クラウドベースの EBS、ファイルシステムの作成、スナップショット、RAID 構成など、ブロックストレージボリュームを管理します。本番環境でのボリューム拡張から、未加工ディスクのプロビジョニングまで、ライフサイクル全体を網羅します。
使用する場面
- Linux サーバーで新しいディスクを追加、パーティション分割、フォーマットする
- 柔軟なストレージ割り当てのために LVM 論理ボリュームを管理する
- クラウドブロックストレージ(AWS EBS)をプロビジョニングしてアタッチする
- バックアップや移行のためにスナップショットを作成、復元する
- 冗長性やパフォーマンスのためにソフトウェア RAID を構成する
- ダウンタイムなしで既存のボリュームを拡張する
前提条件
- 対象システムの root または sudo アクセス権
- LVM 操作のための
lvm2パッケージのインストール - ソフトウェア RAID のための
mdadmパッケージのインストール - EBS 操作のための AWS CLI の設定
- ワークロードの I/O 特性(IOPS、スループット)に関する理解
ディスクの検出とパーティション分割
# List all block devices
lsblk
lsblk -f # Show filesystem types and mount points
# Show detailed disk information
fdisk -l /dev/sdb
# Identify disk model and health (requires smartmontools)
smartctl -a /dev/sda
smartctl -H /dev/sda # Quick health check
# Create a GPT partition table and a single partition
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary ext4 0% 100%
# Alternative: use fdisk for MBR partitioning
fdisk /dev/sdb
# n -> new partition, p -> primary, Enter defaults, w -> write
# Inform the kernel of partition table changes
partprobe /dev/sdb
# Wipe filesystem signatures (prepare for LVM or RAID)
wipefs -a /dev/sdb1
ファイルシステムの作成と管理
# Create an ext4 filesystem
mkfs.ext4 /dev/sdb1
# Create an ext4 filesystem with label and reserved block tuning
mkfs.ext4 -L appdata -m 1 /dev/sdb1 # 1% reserved blocks (default is 5%)
# Create an XFS filesystem (recommended for large volumes)
mkfs.xfs /dev/sdb1
# Create an XFS filesystem with label
mkfs.xfs -L appdata /dev/sdb1
# Mount the filesystem
mkdir -p /data
mount /dev/sdb1 /data
# Add persistent mount to fstab (use UUID for reliability)
blkid /dev/sdb1 # Get the UUID
echo 'UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults,noatime 0 2' >> /etc/fstab
# Mount all entries in fstab
mount -a
# Check and repair a filesystem (unmount first)
umount /data
fsck.ext4 -y /dev/sdb1
xfs_repair /dev/sdb1 # For XFS
# Resize ext4 (can grow online while mounted)
resize2fs /dev/sdb1
# Resize XFS (must be mounted to grow)
xfs_growfs /data
# Check filesystem usage
df -hT
LVM の管理
LVM スタックの作成
# Step 1: Create physical volumes
pvcreate /dev/sdb /dev/sdc
# View physical volumes
pvs
pvdisplay /dev/sdb
# Step 2: Create a volume group from physical volumes
vgcreate data_vg /dev/sdb /dev/sdc
# View volume groups
vgs
vgdisplay data_vg
# Step 3: Create logical volumes
# Fixed size
lvcreate -L 100G -n app_lv data_vg
# Use percentage of free space
lvcreate -l 50%FREE -n logs_lv data_vg
# Use all remaining space
lvcreate -l 100%FREE -n backup_lv data_vg
# View logical volumes
lvs
lvdisplay /dev/data_vg/app_lv
# Step 4: Create filesystem and mount
mkfs.ext4 /dev/data_vg/app_lv
mkdir -p /data/app
mount /dev/data_vg/app_lv /data/app
# Add to fstab
echo '/dev/data_vg/app_lv /data/app ext4 defaults,noatime 0 2' >> /etc/fstab
ボリュームの拡張(オンライン)
# Extend a logical volume by 20 GB
lvextend -L +20G /dev/data_vg/app_lv
# Extend to fill all free space in the VG
lvextend -l +100%FREE /dev/data_vg/app_lv
# Grow the ext4 filesystem (online, no unmount needed)
resize2fs /dev/data_vg/app_lv
# Grow XFS filesystem (online)
xfs_growfs /data/app
# Combined: extend LV and resize filesystem in one command
lvextend -L +20G --resizefs /dev/data_vg/app_lv
既存の VG への新しいディスクの追加
# Add a new physical volume
pvcreate /dev/sdd
# Extend the volume group
vgextend data_vg /dev/sdd
# Now extend any logical volume using the new space
lvextend -l +100%FREE --resizefs /dev/data_vg/app_lv
LVM スナップショット
# Create a snapshot (requires free space in VG)
lvcreate -L 10G -s -n app_snap /dev/data_vg/app_lv
# Mount the snapshot read-only for backup
mkdir -p /mnt/snapshot
mount -o ro /dev/data_vg/app_snap /mnt/snapshot
# Perform backup from the snapshot
tar czf /backup/app-$(date +%Y%m%d).tar.gz -C /mnt/snapshot .
# Unmount and remove the snapshot when done
umount /mnt/snapshot
lvremove -f /dev/data_vg/app_snap
# Restore from snapshot (reverts LV to snapshot point -- destructive)
lvconvert --merge /dev/data_vg/app_snap
# Note: if the LV is mounted, merge happens at next activation (reboot)
LVM コンポーネントの縮小と削除
# Shrink a logical volume (ext4 only -- XFS cannot shrink)
# MUST unmount first
umount /data/app
e2fsck -f /dev/data_vg/app_lv
resize2fs /dev/data_vg/app_lv 80G
lvreduce -L 80G /dev/data_vg/app_lv
mount /data/app
# Remove a logical volume
umount /data/app
lvremove /dev/data_vg/app_lv
# Remove a disk from a volume group (migrate data off first)
pvmove /dev/sdc # Migrate extents to other PVs
vgreduce data_vg /dev/sdc # Remove PV from VG
pvremove /dev/sdc # Clean PV metadata
AWS EBS の管理
# Create a gp3 volume (general purpose SSD)
aws ec2 create-volume \
--availability-zone us-east-1a \
--size 100 \
--volume-type gp3 \
--iops 3000 \
--throughput 125 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=app-data},{Key=Environment,Value=production}]'
# Create an io2 volume (provisioned IOPS SSD for databases)
aws ec2 create-volume \
--availability-zone us-east-1a \
--size 500 \
--volume-type io2 \
--iops 10000
# List volumes with filters
aws ec2 describe-volumes \
--filters "Name=tag:Environment,Values=production" \
--query 'Volumes[*].{ID:VolumeId,Size:Size,Type:VolumeType,State:State,AZ:AvailabilityZone}' \
--output table
# Attach a volume to an instance
aws ec2 attach-volume \
--volume-id vol-0abc123def456789 \
--instance-id i-0abc123def456789 \
--device /dev/xvdf
# After attaching, format and mount on the instance
lsblk # Identify the new device (e.g., /dev/nvme1n1)
mkfs.ext4 /dev/nvme1n1
mkdir -p /data
mount /dev/nvme1n1 /data
# Modify a volume (resize without detaching -- gp3/io2)
aws ec2 modify-volume \
--volume-id vol-0abc123def456789 \
--size 200
# After resize, grow the filesystem on the instance
growpart /dev/nvme1n1 1 # If partitioned
resize2fs /dev/nvme1n1 # ext4
# xfs_growfs /data # XFS
# Create a snapshot
aws ec2 create-snapshot \
--volume-id vol-0abc123def456789 \
--description "Pre-upgrade snapshot $(date +%Y-%m-%d)" \
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=pre-upgrade}]'
# List snapshots
aws ec2 describe-snapshots \
--owner-ids self \
--query 'Snapshots[*].{ID:SnapshotId,Vol:VolumeId,Size:VolumeSize,Date:StartTime,Desc:Description}' \
--output table
# Create a volume from a snapshot (for restore or migration)
aws ec2 create-volume \
--snapshot-id snap-0abc123def456789 \
--availability-zone us-east-1a \
--volume-type gp3
# Detach a volume
aws ec2 detach-volume --volume-id vol-0abc123def456789
# Delete a volume (ensure it is detached first)
aws ec2 delete-volume --volume-id vol-0abc123def456789
ソフトウェア RAID(mdadm)
# Install mdadm
apt install -y mdadm # Debian/Ubuntu
dnf install -y mdadm # RHEL/CentOS
# Create RAID 1 (mirror) with 2 disks
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# Create RAID 5 (striped with parity) with 3 disks + 1 spare
mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# Create RAID 10 (striped mirrors) with 4 disks
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# Check RAID status
cat /proc/mdstat
mdadm --detail /dev/md0
# Save RAID configuration (persists across reboot)
mdadm --detail --scan >> /etc/mdadm/mdadm.conf # Debian
mdadm --detail --scan >> /etc/mdadm.conf # RHEL
update-initramfs -u # Debian
# Create filesystem on RAID device
mkfs.ext4 /dev/md0
mkdir -p /data
mount /dev/md0 /data
# Replace a failed disk
mdadm --manage /dev/md0 --fail /dev/sdc
mdadm --manage /dev/md0 --remove /dev/sdc
# Insert new disk, then:
mdadm --manage /dev/md0 --add /dev/sdf
# Monitor rebuild progress
watch cat /proc/mdstat
# RAID level recommendations:
# RAID 1: 2+ disks, mirroring, good for OS / boot drives
# RAID 5: 3+ disks, single parity, good read performance
# RAID 6: 4+ disks, double parity, survives 2 disk failures
# RAID 10: 4+ disks, mirrored stripes, best I/O performance
トラブルシューティング
| 症状 | 診断コマンド | 一般的な対処法 |
|---|---|---|
| ディスクが表示されない | lsblk、dmesg | tail | 物理接続を確認し、SCSI バスを再スキャンします |
| ファイルシステムが読み取り専用になっている | dmesg | grep error、mount | ファイルシステムエラーが検出されています。アンマウント後に fsck を実行します |
| LVM:VG に空き領域がない | vgs、pvs | vgextend で新しい PV を追加します |
| EBS ボリュームが表示されない | インスタンス上で lsblk | AWS コンソールでアタッチ状態を確認します。NVMe ではデバイス名が異なります |
| RAID がデグレード状態になっている | cat /proc/mdstat | 故障したディスクを mdadm --manage --add で置き換えます |
| ファイルシステムのサイズを変更できない | lvs、df -h | 先に LV を拡張してから FS のサイズを変更します。XFS はマウントが必要です |
| EBS の I/O が遅い | iostat -x 2、ボリュームタイプを確認 | gp3/io2 にアップグレードし、IOPS/スループットを増やします |
| スナップショットの作成に時間がかかる | AWS コンソール:スナップショットの進行状況 | スナップショットは増分方式です。最初の作成に最も時間がかかります |
関連スキル
linux-administration-- ディスクとファイルシステムの基本performance-tuning-- I/O スケジューラーと fio によるベンチマークnfs-storage-- ブロックストレージ上に構築されるネットワークファイルシステムbackup-recovery-- スナップショットベースおよびファイルレベルのバックアップ戦略object-storage-- 非構造化データ向けの代替ストレージモデル
コメント
Markdown 対応