下面给出 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% 的生产场景都用这几条命令搞定。
