This content is for reference only. Always consult official vendor documentation for your distribution. Test thoroughly in a lab environment before production use. In case of conflicts, vendor documentation takes precedence.
Daily Monitoring Tasks
Path Health Monitoring
Check NVMe native multipath status:
# View all NVMe subsystems and paths
nvme list-subsys
# Check for non-live paths
nvme list-subsys | grep -v "live"
# Count active paths per subsystem
nvme list-subsys | grep -c "live"
Expected output:
- All paths should show
livestate - No
connecting,deleting, or failed paths - Path count matches expected (e.g., 8 paths for 2 NICs × 4 portals)
Alert conditions:
- Any path shows non-live status
- Path count is less than expected
- All paths to a single controller are down
Connection Status
NVMe-TCP connections:
# List all NVMe connections
nvme list-subsys
# Check connection state
nvme list | grep -E "live|connecting|dead"
# Count active connections
nvme list-subsys | grep -c "live"
Expected output:
- All connections show
livestate - Connection count matches expected configuration
- No
connectingor failed states
Performance Metrics
I/O latency:
# Monitor I/O latency with iostat
iostat -x 1 5
# Key metrics to watch:
# - await: Average I/O wait time (should be <10ms for NVMe)
# - %util: Device utilization (sustained >80% may indicate bottleneck)
Network throughput:
# Monitor network I/O
iftop -i <storage_interface>
# Or use nload
nload <storage_interface>
Disk I/O:
# Real-time I/O monitoring
iotop -o
# Per-device statistics
iostat -dx 1
Weekly Monitoring Tasks
Storage Array Health
NVMe SMART data:
# Check NVMe device health
nvme smart-log /dev/nvme0n1
# Key metrics:
# - critical_warning: Should be 0
# - temperature: Should be within normal range
# - available_spare: Should be >10%
# - percentage_used: Monitor for wear
Multipath statistics:
# Check IO policy
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy
# Check ANA state (if supported)
nvme list-subsys -o json | grep -E "state|ana"
Log Review
Check system logs for storage errors:
# NVMe errors
journalctl -u nvmf-autoconnect -p err --since "7 days ago"
# NVMe kernel messages
dmesg -T | grep -i "nvme" | grep -i "error\|fail\|timeout"
# Check for connection issues
journalctl --since "7 days ago" | grep -i "nvme.*connect\|nvme.*disconnect"
Common errors to investigate:
- I/O errors or timeouts
- Path failures
- Connection drops
- Controller resets
Performance Trending
Collect baseline metrics:
# Create performance snapshot
{
echo "=== Date: $(date) ==="
echo "=== NVMe Subsystems ==="
nvme list-subsys
echo "=== I/O Statistics ==="
iostat -x
echo "=== Network Statistics ==="
ip -s link show
echo "=== NVMe List ==="
nvme list
echo "=== IO Policy ==="
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy
} > /var/log/storage-snapshot-$(date +%Y%m%d).log
Analyze trends:
- Compare weekly snapshots
- Look for degrading performance
- Identify capacity trends
- Plan for growth
Monthly Maintenance Tasks
Firmware Updates
Check for updates:
- Storage array firmware
- NIC firmware
- Switch firmware
Update procedure:
-
Review release notes.
-
Test in non-production environment.
-
Schedule maintenance window.
-
Backup configurations.
-
Apply updates.
-
Verify functionality.
-
Monitor for issues.
Best practices:
- Never update all components simultaneously
- Update one component type at a time
- Allow 1-2 weeks between updates to identify issues
- Keep previous firmware versions for rollback
Configuration Backup
Backup critical configurations:
# Network configuration
cp -a /etc/NetworkManager/system-connections/ /backup/network-$(date +%Y%m%d)
# NVMe configuration
cp -a /etc/nvme/hostnqn /backup/hostnqn-$(date +%Y%m%d)
cp -a /etc/nvme/discovery.conf /backup/discovery.conf-$(date +%Y%m%d)
cp -a /etc/modprobe.d/nvme*.conf /backup/nvme-modprobe-$(date +%Y%m%d)
cp -a /etc/udev/rules.d/*nvme*.rules /backup/nvme-udev-$(date +%Y%m%d)
Automate backups:
# Create backup script: /usr/local/bin/backup-nvme-config.sh
#!/bin/bash
BACKUP_DIR="/backup/nvme-configs"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR/$DATE
cp -a /etc/NetworkManager/system-connections/ $BACKUP_DIR/$DATE/
cp -a /etc/nvme/ $BACKUP_DIR/$DATE/
cp -a /etc/modprobe.d/nvme*.conf $BACKUP_DIR/$DATE/ 2>/dev/null
cp -a /etc/udev/rules.d/*nvme*.rules $BACKUP_DIR/$DATE/ 2>/dev/null
# Keep only last 90 days
find $BACKUP_DIR -type d -mtime +90 -exec rm -rf {} \;
Schedule with cron:
# Add to crontab
0 2 1 * * /usr/local/bin/backup-nvme-config.sh
Quarterly Maintenance Tasks
Failover Testing
Test NIC failover:
# 1. Bring down a storage NIC
ip link set <interface> down
# 2. Verify connections fail over
nvme list-subsys # or iscsiadm -m session
# 3. Verify I/O continues
iostat -x 1 5
# 4. Bring NIC back up
ip link set <interface> up
# 5. Verify connections restore
nvme list-subsys # or iscsiadm -m session
Document results:
- Failover time
- Any errors or warnings
- Recovery time
- Lessons learned
Capacity Planning
Review storage usage:
# Check LVM usage
pvs
vgs
lvs
# Check filesystem usage
df -h
# Trend analysis
# Compare with previous months
# Project growth rate
# Plan for expansion
Recommendations:
- Maintain 20% free space minimum
- Plan expansion when 70% full
- Review growth trends quarterly
- Budget for capacity increases
Maintenance Checklist
Daily:
- Check NVMe path health:
nvme list-subsys - Check IO policy:
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy - Review performance metrics
- Check for alerts/errors
Weekly:
- Review storage array health
- Analyze system logs
- Collect performance baselines
- Verify backup completion
Monthly:
- Check for firmware updates
- Backup configurations
- Review security patches
- Update documentation
Quarterly:
- Test failover procedures
- Capacity planning review
- Security audit
- Disaster recovery test
- Update runbooks
RHEL-Specific Monitoring Tools
Using Cockpit:
# Install Cockpit
sudo dnf install -y cockpit cockpit-storaged
# Enable and start
sudo systemctl enable --now cockpit.socket
# Access via browser: https://<host>:9090
Using Performance Co-Pilot (PCP):
# Install PCP
sudo dnf install -y pcp pcp-system-tools
# Enable and start
sudo systemctl enable --now pmcd pmlogger
# Monitor storage performance
pmrep disk.dev.read disk.dev.write disk.dev.avactive
# Monitor network
pmrep network.interface.in.bytes network.interface.out.bytes
Insights Integration (RHEL only):
# Install Red Hat Insights client
sudo dnf install -y insights-client
# Register
sudo insights-client --register
# Run analysis
sudo insights-client