XFS

XFS

XFS is used as the underlying file system for Minio disks.

1. Error Handling

A benefit of XFS is its fine grain control of how errors can be handled

2. External Journal

Using external journal can speed up write operations

External Journal must be used in all Infinite Disk deployments.

3. Maintenance Tools

xfs_scrub

xfs_repair

  • offline check and repair XFS

xfs_db

  • defragment XFS with -c frag

mdadm

3-way mirror is used to protect the XFS external journal device.

Creation Script

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=3 /dev/sdX /dev/sdY /dev/sdZ

Maintenance Script

cron script to check and repair mdadm mirror frequently.

#!/bin/bash

# Config
ARRAY="/dev/md0"
LOG="/var/log/mdadm-scrub.log"
HOSTNAME=$(hostname)
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
EMAIL="your@email.com"   # <-- Change to your real email

# Start scrub (check)
echo "[$TIMESTAMP] Starting RAID scrub (check) on $ARRAY" >> "$LOG"
echo check > "/sys/block/$(basename $ARRAY)/md/sync_action"

# Wait for scrub to finish
while [ "$(cat /sys/block/$(basename $ARRAY)/md/sync_action)" != "idle" ]; do
    sleep 10
done

# Check mismatch count
MISMATCHES=$(cat /sys/block/$(basename $ARRAY)/md/mismatch_cnt)

if [ "$MISMATCHES" -eq 0 ]; then
    echo "[$TIMESTAMP] Scrub completed — no mismatches." >> "$LOG"
else
    echo "[$TIMESTAMP] Scrub found $MISMATCHES mismatched blocks!" >> "$LOG"
    
    # Send email alert
    if [ -n "$EMAIL" ]; then
        echo -e "RAID1 scrub on $ARRAY at $HOSTNAME found $MISMATCHES mismatched blocks.\nProceeding with automatic repair.\nCheck $LOG for details." | \
            mail -s "RAID Scrub Alert on $HOSTNAME" "$EMAIL"
    fi

    # Start repair
    REPAIR_TIME=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$REPAIR_TIME] Starting RAID repair on $ARRAY" >> "$LOG"
    echo repair > "/sys/block/$(basename $ARRAY)/md/sync_action"

    # Wait for repair to finish
    while [ "$(cat /sys/block/$(basename $ARRAY)/md/sync_action)" != "idle" ]; do
        sleep 10
    done

    echo "[$(date '+%Y-%m-%d %H:%M:%S')] Repair completed." >> "$LOG"
fi