Bcachefs 完全指南 / 第 12 章:生产最佳实践
第 12 章:生产最佳实践
理论已尽,实践方始
12.1 是否选择 Bcachefs
12.1.1 决策矩阵
在生产环境中选择文件系统前,回答以下问题:
| 问题 | ext4 | XFS | Btrfs | ZFS | Bcachefs |
|---|
| 需要校验和? | ❌ | ❌ | ✅ | ✅ | ✅ |
| 需要快照? | ❌ | ❌ | ✅ | ✅ | ✅ |
| 需要压缩? | ❌ | ❌ | ✅ | ✅ | ✅ |
| 需要多设备? | ❌ | ❌ | ✅ | ✅ | ✅ |
| 要求最成熟? | ✅ | ✅ | ✅ | ✅ | ❌ |
| 最高性能? | ✅ | ✅ | ❌ | ❌ | ✅ |
| 内核原生? | ✅ | ✅ | ✅ | ❌ | ✅ |
12.1.2 推荐使用 Bcachefs 的场景
✅ 强烈推荐:
1. 个人工作站 / 开发机
- 快照保护代码
- 压缩节省 SSD 空间
- 风险可控
2. 家庭 NAS
- 多设备 + 快照
- 非关键数据
- 学习和实验
3. 测试/开发环境
- 快照快速回滚
- 容器存储
- 可接受一定风险
4. 缓存层 / 临时存储
- 数据丢失影响小
- 性能要求高
- 可随时重建
⚠️ 谨慎使用:
5. 小型生产服务器
- 非核心业务
- 有完善备份
- 团队有 Linux 运维经验
- 内核版本 ≥ 6.10
6. 虚拟化宿主机
- VM 存储
- 快照管理
- 需要性能测试验证
❌ 不推荐:
7. 核心数据库服务器
- 选择 ext4/XFS
- 延迟稳定性更重要
8. 企业级存储系统 (100TB+)
- 选择 ZFS
- 需要更成熟的方案
9. 关键业务系统
- 成熟度不够
- 等待 1-2 年
12.1.3 Bcachefs 成熟度评估
成熟度评估 (2026 年):
功能完整性: ⭐⭐⭐⭐ (85%)
├── 核心功能: ✅ 完整
├── 多设备: ✅ 完整
├── RAID: ✅ 基本完整
├── 快照: ✅ 完整
├── 压缩: ✅ 完整
├── 加密: ✅ 可用
├── send/receive: ❌ 未实现
└── 去重: 🟡 实验性
稳定性: ⭐⭐⭐ (70%)
├── 单设备: ✅ 稳定
├── 多设备: 🟡 大部分稳定
├── 压力测试: 🟡 通过基本测试
└── 长期运行: 🟡 需要更多验证
性能: ⭐⭐⭐⭐ (85%)
├── 顺序 I/O: ✅ 优秀
├── 随机 I/O: ✅ 良好
├── 小文件: ✅ 优秀
└── 大文件: ✅ 良好
工具链: ⭐⭐⭐ (65%)
├── bcachefs-tools: ✅ 功能完整
├── 监控工具: 🟡 基础
├── 图形界面: ❌ 无
└── 第三方集成: 🟡 有限
12.2 部署规范
12.2.1 硬件选型
推荐硬件配置:
存储设备:
┌─────────────────────────────────────────────────┐
│ 推荐 │
├─────────────────────────────────────────────────┤
│ 系统盘: NVMe SSD 256GB+ │
│ 数据盘: SATA SSD 1TB+ (热数据) │
│ 冷存储: HDD 4TB+ (大容量) │
│ 日志盘: NVMe SSD 64GB+ (可选,企业级) │
├─────────────────────────────────────────────────┤
│ 避免 │
├─────────────────────────────────────────────────┤
│ - 低端 SSD (寿命短,掉速严重) │
│ - SMR HDD (叠瓦式,随机写性能差) │
│ - 无 DRAM 缓存的 SSD │
│ - USB 外置硬盘 (不稳定) │
└─────────────────────────────────────────────────┘
内存建议:
最小: 2GB (基本功能)
推荐: 8GB+ (B-Tree 缓存 + 压缩)
理想: 1GB/TB 存储 (大容量场景)
CPU 建议:
最小: 2 核
推荐: 4 核+ (压缩和 GC 需要 CPU)
注意: zstd 压缩对 CPU 敏感
12.2.2 内核版本选择
| 内核版本 | 推荐程度 | 说明 |
|---|
| 6.7-6.9 | ⚠️ 基础 | 初始版本,bug 较多 |
| 6.10-6.11 | ✅ 可用 | 显著稳定性改进 |
| 6.12+ | ✅ 推荐 | LTS 版本,充分测试 |
| 6.14+ | ✅ 最佳 | 最新修复和优化 |
# 检查当前内核版本
uname -r
# 对于生产环境,建议使用 LTS 内核
# Debian: apt install linux-image-amd64
# Ubuntu: 使用 HWE 内核
# Fedora: 使用最新稳定版
# Arch: 默认就是最新
12.2.3 文件系统创建规范
#!/bin/bash
# production-format.sh
set -e
# 配置
DEVICE="/dev/sdb"
LABEL="data.0"
COMPRESSION="zstd"
COMPRESSION_LEVEL=3
CHECKSUM="crc32c"
BLOCK_SIZE="4k"
echo "=== 生产环境文件系统创建 ==="
echo ""
echo "设备: $DEVICE"
echo "压缩: $COMPRESSION (level $COMPRESSION_LEVEL)"
echo "校验和: $CHECKSUM"
echo "块大小: $BLOCK_SIZE"
echo ""
# 确认
read -p "这会清除 $DEVICE 上的所有数据!确认?(y/N) " confirm
if [ "$confirm" != "y" ]; then
echo "取消"
exit 0
fi
# 创建文件系统
sudo bcachefs format \
--label="$LABEL" \
--compression="$COMPRESSION" \
--compression_level="$COMPRESSION_LEVEL" \
--checksum="$CHECKSUM" \
--block_size="$BLOCK_SIZE" \
"$DEVICE"
# 验证
echo ""
echo "验证:"
sudo bcachefs show-super "$DEVICE"
echo ""
echo "=== 创建完成 ==="
12.2.4 挂载规范
# /etc/fstab 生产配置示例
# 单设备
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data bcachefs defaults,noatime,nodiratime,discard,compress=zstd 0 0
# 多设备
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data bcachefs defaults,noatime,nodiratime,discard,compress=zstd,device=/dev/sdb:/dev/sdc 0 0
# 挂载选项说明:
# noatime - 不更新访问时间(性能优化)
# nodiratime - 不更新目录访问时间
# discard - SSD TRIM 支持
# compress - 透明压缩
12.2.5 目录结构规范
# 推荐的目录结构
/data/
├── app/ # 应用程序数据
├── database/ # 数据库文件
├── documents/ # 文档
├── logs/ # 日志
├── backups/ # 本地备份
├── snapshots/ # 快照目录
│ ├── daily/
│ ├── weekly/
│ └── monthly/
└── tmp/ # 临时文件
# 创建目录
sudo mkdir -p /data/{app,database,documents,logs,backups,snapshots/{daily,weekly,monthly},tmp}
12.3 监控方案
12.3.1 监控指标
| 指标 | 说明 | 告警阈值 |
|---|
| 空间使用率 | 已用/总量 | > 85% 告警, > 95% 严重 |
| inode 使用率 | 已用/总量 | > 80% |
| 设备状态 | online/offline/failed | 任何非 online |
| 内核错误 | dmesg 中的错误 | > 0 |
| I/O 延迟 | await 时间 | > 10ms (SSD) |
| 压缩比 | 压缩效果 | < 1.5 (压缩无效果) |
12.3.2 监控脚本
#!/bin/bash
# bcachefs-monitor.sh
set -e
# 配置
MOUNT="/data"
LOG_FILE="/var/log/bcachefs-monitor.log"
ALERT_EMAIL="[email protected]"
SLACK_WEBHOOK="" # 可选
# 函数: 发送告警
send_alert() {
local level="$1"
local message="$2"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] [$level] $message" >> "$LOG_FILE"
# 发送邮件
if [ -n "$ALERT_EMAIL" ]; then
echo "$message" | mail -s "Bcachefs 告警 [$level]" "$ALERT_EMAIL" 2>/dev/null || true
fi
# 发送 Slack 通知
if [ -n "$SLACK_WEBHOOK" ]; then
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"[$level] $message\"}" \
"$SLACK_WEBHOOK" 2>/dev/null || true
fi
}
# 检查挂载状态
if ! mountpoint -q "$MOUNT"; then
send_alert "CRITICAL" "$MOUNT 未挂载"
exit 1
fi
# 检查空间使用
USAGE=$(df --output=pcent "$MOUNT" | tail -1 | tr -d ' %')
if [ "$USAGE" -gt 95 ]; then
send_alert "CRITICAL" "空间使用率 ${USAGE}%"
elif [ "$USAGE" -gt 85 ]; then
send_alert "WARNING" "空间使用率 ${USAGE}%"
fi
# 检查内核错误
ERRORS=$(dmesg | grep -c "bcachefs.*error\|bcachefs.*corrupt" || echo 0)
if [ "$ERRORS" -gt 0 ]; then
send_alert "WARNING" "发现 $ERRORS 个内核错误"
fi
# 检查设备状态
DEVICE_STATUS=$(sudo bcachefs device list "$MOUNT" 2>/dev/null || echo "")
if echo "$DEVICE_STATUS" | grep -q "failed\|offline"; then
send_alert "CRITICAL" "发现故障设备"
fi
# 记录监控数据
echo "[$(date '+%Y-%m-%d %H:%M:%S')] usage=${USAGE}% errors=${ERRORS}" >> "$LOG_FILE"
12.3.3 Prometheus + Grafana
# 自定义 Prometheus 指标收集器
#!/bin/bash
# /var/lib/node_exporter/textfile_collector/bcachefs.prom
MOUNT="/data"
# 空间使用率
USAGE=$(df --output=pcent "$MOUNT" | tail -1 | tr -d ' %')
echo "bcachefs_space_usage_percent $USAGE"
# 总空间
TOTAL=$(df -B1 --output=size "$MOUNT" | tail -1 | tr -d ' ')
echo "bcachefs_space_total_bytes $TOTAL"
# 已用空间
USED=$(df -B1 --output=used "$MOUNT" | tail -1 | tr -d ' ')
echo "bcachefs_space_used_bytes $USED"
# 错误计数
ERRORS=$(dmesg | grep -c "bcachefs.*error" || echo 0)
echo "bcachefs_kernel_errors_total $ERRORS"
12.3.4 日志监控
# 使用 rsyslog 转发 bcachefs 日志
# /etc/rsyslog.d/bcachefs.conf
# 匹配 bcachefs 相关日志
:msg, contains, "bcachefs" /var/log/bcachefs.log
& stop
# 使用 logrotate 管理日志
# /etc/logrotate.d/bcachefs
/var/log/bcachefs.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0644 root root
}
12.4 备份规范
12.4.1 备份策略
推荐备份策略 (3-2-1 原则):
层级 1: 快照 (本地, 每日)
├── 保留 7 天
├── 自动创建
└── 用途: 误操作恢复
层级 2: 本地备份 (每周)
├── 保留 4 周
├── rsync 到不同设备
└── 用途: 设备故障恢复
层级 3: 远程备份 (每月)
├── 保留 12 个月
├── 加密传输
└── 用途: 灾难恢复
12.4.2 快照备份脚本
#!/bin/bash
# backup-snapshot.sh
set -e
MOUNT="/data"
SNAPSHOT_DIR="/data/snapshots"
RETENTION_DAILY=7
RETENTION_WEEKLY=4
RETENTION_MONTHLY=12
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
DAY_OF_WEEK=$(date +%u)
DAY_OF_MONTH=$(date +%d)
# 创建快照
create_snapshot() {
local type="$1"
local name="${type}-${TIMESTAMP}"
echo "创建快照: $name"
sudo bcachefs subvolume snapshot -r "$MOUNT" "$SNAPSHOT_DIR/$type/$name"
}
# 清理旧快照
cleanup_old() {
local type="$1"
local retention="$2"
local count=$(ls "$SNAPSHOT_DIR/$type/" 2>/dev/null | wc -l)
if [ "$count" -gt "$retention" ]; then
ls -dt "$SNAPSHOT_DIR/$type/"* | tail -n +$((retention + 1)) | while read snap; do
echo "删除旧快照: $snap"
sudo bcachefs subvolume delete "$snap"
done
fi
}
# 执行
echo "=== 备份快照 $(date) ==="
# 每日快照
create_snapshot "daily"
cleanup_old "daily" "$RETENTION_DAILY"
# 每周快照 (周日)
if [ "$DAY_OF_WEEK" = "7" ]; then
create_snapshot "weekly"
cleanup_old "weekly" "$RETENTION_WEEKLY"
fi
# 每月快照 (1 号)
if [ "$DAY_OF_MONTH" = "01" ]; then
create_snapshot "monthly"
cleanup_old "monthly" "$RETENTION_MONTHLY"
fi
echo "=== 备份完成 ==="
12.4.3 远程备份脚本
#!/bin/bash
# backup-remote.sh
set -e
# 配置
LOCAL_DATA="/data"
REMOTE_HOST="backup-server"
REMOTE_PATH="/backup/data"
REMOTE_USER="backup"
SSH_KEY="/root/.ssh/backup_key"
LOG_FILE="/var/log/backup-remote.log"
echo "=== 远程备份 $(date) ===" | tee -a "$LOG_FILE"
# 使用 rsync 增量同步
rsync -avz --delete \
-e "ssh -i $SSH_KEY" \
--exclude='snapshots/' \
--exclude='tmp/' \
"$LOCAL_DATA/" \
"${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/" \
2>&1 | tee -a "$LOG_FILE"
echo "=== 备份完成 $(date) ===" | tee -a "$LOG_FILE"
12.4.4 使用 Borgbackup
#!/bin/bash
# backup-borg.sh
set -e
# 配置
export BORG_REPO="ssh://backup@backup-server/backup/borg"
export BORG_PASSPHRASE="your-passphrase"
ARCHIVE_NAME="data-$(date +%Y%m%d-%H%M%S)"
# 初始化仓库(首次)
# borg init --encryption=repokey $BORG_REPO
# 创建备份
borg create \
--verbose \
--stats \
--compression zstd,3 \
--exclude '/data/snapshots' \
--exclude '/data/tmp' \
"::${ARCHIVE_NAME}" \
/data
# 清理旧备份
borg prune \
--keep-daily=7 \
--keep-weekly=4 \
--keep-monthly=12
echo "备份完成: $ARCHIVE_NAME"
12.5 安全规范
12.5.1 加密配置
# 生产环境推荐加密
# 创建加密文件系统
sudo bcachefs format --encrypted /dev/sdb
# 使用内核密钥环管理密钥(更安全)
echo "your-secure-passphrase" | keyctl padd user bcachefs-key "" @u
# 挂载时使用密钥环
sudo mount -t bcachefs --keyloc=keyring /dev/sdb /data
12.5.2 权限管理
# 设置正确的目录权限
sudo chown root:root /data
sudo chmod 755 /data
# 应用数据目录
sudo chown app:app /data/app
sudo chmod 750 /data/app
# 数据库目录
sudo chown postgres:postgres /data/database
sudo chmod 700 /data/database
# 使用 ACL 细化权限
sudo setfacl -R -m g:developers:rwx /data/app
sudo setfacl -R -m g:readonly:rx /data/documents
12.5.3 SELinux / AppArmor
# 如果使用 SELinux
# 设置正确的上下文
sudo semanage fcontext -a -t user_home_t "/data/app(/.*)?"
sudo restorecon -R /data/app
# 如果使用 AppArmor
# 创建自定义配置文件
cat << 'EOF' | sudo tee /etc/apparmor.d/local/bcachefs-data
/data/** rwk,
EOF
12.6 运维规范
12.6.1 变更管理
变更管理流程:
1. 变更申请
├── 描述变更内容
├── 评估风险
└── 制定回滚计划
2. 变更审批
├── 技术评审
└── 业务审批
3. 变更执行
├── 创建快照
├── 执行变更
└── 验证结果
4. 变更确认
├── 监控 24 小时
├── 确认无问题
└── 关闭变更
12.6.2 定期维护
# 每周维护脚本
#!/bin/bash
# weekly-maintenance.sh
set -e
MOUNT="/data"
echo "=== 每周维护 $(date) ==="
# 1. 文件系统检查(dry-run)
echo "文件系统检查..."
sudo bcachefs fsck --dry-run /dev/sdb
# 2. 空间整理
echo "触发 GC..."
sudo bcachefs fs gc "$MOUNT"
# 3. TRIM (SSD)
echo "TRIM..."
sudo fstrim "$MOUNT"
# 4. 清理临时文件
echo "清理临时文件..."
find "$MOUNT/tmp" -type f -mtime +7 -delete
# 5. 检查日志
echo "检查内核日志..."
dmesg | grep -i "bcachefs.*error\|bcachefs.*corrupt" | tail -10
echo "=== 维护完成 ==="
12.6.3 升级策略
内核升级策略:
1. 测试环境验证
├── 在测试环境升级内核
├── 运行 Bcachefs 功能测试
├── 运行性能基准测试
└── 等待 1-2 周观察
2. 生产环境升级
├── 创建完整快照
├── 维护窗口执行
├── 升级后监控
└── 保留回滚能力
3. 回滚计划
├── 保留旧内核
├── 确保可以从旧内核启动
└── 准备回滚脚本
12.7 性能基准
12.7.1 基准测试脚本
#!/bin/bash
# production-benchmark.sh
set -e
MOUNT="/data"
TEST_DIR="$MOUNT/.benchmark"
RESULT_FILE="/var/log/bcachefs-benchmark-$(date +%Y%m%d).txt"
mkdir -p "$TEST_DIR"
echo "=== 生产环境基准测试 ===" | tee "$RESULT_FILE"
echo "时间: $(date)" | tee -a "$RESULT_FILE"
echo "设备: $(mount | grep $MOUNT | awk '{print $1}')" | tee -a "$RESULT_FILE"
echo "" | tee -a "$RESULT_FILE"
# 清理缓存
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
# 测试 1: 顺序写入
echo "--- 顺序写入 ---" | tee -a "$RESULT_FILE"
dd if=/dev/zero of="$TEST_DIR/seq-write" bs=1M count=2048 conv=fdatasync 2>&1 | tail -1 | tee -a "$RESULT_FILE"
# 测试 2: 顺序读取
echo "--- 顺序读取 ---" | tee -a "$RESULT_FILE"
echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null
dd if="$TEST_DIR/seq-write" of=/dev/null bs=1M 2>&1 | tail -1 | tee -a "$RESULT_FILE"
# 测试 3: 随机 I/O (fio)
if command -v fio &>/dev/null; then
echo "--- 随机读取 (4K) ---" | tee -a "$RESULT_FILE"
fio --name=rand-read --ioengine=libaio --rw=randread --bs=4k \
--size=512M --numjobs=1 --runtime=30 --directory="$TEST_DIR" \
--output-format=terse 2>/dev/null | awk -F';' '{print "IOPS: "$8", BW: "$7" KB/s"}' | tee -a "$RESULT_FILE"
echo "--- 随机写入 (4K) ---" | tee -a "$RESULT_FILE"
fio --name=rand-write --ioengine=libaio --rw=randwrite --bs=4k \
--size=512M --numjobs=1 --runtime=30 --directory="$TEST_DIR" \
--output-format=terse 2>/dev/null | awk -F';' '{print "IOPS: "$8", BW: "$7" KB/s"}' | tee -a "$RESULT_FILE"
fi
# 清理
rm -rf "$TEST_DIR"
echo "" | tee -a "$RESULT_FILE"
echo "=== 测试完成 ===" | tee -a "$RESULT_FILE"
12.7.2 性能基线
| 测试项 | NVMe SSD | SATA SSD | HDD |
|---|
| 顺序写入 | 3-5 GB/s | 400-550 MB/s | 150-200 MB/s |
| 顺序读取 | 5-7 GB/s | 500-600 MB/s | 180-220 MB/s |
| 随机读取 (4K) | 500K-800K IOPS | 80K-100K IOPS | 100-200 IOPS |
| 随机写入 (4K) | 400K-600K IOPS | 70K-90K IOPS | 100-150 IOPS |
参考值,实际取决于具体硬件和配置
12.8 容灾与高可用
12.8.1 高可用架构
Bcachefs 高可用方案:
方案 1: 本地 RAID + 备份
┌─────────────────────────────────────┐
│ 服务器 A │
│ ├── Bcachefs (RAID 1, 双副本) │
│ ├── 本地快照 │
│ └── 远程备份 │
└─────────────────────────────────────┘
方案 2: 双机复制
┌───────────────┐ ┌───────────────┐
│ 服务器 A │ ←→ │ 服务器 B │
│ Bcachefs 主 │ │ Bcachefs 备 │
│ (读写) │ │ (只读/备用) │
└───────────────┘ └───────────────┘
使用 rsync/lsyncd 实时同步
方案 3: 分布式存储
┌─────────────────────────────────────────┐
│ GlusterFS / Ceph │
│ ├── 节点 1: Bcachefs │
│ ├── 节点 2: Bcachefs │
│ └── 节点 3: Bcachefs │
│ 分布式复制保证高可用 │
└─────────────────────────────────────────┘
12.8.2 实时同步脚本
#!/bin/bash
# lsyncd-bcachefs.conf
# /etc/lsyncd/lsyncd.conf.lua
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.status",
nodaemon = false,
}
sync {
default.rsyncssh,
source = "/data",
host = "backup-server",
targetdir = "/backup/data",
rsync = {
archive = true,
compress = true,
verbose = true,
},
delay = 15,
}
12.9 何时不用 Bcachefs
12.9.1 不推荐场景
❌ 不推荐使用 Bcachefs 的场景:
1. 核心数据库
原因: 延迟稳定性最重要
替代: ext4, XFS
2. 超大规模存储 (1PB+)
原因: 缺乏大规模验证
替代: ZFS, Ceph
3. 企业关键业务
原因: 成熟度不足,缺乏商业支持
替代: ZFS, ext4
4. 嵌入式系统
原因: 内存和 CPU 限制
替代: ext4, F2FS
5. Windows 双启动
原因: Windows 不支持 Bcachefs
替代: NTFS, exFAT
6. 需要 send/receive
原因: Bcachefs 尚未实现
替代: Btrfs, ZFS
12.9.2 迁移到 Bcachefs 的时机
何时考虑迁移到 Bcachefs:
✅ 当以下条件全部满足时:
□ 内核版本 ≥ 6.10
□ bcachefs-tools ≥ 1.13
□ 非核心业务数据
□ 有完善备份策略
□ 团队有 Linux 运维经验
□ 可接受一定风险
□ 已在测试环境验证
❌ 以下情况不要迁移:
□ 核心生产数据库
□ 没有备份策略
□ 内核版本太旧
□ 无法承受任何停机
12.10 Bcachefs 发展路线图
12.10.1 已实现功能
| 功能 | 状态 | 版本 |
|---|
| 基本文件系统 | ✅ | 6.7 |
| CoW | ✅ | 6.7 |
| 校验和 | ✅ | 6.7 |
| 压缩 | ✅ | 6.7 |
| 快照 | ✅ | 6.7 |
| 多设备 | ✅ | 6.7 |
| 加密 | ✅ | 6.9 |
| RAID | ✅ | 6.10 |
12.10.2 计划功能
| 功能 | 状态 | 预计版本 |
|---|
| send/receive | 🟡 开发中 | TBD |
| 在线去重 | 🟡 实验性 | TBD |
| erasure coding | 🟡 计划中 | TBD |
| NFS 支持改进 | 🟡 进行中 | TBD |
| 性能优化 | 🟡 持续进行 | 每个版本 |
| GUI 工具 | 🔴 计划中 | TBD |
12.11 运维检查清单
12.11.1 日常检查
#!/bin/bash
# daily-check.sh
echo "=== Bcachefs 日常检查 $(date) ==="
echo ""
# 1. 文件系统状态
echo "1. 文件系统状态"
mount | grep bcachefs
echo ""
# 2. 空间使用
echo "2. 空间使用"
df -hT | grep bcachefs
echo ""
# 3. 设备状态
echo "3. 设备状态"
for mount in $(mount | grep bcachefs | awk '{print $3}'); do
echo " $mount:"
sudo bcachefs device list "$mount" 2>/dev/null || echo " 无法获取"
done
echo ""
# 4. 内核日志
echo "4. 最近错误"
dmesg | grep -i "bcachefs.*error\|bcachefs.*corrupt" | tail -5 || echo " 无错误"
echo ""
# 5. 快照状态
echo "5. 快照数量"
ls /data/snapshots/daily/ 2>/dev/null | wc -l
ls /data/snapshots/weekly/ 2>/dev/null | wc -l
ls /data/snapshots/monthly/ 2>/dev/null | wc -l
echo ""
echo "=== 检查完成 ==="
12.11.2 检查清单
每日检查:
□ 文件系统挂载正常
□ 空间使用率 < 85%
□ 无内核错误日志
□ 快照创建成功
□ 备份任务完成
每周检查:
□ 运行 fsck dry-run
□ 检查设备健康状态
□ 验证备份可恢复性
□ 性能基准对比
□ 清理旧快照
每月检查:
□ 内核版本检查
□ bcachefs-tools 更新
□ 灾难恢复演练
□ 容量规划评估
□ 安全审计
12.12 本章总结
全书回顾
| 章节 | 核心内容 |
|---|
| 第 1 章 | Bcachefs 特性与对比 |
| 第 2 章 | 内核配置与工具安装 |
| 第 3 章 | B-Tree / CoW / 架构原理 |
| 第 4 章 | 创建 / 挂载 / 基础操作 |
| 第 5 章 | 快照 / 压缩 / 加密 / RAID |
| 第 6 章 | 多设备 / 分层存储 |
| 第 7 章 | 快照管理与自动化 |
| 第 8 章 | 压缩策略与调优 |
| 第 9 章 | 性能调优 |
| 第 10 章 | Docker 容器集成 |
| 第 11 章 | 故障处理与数据恢复 |
| 第 12 章 | 生产最佳实践 |
核心建议
Bcachefs 生产部署核心建议:
1. 选择合适场景
- 非关键业务优先
- 有备份策略
2. 硬件和软件准备
- 内核 ≥ 6.10
- 足够的内存和 CPU
3. 规范化部署
- 统一的创建和挂载配置
- 清晰的目录结构
4. 完善监控
- 空间、性能、错误
- 告警机制
5. 备份策略
- 3-2-1 原则
- 定期测试恢复
6. 持续学习
- 关注社区动态
- 及时更新
扩展阅读
全书完
感谢阅读本指南。Bcachefs 仍在快速发展中,建议持续关注官方更新。
← 返回目录