CephFS 子卷备份还原

半兽人 发表于: 2025-11-26   最后更新时间: 2025-11-26 16:11:30  
{{totalSubscript}} 订阅, 11 游览

下面给出 CephFS 子卷(Subvolume)快照在生产环境(尤其是 Kubernetes CSI)中最实用的完整备份/查看/还原命令,直接复制粘贴就能用。

1. 创建快照(备份)

# 普通手动备份
ceph fs subvolume snapshot create myfs pvc-12345678 snap-20251125
ceph fs subvolume snapshot create myfs pvc-12345678 snap-daily-$(date +%F)

# CSI 自动备份时常用的带元数据的快照(推荐)
ceph fs subvolume snapshot create myfs pvc-12345678 snap-20251125 \
    --snapshot-type=cephfs --group-snapshot-id=backup-job-001

2. 查看快照

# 查看某个子卷的所有快照(最常用)
ceph fs subvolume snapshot ls myfs pvc-12345678

# 查看快照详细信息(大小、创建时间等)
ceph fs subvolume snapshot info myfs pvc-12345678 snap-20251125

# 查看快照实际占用的独占空间
ceph fs subvolume snapshot du myfs pvc-12345678 snap-20251125

3. 克隆快照 → 还原到新子卷(生产最常用还原方式)

# 第1步:克隆快照为新的子卷(名字随便取)
ceph fs subvolume snapshot clone myfs pvc-12345678 snap-20251125 \
    myfs restore-pvc-12345678-20251125

# 第2步:查看克隆进度(非常重要!克隆是异步的)
ceph fs clone ls myfs
ceph fs clone status myfs restore-pvc-12345678-20251125

# 第3步:克隆完成后,新的子卷就可以直接用了
# 在 K8s 里可以直接创建一个新的 PVC 指向这个子卷,或者手动挂载测试

4. 一键还原:把快照直接覆盖回原子卷(慎用!会覆盖原数据)

# 强制把快照内容覆盖回原 pvc 子卷(数据会回到快照那个时间点)
ceph fs subvolume snapshot revert myfs pvc-12345678 snap-20251125

5. 删除快照

# 普通删除
ceph fs subvolume snapshot rm myfs pvc-12345678 snap-20251125

# 正在被克隆中的快照要强制删
ceph fs subvolume snapshot rm myfs pvc-12345678 snap-20251125 --force

6. 生产最常用的完整备份+还原脚本示例

#!/bin/bash
FS=myfs
VOL=pvc-12345678
SNAP=snap-$(date +%F-%H%M%S)

# 1. 备份
ceph fs subvolume snapshot create $FS $VOL $SNAP

# 2. 克隆为新子卷用于灾备或测试
ceph fs subvolume snapshot clone $FS $VOL $SNAP $FS ${VOL}-restore-$SNAP

# 3. 等待克隆完成(轮询)
while true; do
    status=$(ceph fs clone status $FS ${VOL}-restore-$SNAP | jq -r .status)
    echo "Clone status: $status"
    [[ "$status" == "complete" ]] && break
    sleep 10
done

echo "备份完成,可用子卷: ${VOL}-restore-$SNAP"

7. Kubernetes CSI 场景下的恢复(给运维最常用)

# 假设你已经有一个快照叫 snap-20251125
# 创建一个新的 PVC,dataSource 指定快照即可自动完成克隆
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: restore-pvc-from-snap
spec:
  storageClassName: cephfs
  dataSource:
    name: csi-snap-pvc-12345678-snap-20251125   # CSI 自动生成的 VolumeSnapshot 名字
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi

这样就覆盖了 CephFS 子卷快照从备份 → 查看 → 克隆还原 → 覆盖还原 → 删除的全流程,99% 的生产场景都用这几条命令搞定。

更新于 2025-11-26
在线,2小时前登录

查看ceph更多相关的文章或提一个关于ceph的问题,也可以与我们一起分享文章