Add RAID 0 production deployment suite
- Linux mdadm RAID 0 deployment (4 NVMe, 28 GB/s) - Performance test scripts and configuration - WebDAV + RAID integration documentation - CLI WebDAV command integration in main.rs - Complete deployment checklist (1685 lines) Testing verified: RAID 0 stripe algorithm works correctly
This commit is contained in:
193
scripts/deploy_raid0_linux.sh
Executable file
193
scripts/deploy_raid0_linux.sh
Executable file
@@ -0,0 +1,193 @@
|
||||
#!/bin/bash
|
||||
# Linux mdadm RAID 0 Deployment Script
|
||||
# Target: 4+ NVMe disks, Stripe size: 64KB, Expected: 28 GB/s read
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== mdadm RAID 0 Deployment Script ==="
|
||||
echo "Target: 4 NVMe disks in RAID 0"
|
||||
echo "Stripe size: 64KB (optimal for media files)"
|
||||
echo ""
|
||||
|
||||
# Check root privileges
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Error: This script requires root privileges"
|
||||
echo "Run with: sudo bash $0"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Step 1: Install mdadm
|
||||
echo "=== Step 1: Install mdadm ==="
|
||||
apt-get update -qq
|
||||
apt-get install -y mdadm fio sysstat nvme-cli
|
||||
|
||||
echo "✅ mdadm installed"
|
||||
echo ""
|
||||
|
||||
# Step 2: Check NVMe disks
|
||||
echo "=== Step 2: Check NVMe disks ==="
|
||||
echo "Listing all NVMe devices:"
|
||||
nvme list
|
||||
|
||||
echo ""
|
||||
echo "Checking disk health:"
|
||||
for disk in /dev/nvme*n1; do
|
||||
echo "Device: $disk"
|
||||
nvme smart-log $disk | grep -E "(temperature|available_spare|percentage_used)"
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "⚠️ WARNING: All data on these disks will be DESTROYED!"
|
||||
echo "Press Ctrl+C to cancel, or Enter to continue..."
|
||||
read -r
|
||||
|
||||
# Step 3: Wipe disk metadata
|
||||
echo "=== Step 3: Wipe disk metadata ==="
|
||||
DISKS=$(ls /dev/nvme*n1 | head -n 4)
|
||||
echo "Target disks: $DISKS"
|
||||
|
||||
for disk in $DISKS; do
|
||||
echo "Wiping $disk..."
|
||||
wipefs -a $disk
|
||||
mdadm --zero-superblock $disk
|
||||
echo "✅ $disk wiped"
|
||||
done
|
||||
|
||||
echo ""
|
||||
|
||||
# Step 4: Create RAID 0 array
|
||||
echo "=== Step 4: Create RAID 0 array ==="
|
||||
echo "RAID parameters:"
|
||||
echo " Level: 0 (stripe)"
|
||||
echo " Stripe size: 64KB (optimal for 4K video editing)"
|
||||
echo " Disks: 4 NVMe SSDs"
|
||||
echo ""
|
||||
|
||||
# Create RAID 0 with 64KB stripe size
|
||||
mdadm --create /dev/md0 \
|
||||
--level=0 \
|
||||
--raid-devices=4 \
|
||||
--chunk=64 \
|
||||
$DISKS
|
||||
|
||||
echo "✅ RAID 0 array created: /dev/md0"
|
||||
echo ""
|
||||
|
||||
# Step 5: Check RAID status
|
||||
echo "=== Step 5: Check RAID status ==="
|
||||
mdadm --detail /dev/md0
|
||||
|
||||
echo ""
|
||||
echo "RAID configuration:"
|
||||
cat /proc/mdstat
|
||||
|
||||
echo ""
|
||||
|
||||
# Step 6: Create filesystem
|
||||
echo "=== Step 6: Create filesystem ==="
|
||||
echo "Creating XFS filesystem (optimized for large files)..."
|
||||
|
||||
mkfs.xfs -f \
|
||||
-d su=64k,sw=4 \
|
||||
-L "raid0_media" \
|
||||
/dev/md0
|
||||
|
||||
echo "✅ XFS filesystem created"
|
||||
echo ""
|
||||
|
||||
# Step 7: Mount RAID array
|
||||
echo "=== Step 7: Mount RAID array ==="
|
||||
mkdir -p /mnt/raid0_media
|
||||
|
||||
mount -t xfs \
|
||||
-o noatime,nodiratime,largeio,inode64 \
|
||||
/dev/md0 /mnt/raid0_media
|
||||
|
||||
echo "✅ RAID 0 mounted at /mnt/raid0_media"
|
||||
echo ""
|
||||
|
||||
# Step 8: Save RAID configuration
|
||||
echo "=== Step 8: Save RAID configuration ==="
|
||||
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
|
||||
update-initramfs -u -k all
|
||||
|
||||
echo "✅ RAID configuration saved to /etc/mdadm/mdadm.conf"
|
||||
echo " (Will auto-start on reboot)"
|
||||
echo ""
|
||||
|
||||
# Step 9: Add to fstab (optional)
|
||||
echo "=== Step 9: Add to fstab ==="
|
||||
UUID=$(blkid /dev/md0 | grep -o 'UUID="[a-f0-9-]*"' | cut -d'"' -f2)
|
||||
echo "UUID: $UUID"
|
||||
|
||||
echo "Add this line to /etc/fstab for auto-mount:"
|
||||
echo "UUID=$UUID /mnt/raid0_media xfs noatime,nodiratime,largeio,inode64 0 0"
|
||||
echo ""
|
||||
|
||||
# Step 10: Performance test
|
||||
echo "=== Step 10: Performance test ==="
|
||||
echo "Running fio benchmark..."
|
||||
echo ""
|
||||
|
||||
# Sequential read test
|
||||
echo "Test 1: Sequential read (1GB file, 4K block)"
|
||||
fio --name=seq_read \
|
||||
--filename=/mnt/raid0_media/test_1g.dat \
|
||||
--size=1G \
|
||||
--bs=4k \
|
||||
--rw=read \
|
||||
--direct=1 \
|
||||
--numjobs=1 \
|
||||
--group_reporting
|
||||
|
||||
echo ""
|
||||
|
||||
# Sequential write test
|
||||
echo "Test 2: Sequential write (1GB file, 64K block)"
|
||||
fio --name=seq_write \
|
||||
--filename=/mnt/raid0_media/test_1g_write.dat \
|
||||
--size=1G \
|
||||
--bs=64k \
|
||||
--rw=write \
|
||||
--direct=1 \
|
||||
--numjobs=1 \
|
||||
--group_reporting
|
||||
|
||||
echo ""
|
||||
|
||||
# Random IOPS test
|
||||
echo "Test 3: Random IOPS (4K blocks)"
|
||||
fio --name=rand_iops \
|
||||
--filename=/mnt/raid0_media/test_rand.dat \
|
||||
--size=1G \
|
||||
--bs=4k \
|
||||
--rw=randrw \
|
||||
--rwmixread=70 \
|
||||
--direct=1 \
|
||||
--numjobs=4 \
|
||||
--group_reporting
|
||||
|
||||
echo ""
|
||||
|
||||
echo "=== Deployment Complete ==="
|
||||
echo ""
|
||||
echo "RAID 0 Summary:"
|
||||
echo " Array: /dev/md0"
|
||||
echo " Mount: /mnt/raid0_media"
|
||||
echo " Stripe size: 64KB"
|
||||
echo " Total disks: 4"
|
||||
echo " Expected read: 28 GB/s (7000 × 4)"
|
||||
echo " Expected write: 20 GB/s (5000 × 4)"
|
||||
echo ""
|
||||
echo "⚠️ RAID 0 Warning:"
|
||||
echo " - No redundancy (single disk failure = total data loss)"
|
||||
echo " - Use for scratch space, cache, or non-critical data"
|
||||
echo " - Consider RAID 10 or RAID 5 for critical data"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " 1. Copy test files to /mnt/raid0_media"
|
||||
echo " 2. Run AJA System Test or dd benchmarks"
|
||||
echo " 3. Configure iSCSI/NFS export for remote access"
|
||||
echo " 4. Integrate with MarkBase WebDAV"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user