$npx -y skills add chaterm/terminal-skills --skill snapshot快照管理
| 1 | # 快照管理 |
| 2 | |
| 3 | ## 概述 |
| 4 | LVM 快照、文件系统快照、云快照管理技能。 |
| 5 | |
| 6 | ## LVM 快照 |
| 7 | |
| 8 | ### 创建快照 |
| 9 | ```bash |
| 10 | # 查看逻辑卷 |
| 11 | lvs |
| 12 | lvdisplay |
| 13 | |
| 14 | # 创建快照 |
| 15 | lvcreate -L 10G -s -n snap_data /dev/vg0/data |
| 16 | |
| 17 | # 创建薄快照 |
| 18 | lvcreate -s -n snap_data /dev/vg0/thin_data |
| 19 | |
| 20 | # 查看快照 |
| 21 | lvs -a |
| 22 | lvdisplay /dev/vg0/snap_data |
| 23 | ``` |
| 24 | |
| 25 | ### 挂载快照 |
| 26 | ```bash |
| 27 | # 挂载只读 |
| 28 | mount -o ro /dev/vg0/snap_data /mnt/snapshot |
| 29 | |
| 30 | # 挂载读写 |
| 31 | mount /dev/vg0/snap_data /mnt/snapshot |
| 32 | ``` |
| 33 | |
| 34 | ### 恢复数据 |
| 35 | ```bash |
| 36 | # 从快照恢复 |
| 37 | lvconvert --merge /dev/vg0/snap_data |
| 38 | |
| 39 | # 恢复前需卸载原卷 |
| 40 | umount /dev/vg0/data |
| 41 | lvconvert --merge /dev/vg0/snap_data |
| 42 | mount /dev/vg0/data /data |
| 43 | ``` |
| 44 | |
| 45 | ### 删除快照 |
| 46 | ```bash |
| 47 | # 卸载并删除 |
| 48 | umount /mnt/snapshot |
| 49 | lvremove /dev/vg0/snap_data |
| 50 | ``` |
| 51 | |
| 52 | ## Btrfs 快照 |
| 53 | |
| 54 | ### 创建快照 |
| 55 | ```bash |
| 56 | # 创建只读快照 |
| 57 | btrfs subvolume snapshot -r /data /snapshots/data_$(date +%Y%m%d) |
| 58 | |
| 59 | # 创建可写快照 |
| 60 | btrfs subvolume snapshot /data /snapshots/data_writable |
| 61 | |
| 62 | # 查看子卷 |
| 63 | btrfs subvolume list / |
| 64 | ``` |
| 65 | |
| 66 | ### 管理快照 |
| 67 | ```bash |
| 68 | # 删除快照 |
| 69 | btrfs subvolume delete /snapshots/data_20240101 |
| 70 | |
| 71 | # 发送快照(备份) |
| 72 | btrfs send /snapshots/data_readonly | btrfs receive /backup/ |
| 73 | |
| 74 | # 增量发送 |
| 75 | btrfs send -p /snapshots/old /snapshots/new | btrfs receive /backup/ |
| 76 | ``` |
| 77 | |
| 78 | ## ZFS 快照 |
| 79 | |
| 80 | ### 创建快照 |
| 81 | ```bash |
| 82 | # 创建快照 |
| 83 | zfs snapshot pool/dataset@snap_$(date +%Y%m%d) |
| 84 | |
| 85 | # 递归创建 |
| 86 | zfs snapshot -r pool/dataset@snap_name |
| 87 | |
| 88 | # 查看快照 |
| 89 | zfs list -t snapshot |
| 90 | ``` |
| 91 | |
| 92 | ### 管理快照 |
| 93 | ```bash |
| 94 | # 回滚 |
| 95 | zfs rollback pool/dataset@snap_name |
| 96 | |
| 97 | # 克隆 |
| 98 | zfs clone pool/dataset@snap_name pool/clone_dataset |
| 99 | |
| 100 | # 删除 |
| 101 | zfs destroy pool/dataset@snap_name |
| 102 | |
| 103 | # 发送/接收 |
| 104 | zfs send pool/dataset@snap | zfs receive backup/dataset |
| 105 | ``` |
| 106 | |
| 107 | ## 云快照 |
| 108 | |
| 109 | ### AWS EBS |
| 110 | ```bash |
| 111 | # 创建快照 |
| 112 | aws ec2 create-snapshot \ |
| 113 | --volume-id vol-1234567890abcdef0 \ |
| 114 | --description "Backup $(date +%Y%m%d)" |
| 115 | |
| 116 | # 查看快照 |
| 117 | aws ec2 describe-snapshots --owner-ids self |
| 118 | |
| 119 | # 从快照创建卷 |
| 120 | aws ec2 create-volume \ |
| 121 | --snapshot-id snap-1234567890abcdef0 \ |
| 122 | --availability-zone us-east-1a |
| 123 | |
| 124 | # 删除快照 |
| 125 | aws ec2 delete-snapshot --snapshot-id snap-1234567890abcdef0 |
| 126 | ``` |
| 127 | |
| 128 | ### 阿里云 |
| 129 | ```bash |
| 130 | # 创建快照 |
| 131 | aliyun ecs CreateSnapshot --DiskId d-xxx --SnapshotName backup |
| 132 | |
| 133 | # 查看快照 |
| 134 | aliyun ecs DescribeSnapshots |
| 135 | |
| 136 | # 删除快照 |
| 137 | aliyun ecs DeleteSnapshot --SnapshotId s-xxx |
| 138 | ``` |
| 139 | |
| 140 | ## 常见场景 |
| 141 | |
| 142 | ### 场景 1:数据库一致性快照 |
| 143 | ```bash |
| 144 | #!/bin/bash |
| 145 | # MySQL + LVM 快照 |
| 146 | mysql -e "FLUSH TABLES WITH READ LOCK;" |
| 147 | lvcreate -L 10G -s -n db_snap /dev/vg0/mysql_data |
| 148 | mysql -e "UNLOCK TABLES;" |
| 149 | |
| 150 | # 备份快照 |
| 151 | mount -o ro /dev/vg0/db_snap /mnt/snap |
| 152 | tar -czvf /backup/mysql_$(date +%Y%m%d).tar.gz /mnt/snap |
| 153 | umount /mnt/snap |
| 154 | lvremove -f /dev/vg0/db_snap |
| 155 | ``` |
| 156 | |
| 157 | ### 场景 2:自动快照脚本 |
| 158 | ```bash |
| 159 | #!/bin/bash |
| 160 | # Btrfs 自动快照 |
| 161 | SNAP_DIR="/snapshots" |
| 162 | MAX_SNAPS=7 |
| 163 | |
| 164 | # 创建快照 |
| 165 | btrfs subvolume snapshot -r /data ${SNAP_DIR}/data_$(date +%Y%m%d_%H%M) |
| 166 | |
| 167 | # 清理旧快照 |
| 168 | ls -1d ${SNAP_DIR}/data_* | head -n -${MAX_SNAPS} | xargs -r btrfs subvolume delete |
| 169 | ``` |
| 170 | |
| 171 | ### 场景 3:快照前后钩子 |
| 172 | ```bash |
| 173 | #!/bin/bash |
| 174 | # 快照前 |
| 175 | systemctl stop application |
| 176 | sync |
| 177 | |
| 178 | # 创建快照 |
| 179 | lvcreate -L 5G -s -n app_snap /dev/vg0/app_data |
| 180 | |
| 181 | # 快照后 |
| 182 | systemctl start application |
| 183 | ``` |
| 184 | |
| 185 | ## 故障排查 |
| 186 | |
| 187 | | 问题 | 排查方法 | |
| 188 | |------|----------| |
| 189 | | 快照空间满 | 扩展快照、减少变更 | |
| 190 | | 快照失效 | 检查 COW 空间 | |
| 191 | | 恢复失败 | 检查卷状态、依赖 | |
| 192 | | 性能下降 | 减少快照数量 | |
| 193 | |
| 194 | ```bash |
| 195 | # LVM 快照状态 |
| 196 | lvs -a -o +snap_percent |
| 197 | |
| 198 | # Btrfs 空间 |
| 199 | btrfs filesystem df / |
| 200 | btrfs filesystem usage / |
| 201 | |
| 202 | # ZFS 空间 |
| 203 | zfs list -o space |
| 204 | ``` |