| name | block-storage |
| description | Manage block storage volumes and LVM. Configure cloud block storage and local disks. Use when managing disk storage. |
| license | MIT |
| metadata | {"author":"devops-skills","version":"1.0"} |
Block Storage
Manage block storage volumes including LVM, cloud-based EBS, filesystem creation, snapshots, and RAID configurations. Covers the full lifecycle from provisioning raw disks to extending volumes in production.
When to Use
- Adding, partitioning, or formatting new disks on Linux servers
- Managing LVM logical volumes for flexible storage allocation
- Provisioning and attaching cloud block storage (AWS EBS)
- Creating and restoring snapshots for backup or migration
- Configuring software RAID for redundancy or performance
- Extending existing volumes without downtime
Prerequisites
- Root or sudo access on the target system
lvm2 package installed for LVM operations
mdadm package installed for software RAID
- AWS CLI configured for EBS operations
- Understanding of the workload's I/O characteristics (IOPS, throughput)
Disk Discovery and Partitioning
lsblk
lsblk -f
fdisk -l /dev/sdb
smartctl -a /dev/sda
smartctl -H /dev/sda
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary ext4 0% 100%
fdisk /dev/sdb
partprobe /dev/sdb
wipefs -a /dev/sdb1
Filesystem Creation and Management
mkfs.ext4 /dev/sdb1
mkfs.ext4 -L appdata -m 1 /dev/sdb1
mkfs.xfs /dev/sdb1
mkfs.xfs -L appdata /dev/sdb1
mkdir -p /data
mount /dev/sdb1 /data
blkid /dev/sdb1
echo 'UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults,noatime 0 2' >> /etc/fstab
mount -a
umount /data
fsck.ext4 -y /dev/sdb1
xfs_repair /dev/sdb1
resize2fs /dev/sdb1
xfs_growfs /data
df -hT
LVM Management
Creating an LVM Stack
pvcreate /dev/sdb /dev/sdc
pvs
pvdisplay /dev/sdb
vgcreate data_vg /dev/sdb /dev/sdc
vgs
vgdisplay data_vg
lvcreate -L 100G -n app_lv data_vg
lvcreate -l 50%FREE -n logs_lv data_vg
lvcreate -l 100%FREE -n backup_lv data_vg
lvs
lvdisplay /dev/data_vg/app_lv
mkfs.ext4 /dev/data_vg/app_lv
mkdir -p /data/app
mount /dev/data_vg/app_lv /data/app
echo '/dev/data_vg/app_lv /data/app ext4 defaults,noatime 0 2' >> /etc/fstab
Extending Volumes (Online)
lvextend -L +20G /dev/data_vg/app_lv
lvextend -l +100%FREE /dev/data_vg/app_lv
resize2fs /dev/data_vg/app_lv
xfs_growfs /data/app
lvextend -L +20G --resizefs /dev/data_vg/app_lv
Adding a New Disk to an Existing VG
pvcreate /dev/sdd
vgextend data_vg /dev/sdd
lvextend -l +100%FREE --resizefs /dev/data_vg/app_lv
LVM Snapshots
lvcreate -L 10G -s -n app_snap /dev/data_vg/app_lv
mkdir -p /mnt/snapshot
mount -o ro /dev/data_vg/app_snap /mnt/snapshot
tar czf /backup/app-$(date +%Y%m%d).tar.gz -C /mnt/snapshot .
umount /mnt/snapshot
lvremove -f /dev/data_vg/app_snap
lvconvert --merge /dev/data_vg/app_snap
Reducing and Removing LVM Components
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
umount /data/app
lvremove /dev/data_vg/app_lv
pvmove /dev/sdc
vgreduce data_vg /dev/sdc
pvremove /dev/sdc
AWS EBS Management
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}]'
aws ec2 create-volume \
--availability-zone us-east-1a \
--size 500 \
--volume-type io2 \
--iops 10000
aws ec2 describe-volumes \
--filters "Name=tag:Environment,Values=production" \
--query 'Volumes[*].{ID:VolumeId,Size:Size,Type:VolumeType,State:State,AZ:AvailabilityZone}' \
--output table
aws ec2 attach-volume \
--volume-id vol-0abc123def456789 \
--instance-id i-0abc123def456789 \
--device /dev/xvdf
lsblk
mkfs.ext4 /dev/nvme1n1
mkdir -p /data
mount /dev/nvme1n1 /data
aws ec2 modify-volume \
--volume-id vol-0abc123def456789 \
--size 200
growpart /dev/nvme1n1 1
resize2fs /dev/nvme1n1
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}]'
aws ec2 describe-snapshots \
--owner-ids self \
--query 'Snapshots[*].{ID:SnapshotId,Vol:VolumeId,Size:VolumeSize,Date:StartTime,Desc:Description}' \
--output table
aws ec2 create-volume \
--snapshot-id snap-0abc123def456789 \
--availability-zone us-east-1a \
--volume-type gp3
aws ec2 detach-volume --volume-id vol-0abc123def456789
aws ec2 delete-volume --volume-id vol-0abc123def456789
Software RAID (mdadm)
apt install -y mdadm
dnf install -y mdadm
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf
update-initramfs -u
mkfs.ext4 /dev/md0
mkdir -p /data
mount /dev/md0 /data
mdadm --manage /dev/md0 --fail /dev/sdc
mdadm --manage /dev/md0 --remove /dev/sdc
mdadm --manage /dev/md0 --add /dev/sdf
watch cat /proc/mdstat
Troubleshooting
| Symptom | Diagnostic Command | Common Fix |
|---|
| Disk not showing up | lsblk, dmesg | tail | Check physical connection; rescan SCSI bus |
| Filesystem read-only | dmesg | grep error, mount | Filesystem errors detected; run fsck after unmount |
| LVM: no free space in VG | vgs, pvs | Add a new PV with vgextend |
| EBS volume not visible | lsblk on instance | Check attach status in AWS console; NVMe naming differs |
| RAID degraded | cat /proc/mdstat | Replace failed disk with mdadm --manage --add |
| Cannot resize filesystem | lvs, df -h | Extend LV first, then resize FS; XFS needs to be mounted |
| Slow I/O on EBS | iostat -x 2, check volume type | Upgrade to gp3/io2, increase IOPS/throughput |
| Snapshot taking too long | AWS Console: snapshot progress | Snapshots are incremental; first one takes longest |
Related Skills
linux-administration -- Disk and filesystem basics
performance-tuning -- I/O scheduler and benchmarking with fio
nfs-storage -- Network filesystems built on top of block storage
backup-recovery -- Snapshot-based and file-level backup strategies
object-storage -- Alternative storage model for unstructured data