本文目录导读:

- 虚拟机快照(以 VMware Workstation / ESXi 为例)
- 云服务器磁盘快照(以阿里云 CLI / AWS CLI 为例)
- 文件系统快照(ZFS / Btrfs)
- 批量截图/窗口快照(用于报告等)
- 通用型:一键多快照工具(推荐)
- 重要提醒(针对批量快照)
可以,批量快照是非常实用的功能,尤其在以下场景中很常用:
- 虚拟机环境:对多个 VM 或容器同时做快照(备份/回滚点)。
- 云服务器:对多个 ECS 实例创建磁盘快照。
- 文件系统:对多个目录或文件进行快照(如 ZFS/Btrfs 快照)。
- 设计工具:如对 Sketch/Figma 中的多个图层做快照(导出)。
这里按几种常见的技术对象,给你几个能直接用的实用脚本:
虚拟机快照(以 VMware Workstation / ESXi 为例)
场景:你需要同时对 3 个或更多 Linux/Windows 虚拟机打快照,不能一个一个手动点。
脚本思路:使用 vmrun(VMware 命令行工具)。
Windows 批处理脚本(batch) batch_snapshot.bat:
@echo off
set VMRUN_PATH="C:\Program Files (x86)\VMware\VMware VIX\vmrun.exe"
set SNAPSHOT_NAME="DailyBackup_%date:~0,4%%date:~5,2%%date:~8,2%"
REM 列出你的虚拟机 VMX 文件列表(可以用绝对路径或网络路径)
set VM_LIST=(
"D:\VMs\WebServer\WebServer.vmx"
"D:\VMs\DBServer\DBServer.vmx"
"D:\VMs\CacheServer\CacheServer.vmx"
)
for %%v in %VM_LIST% do (
echo Creating snapshot for %%v as %SNAPSHOT_NAME% ...
%VMRUN_PATH% snapshot %%v %SNAPSHOT_NAME%
)
pause
- 优点:一次性对多个 VM 做快照,自动带上日期。
- 增强版:也可以改成支持从文本文件读取 VM 列表。
云服务器磁盘快照(以阿里云 CLI / AWS CLI 为例)
场景:你有 N 台云服务器的系统盘/数据盘,需要在凌晨做批量快照。
Shell 脚本(Bash),使用阿里云 CLI aliyun:
#!/bin/bash
# 指定要打快照的磁盘 ID 列表(用空格分隔)
DISK_IDS="d-bp1hxxxxxxx01 d-bp1hxxxxxxx02 d-bp1hxxxxxxx03"
# 或者自动获取所有磁盘(需谨慎,建议加入过滤)
# DISK_IDS=$(aliyun ecs DescribeDisks --RegionId cn-hangzhou --PageSize 100 | jq -r '.Disks.Disk[].DiskId')
SNAPSHOT_TAG="BatchBackup_$(date +%Y%m%d%H%M)"
for disk_id in $DISK_IDS; do
echo "Creating snapshot for disk: $disk_id"
aliyun ecs CreateSnapshot \
--DiskId "$disk_id" \
--SnapshotName "${SNAPSHOT_TAG}_${disk_id}"
# 建议加短暂延迟,避免 API 限流
sleep 1
done
echo "All snapshots created."
- 安全提示:建议在测试环境先用
--dry-run测试。 - AWS 版:换成
aws ec2 create-snapshot --volume-id vol-xxx即可。
文件系统快照(ZFS / Btrfs)
场景:如果你用的是 ZFS(FreeBSD/Linux)或 Btrfs(openSUSE/Fedora),你可以瞬间大量快照。
ZFS 脚本(Bash) zfs_batch_snapshot.sh:
#!/bin/bash
# 要快照的数据集列表(空格分隔)
DATASETS="tank/data tank/home tank/backup"
SNAPSHOT_NAME="daily_$(date +%Y%m%d_%H%M%S)"
for ds in $DATASETS; do
echo "Creating snapshot: ${ds}@${SNAPSHOT_NAME}"
zfs snapshot "${ds}@${SNAPSHOT_NAME}"
done
# 可选:删除 7 天前的旧快照
for ds in $DATASETS; do
zfs list -H -o name -t snapshot | grep "${ds}" | grep -v "$(date +%Y%m%d)" | xargs -r zfs destroy
done
- 快感来源:ZFS 快照几乎是瞬间完成的(Copy-on-Write),搞几百个数据集的快照也就一两秒。
批量截图/窗口快照(用于报告等)
场景:你有一堆窗口程序或网页,需要给它们批量截图。
PowerShell 脚本(Windows):
# 假设你想截图所有打开的记事本
$notepadWindows = Get-Process notepad | Where-Object { $_.MainWindowHandle -ne 0 }
$notepadWindows | ForEach-Object {
$filename = "Snapshot_$($_.Id)_$([System.DateTime]::Now.ToString('yyyyMMdd_HHmmss')).png"
# 需要 Add-Type 调用 user32.dll 等 API,这里简化展示思路
Write-Host "Taking snapshot of window ID: $($_.Id) -> $filename"
# 实际截图需调用 .NET 的 Graphics.CopyFromScreen 或第三方库
}
- 完整实现需要一些 API 调用,但在有 Python 的环境下,用
pygetwindow+PIL更简单,核心代码只需几行。
通用型:一键多快照工具(推荐)
如果你经常需要做这类操作,可以使用 Python 脚本把逻辑集中起来,支持 CSV 配置文件:
# batch_snapshot.py (简易框架)
import subprocess
import csv
import datetime
def create_vm_snapshot(vm_path, snap_name):
subprocess.run(["vmrun", "snapshot", vm_path, snap_name])
def create_disk_snapshot(disk_id, region):
subprocess.run(["aliyun", "ecs", "CreateSnapshot", "--DiskId", disk_id, "--RegionId", region])
# 从 CSV 读取任务
with open('snapshot_tasks.csv', 'r') as f:
reader = csv.DictReader(f)
for row in reader:
task_type = row['type']
target = row['target']
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
snap_name = f"AutoSnap_{timestamp}"
if task_type == 'vmware':
create_vm_snapshot(target, snap_name)
elif task_type == 'aliyun':
create_disk_snapshot(target, row['region'])
# ...扩展更多类型
print(f"✅ Snapshot created for {target}")
CSV 文件示例 snapshot_tasks.csv:
type,target,region vmware,/path/to/machine.vmx, aliyun,d-bp1xxxxx01,cn-hangzhou aliyun,d-bp1xxxxx02,cn-beijing
重要提醒(针对批量快照)
- 检查依赖:确保命令行工具已安装并配置好(
vmrun、aliyun、aws、zfs)。 - API 频率限制:云服务商通常对批量创建快照有速率限制(如 QPS=10),脚本中加入
sleep 1是良好的习惯。 - 快照是有成本的:无论是存储空间还是费用,批量快照如果长期保留,需要及时清理过期快照。
- 应用一致性:对数据库虚拟机的快照,建议使用静默快照或提前触发锁表/冻结 I/O,否则恢复后数据库可能需要修复。
你需要针对哪种场景(虚拟机/云磁盘/文件系统/截图)的脚本?我可以给你写一个可以直接运行的具体版本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播