101 lines
2.7 KiB
Bash
101 lines
2.7 KiB
Bash
#!/bin/bash
|
|
# 检查ZFS快照脚本
|
|
# 在TrueNAS系统上运行
|
|
|
|
set -e
|
|
|
|
DATASET="PoolOne/apps/youyidian-3d"
|
|
TARGET_DIR="/mnt/PoolOne/apps/youyidian-3d/uploads"
|
|
|
|
echo "=========================================="
|
|
echo "ZFS快照检查脚本"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "目标数据集: $DATASET"
|
|
echo "目标目录: $TARGET_DIR"
|
|
echo ""
|
|
|
|
# 检查数据集是否存在
|
|
if ! zfs list "$DATASET" >/dev/null 2>&1; then
|
|
echo "❌ 错误: 数据集 $DATASET 不存在"
|
|
echo ""
|
|
echo "可用数据集列表:"
|
|
zfs list -o name | grep -E "PoolOne/apps" | head -10
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ 数据集存在"
|
|
echo ""
|
|
|
|
# 检查快照
|
|
echo "🔍 检查快照..."
|
|
echo ""
|
|
SNAPSHOTS=$(zfs list -t snapshot -o name,creation,used "$DATASET" 2>/dev/null | tail -n +2)
|
|
|
|
if [ -z "$SNAPSHOTS" ]; then
|
|
echo "❌ 未找到快照"
|
|
echo ""
|
|
echo "💡 建议:"
|
|
echo " 1. 检查TrueNAS管理界面中的快照设置"
|
|
echo " 2. 考虑从备份文件恢复"
|
|
echo " 3. 检查是否有其他数据集的快照"
|
|
else
|
|
echo "✅ 找到以下快照:"
|
|
echo ""
|
|
echo "$SNAPSHOTS" | while read -r line; do
|
|
echo " $line"
|
|
done
|
|
echo ""
|
|
|
|
# 查找1月13日之前的快照
|
|
echo "🔍 查找1月13日09:15之前的快照..."
|
|
RECENT_SNAPSHOTS=$(echo "$SNAPSHOTS" | awk '$2 <= "2026-01-13 09:15" {print $1}' | tail -5)
|
|
|
|
if [ -n "$RECENT_SNAPSHOTS" ]; then
|
|
echo "✅ 找到相关快照:"
|
|
echo ""
|
|
echo "$RECENT_SNAPSHOTS" | while read -r snap; do
|
|
echo " - $snap"
|
|
done
|
|
echo ""
|
|
echo "💡 可以使用以下命令恢复:"
|
|
echo " zfs clone <快照名> PoolOne/apps/youyidian-3d-recovered"
|
|
echo " 或"
|
|
echo " zfs rollback <快照名>"
|
|
else
|
|
echo "⚠️ 未找到1月13日09:15之前的快照"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "检查父数据集的快照..."
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# 检查父数据集的快照
|
|
PARENT_DATASETS=(
|
|
"PoolOne/apps"
|
|
"PoolOne"
|
|
)
|
|
|
|
for parent in "${PARENT_DATASETS[@]}"; do
|
|
if zfs list "$parent" >/dev/null 2>&1; then
|
|
echo "检查 $parent 的快照..."
|
|
PARENT_SNAPSHOTS=$(zfs list -t snapshot -o name,creation "$parent" 2>/dev/null | tail -n +2 | head -10)
|
|
if [ -n "$PARENT_SNAPSHOTS" ]; then
|
|
echo "$PARENT_SNAPSHOTS" | while read -r line; do
|
|
echo " $line"
|
|
done
|
|
echo ""
|
|
else
|
|
echo " 未找到快照"
|
|
echo ""
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo "=========================================="
|
|
echo "检查完成"
|
|
echo "=========================================="
|