| name | snapshot |
| description | 快照管理 |
| version | 1.0.0 |
| author | terminal-skills |
| tags | ["backup","snapshot","lvm","btrfs","zfs","cloud"] |
快照管理
概述
LVM 快照、文件系统快照、云快照管理技能。
LVM 快照
创建快照
lvs
lvdisplay
lvcreate -L 10G -s -n snap_data /dev/vg0/data
lvcreate -s -n snap_data /dev/vg0/thin_data
lvs -a
lvdisplay /dev/vg0/snap_data
挂载快照
mount -o ro /dev/vg0/snap_data /mnt/snapshot
mount /dev/vg0/snap_data /mnt/snapshot
恢复数据
lvconvert --merge /dev/vg0/snap_data
umount /dev/vg0/data
lvconvert --merge /dev/vg0/snap_data
mount /dev/vg0/data /data
删除快照
umount /mnt/snapshot
lvremove /dev/vg0/snap_data
Btrfs 快照
创建快照
btrfs subvolume snapshot -r /data /snapshots/data_$(date +%Y%m%d)
btrfs subvolume snapshot /data /snapshots/data_writable
btrfs subvolume list /
管理快照
btrfs subvolume delete /snapshots/data_20240101
btrfs send /snapshots/data_readonly | btrfs receive /backup/
btrfs send -p /snapshots/old /snapshots/new | btrfs receive /backup/
ZFS 快照
创建快照
zfs snapshot pool/dataset@snap_$(date +%Y%m%d)
zfs snapshot -r pool/dataset@snap_name
zfs list -t snapshot
管理快照
zfs rollback pool/dataset@snap_name
zfs clone pool/dataset@snap_name pool/clone_dataset
zfs destroy pool/dataset@snap_name
zfs send pool/dataset@snap | zfs receive backup/dataset
云快照
AWS EBS
aws ec2 create-snapshot \
--volume-id vol-1234567890abcdef0 \
--description "Backup $(date +%Y%m%d)"
aws ec2 describe-snapshots --owner-ids self
aws ec2 create-volume \
--snapshot-id snap-1234567890abcdef0 \
--availability-zone us-east-1a
aws ec2 delete-snapshot --snapshot-id snap-1234567890abcdef0
阿里云
aliyun ecs CreateSnapshot --DiskId d-xxx --SnapshotName backup
aliyun ecs DescribeSnapshots
aliyun ecs DeleteSnapshot --SnapshotId s-xxx
常见场景
场景 1:数据库一致性快照
#!/bin/bash
mysql -e "FLUSH TABLES WITH READ LOCK;"
lvcreate -L 10G -s -n db_snap /dev/vg0/mysql_data
mysql -e "UNLOCK TABLES;"
mount -o ro /dev/vg0/db_snap /mnt/snap
tar -czvf /backup/mysql_$(date +%Y%m%d).tar.gz /mnt/snap
umount /mnt/snap
lvremove -f /dev/vg0/db_snap
场景 2:自动快照脚本
#!/bin/bash
SNAP_DIR="/snapshots"
MAX_SNAPS=7
btrfs subvolume snapshot -r /data ${SNAP_DIR}/data_$(date +%Y%m%d_%H%M)
ls -1d ${SNAP_DIR}/data_* | head -n -${MAX_SNAPS} | xargs -r btrfs subvolume delete
场景 3:快照前后钩子
#!/bin/bash
systemctl stop application
sync
lvcreate -L 5G -s -n app_snap /dev/vg0/app_data
systemctl start application
故障排查
| 问题 | 排查方法 |
|---|
| 快照空间满 | 扩展快照、减少变更 |
| 快照失效 | 检查 COW 空间 |
| 恢复失败 | 检查卷状态、依赖 |
| 性能下降 | 减少快照数量 |
lvs -a -o +snap_percent
btrfs filesystem df /
btrfs filesystem usage /
zfs list -o space