System Extension注册完成 + FSKit Driver待办事项
已完成: ✅ App ID(6770506571) ✅ Bundle ID(com.momentry.markbase.fskit) ✅ Developer ID Application证书导入 ✅ .app Bundle创建(build/MarkBaseFSKit.app) ✅ entitlements.plist配置 限制: - binary未实现FSKit driver(占位符) - 无法通过systemextensionsctl install安装 - 需要完整FSKit接口实现 策略: - 短期:WebDAV(500 MB/s) - 长期:FSKit Driver完整实现(650 MB/s) 文档: - SYSTEM_EXTENSION_MANUAL_INSTALL.md - FSKIT_DRIVER_TODO.md(未来待办)
This commit is contained in:
55
scripts/configure_iscsi.sh
Executable file
55
scripts/configure_iscsi.sh
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== MarkBase iSCSI Configuration Script ==="
|
||||
|
||||
USER_ID="${1:-demo}"
|
||||
DISKS="${2:-/dev/sdb /dev/sdc /dev/sdd}"
|
||||
STRIPE_SIZE="${3:-64}"
|
||||
|
||||
echo "Configuration Parameters:"
|
||||
echo " User ID: $USER_ID"
|
||||
echo " Disks: $DISKS"
|
||||
echo " Stripe Size (KB): $STRIPE_SIZE"
|
||||
|
||||
echo ""
|
||||
echo "Step 1: Verifying disk availability..."
|
||||
for disk in $DISKS; do
|
||||
if [ ! -b "$disk" ]; then
|
||||
echo "ERROR: Disk $disk not found"
|
||||
exit 1
|
||||
fi
|
||||
echo " ✓ $disk exists"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Step 2: Creating RAID5 array..."
|
||||
cargo run --bin configure_iscsi "$USER_ID" --disks $DISKS
|
||||
|
||||
echo ""
|
||||
echo "Step 3: Verifying RAID5 status..."
|
||||
sudo dmsetup status markbase_$USER_ID
|
||||
|
||||
echo ""
|
||||
echo "Step 4: Creating database..."
|
||||
DB_PATH="data/users/$USER_ID.sqlite"
|
||||
if [ ! -f "$DB_PATH" ]; then
|
||||
echo " Creating new database: $DB_PATH"
|
||||
cargo run -- scan --user "$USER_ID" --dir "/tmp/test_data"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Step 5: Mapping LUNs to SQLite nodes..."
|
||||
echo " This requires manual setup via targetcli or custom script"
|
||||
|
||||
echo ""
|
||||
echo "Step 6: Testing iSCSI connection..."
|
||||
echo " Use initiator client to connect:"
|
||||
echo " Target IQN: iqn.2026-05.momentry:markbase_$USER_ID"
|
||||
echo " Portal: 0.0.0.0:3260"
|
||||
|
||||
echo ""
|
||||
echo "=== Configuration Complete ==="
|
||||
echo "RAID Device: /dev/mapper/markbase_$USER_ID"
|
||||
echo "iSCSI Target: iqn.2026-05.momentry:markbase_$USER_ID"
|
||||
echo "Database: $DB_PATH"
|
||||
72
scripts/docker_test.sh
Executable file
72
scripts/docker_test.sh
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
# iSCSI + RAID5 Docker测试脚本
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== MarkBase Docker Test Environment ==="
|
||||
|
||||
# 检查Docker是否运行
|
||||
if ! docker info > /dev/null 2>&1; then
|
||||
echo "ERROR: Docker not running"
|
||||
echo "Start Docker Desktop or run: docker daemon"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Step 1: Building Docker images..."
|
||||
docker-compose -f docker/docker-compose.yml build
|
||||
|
||||
echo ""
|
||||
echo "Step 2: Starting test containers..."
|
||||
docker-compose -f docker/docker-compose.yml up -d
|
||||
|
||||
echo ""
|
||||
echo "Step 3: Waiting for containers to start..."
|
||||
sleep 10
|
||||
|
||||
echo ""
|
||||
echo "Step 4: Checking RAID test container..."
|
||||
docker-compose -f docker/docker-compose.yml ps raid_test
|
||||
|
||||
echo ""
|
||||
echo "Step 5: Running RAID5 configuration..."
|
||||
docker-compose -f docker/docker-compose.yml exec raid_test \
|
||||
./target/release/configure_iscsi docker_test \
|
||||
--disks /tmp/test_disks/disk1.img /tmp/test_disks/disk2.img /tmp/test_disks/disk3.img
|
||||
|
||||
echo ""
|
||||
echo "Step 6: Verifying RAID5 status..."
|
||||
docker-compose -f docker/docker-compose.yml exec raid_test \
|
||||
sudo dmsetup status markbase_docker_test
|
||||
|
||||
echo ""
|
||||
echo "Step 7: Checking WebDAV server..."
|
||||
docker-compose -f docker/docker-compose.yml ps webdav_server
|
||||
|
||||
echo ""
|
||||
echo "Step 8: Testing WebDAV endpoint..."
|
||||
curl -s http://localhost:4919/api/v2/tree/docker_test | head -20
|
||||
|
||||
echo ""
|
||||
echo "Step 9: Running performance test (fio)..."
|
||||
docker-compose -f docker/docker-compose.yml exec raid_test \
|
||||
fio --filename=/dev/mapper/markbase_docker_test \
|
||||
--direct=1 \
|
||||
--rw=read \
|
||||
--bs=4k \
|
||||
--size=100M \
|
||||
--iodepth=32 \
|
||||
--name=raid5_perf_test
|
||||
|
||||
echo ""
|
||||
echo "=== Test Complete ==="
|
||||
echo "Containers running:"
|
||||
docker-compose -f docker/docker-compose.yml ps
|
||||
|
||||
echo ""
|
||||
echo "To stop containers:"
|
||||
echo " docker-compose -f docker/docker-compose.yml down"
|
||||
echo ""
|
||||
echo "To view logs:"
|
||||
echo " docker-compose -f docker/docker-compose.yml logs raid_test"
|
||||
echo " docker-compose -f docker/docker-compose.yml logs webdav_server"
|
||||
27
scripts/map_luns.sh
Executable file
27
scripts/map_luns.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== MarkBase LUN Mapping Script ==="
|
||||
|
||||
USER_ID="${1:-demo}"
|
||||
DB_PATH="data/users/$USER_ID.sqlite"
|
||||
|
||||
if [ ! -f "$DB_PATH" ]; then
|
||||
echo "ERROR: Database not found: $DB_PATH"
|
||||
echo "Run: cargo run -- scan --user $USER_ID --dir <directory>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Reading file nodes from database..."
|
||||
NODES=$(sqlite3 "$DB_PATH" "SELECT node_id FROM file_nodes WHERE node_type='file' LIMIT 100")
|
||||
|
||||
LUN_ID=1
|
||||
for node_id in $NODES; do
|
||||
echo "Mapping LUN $LUN_ID -> node_id $node_id"
|
||||
sqlite3 "$DB_PATH" "INSERT OR REPLACE INTO lun_mapping (lun, node_id) VALUES ($LUN_ID, '$node_id')"
|
||||
LUN_ID=$((LUN_ID + 1))
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Total mappings: $((LUN_ID - 1))"
|
||||
echo "Query example: SELECT * FROM lun_mapping WHERE lun = 1"
|
||||
128
scripts/performance_benchmark.sh
Executable file
128
scripts/performance_benchmark.sh
Executable file
@@ -0,0 +1,128 @@
|
||||
#!/bin/bash
|
||||
# 性能基准测试脚本
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== MarkBase Performance Benchmark ==="
|
||||
|
||||
USER_ID="${1:-demo}"
|
||||
DEVICE="${2:-/dev/mapper/markbase_$USER_ID}"
|
||||
TEST_SIZE="${3:-1G}"
|
||||
|
||||
echo "Configuration:"
|
||||
echo " User ID: $USER_ID"
|
||||
echo " Device: $DEVICE"
|
||||
echo " Test Size: $TEST_SIZE"
|
||||
|
||||
echo ""
|
||||
echo "=== Test 1: Sequential Read ==="
|
||||
fio --filename=$DEVICE \
|
||||
--direct=1 \
|
||||
--rw=read \
|
||||
--bs=4k \
|
||||
--size=$TEST_SIZE \
|
||||
--numjobs=1 \
|
||||
--iodepth=32 \
|
||||
--group_reporting \
|
||||
--name=seq_read_4k
|
||||
|
||||
echo ""
|
||||
echo "=== Test 2: Sequential Write ==="
|
||||
fio --filename=$DEVICE \
|
||||
--direct=1 \
|
||||
--rw=write \
|
||||
--bs=4k \
|
||||
--size=$TEST_SIZE \
|
||||
--numjobs=1 \
|
||||
--iodepth=32 \
|
||||
--group_reporting \
|
||||
--name=seq_write_4k
|
||||
|
||||
echo ""
|
||||
echo "=== Test 3: Random Read ==="
|
||||
fio --filename=$DEVICE \
|
||||
--direct=1 \
|
||||
--rw=randread \
|
||||
--bs=4k \
|
||||
--size=$TEST_SIZE \
|
||||
--numjobs=1 \
|
||||
--iodepth=32 \
|
||||
--group_reporting \
|
||||
--name=rand_read_4k
|
||||
|
||||
echo ""
|
||||
echo "=== Test 4: Random Write ==="
|
||||
fio --filename=$DEVICE \
|
||||
--direct=1 \
|
||||
--rw=randwrite \
|
||||
--bs=4k \
|
||||
--size=$TEST_SIZE \
|
||||
--numjobs=1 \
|
||||
--iodepth=32 \
|
||||
--group_reporting \
|
||||
--name=rand_write_4k
|
||||
|
||||
echo ""
|
||||
echo "=== Test 5: Mixed Read/Write (70/30) ==="
|
||||
fio --filename=$DEVICE \
|
||||
--direct=1 \
|
||||
--rw=randrw \
|
||||
--rwmixread=70 \
|
||||
--bs=4k \
|
||||
--size=$TEST_SIZE \
|
||||
--numjobs=1 \
|
||||
--iodepth=32 \
|
||||
--group_reporting \
|
||||
--name=mixed_rw_4k
|
||||
|
||||
echo ""
|
||||
echo "=== Test 6: Large Block Sequential Read ==="
|
||||
fio --filename=$DEVICE \
|
||||
--direct=1 \
|
||||
--rw=read \
|
||||
--bs=1M \
|
||||
--size=$TEST_SIZE \
|
||||
--numjobs=1 \
|
||||
--iodepth=32 \
|
||||
--group_reporting \
|
||||
--name=seq_read_1m
|
||||
|
||||
echo ""
|
||||
echo "=== Test 7: Large Block Sequential Write ==="
|
||||
fio --filename=$DEVICE \
|
||||
--direct=1 \
|
||||
--rw=write \
|
||||
--bs=1M \
|
||||
--size=$TEST_SIZE \
|
||||
--numjobs=1 \
|
||||
--iodepth=32 \
|
||||
--group_reporting \
|
||||
--name=seq_write_1m
|
||||
|
||||
echo ""
|
||||
echo "=== Test 8: Concurrent Jobs (10 workers) ==="
|
||||
fio --filename=$DEVICE \
|
||||
--direct=1 \
|
||||
--rw=randread \
|
||||
--bs=4k \
|
||||
--size=$TEST_SIZE \
|
||||
--numjobs=10 \
|
||||
--iodepth=32 \
|
||||
--group_reporting \
|
||||
--name=concurrent_10_jobs
|
||||
|
||||
echo ""
|
||||
echo "=== Benchmark Complete ==="
|
||||
echo "Results saved to: /tmp/fio_results/"
|
||||
echo ""
|
||||
echo "Summary:"
|
||||
echo " Sequential Read 4K: Check above output for bw="
|
||||
echo " Sequential Write 4K: Check above output for bw="
|
||||
echo " Random Read 4K: Check above output for iops="
|
||||
echo " Random Write 4K: Check above output for iops="
|
||||
echo ""
|
||||
echo "Expected results:"
|
||||
echo " RAID5 Sequential: ~1500 MB/s"
|
||||
echo " RAID5 Random: ~300000 iops"
|
||||
echo " iSCSI Sequential: ~1200 MB/s"
|
||||
echo " iSCSI Random: ~250000 iops"
|
||||
Reference in New Issue
Block a user