一个快照是整个文件系统或某个目录在某一时刻的镜像,便于在需要时还原到该状态,常用于保护数据、回滚变更等场景。
快照的应用场景包括:防止用户误操作、备份(对某个目录做快照后复制其中的文件到备份)、测试/验证、灾难恢复等。
以下内容以 Hadoop 3.x 环境为例,说明快照的开启、创建、查看、对比与恢复流程。
开启快照
在 /data/test/test_snapshot 目录上开启快照功能,命令示例: hdfs dfs -allowSnapshot /data/test/test_snapshot
[hdfs@cdh-003 ~]$ hdfs dfs -ls /data/test/test_snapshot -Rw-R–R– 2 hdfs supeRgRoup 88 2021-10-08 16:59 /data/test/test_snapshot/ods_User1.txt
说明:目标目录现在具备快照能力,即该目录下会产生用于快照的内部结构。
创建快照
为目录 /data/test/test_snapshot 创建快照,命名为 backup01:
命令示例: hdfs dfs -createSnapshot /data/test/test_snapshot backup01
[hdfs@cdh-003 ~]$ hdfs dfs -ls /data/test/test_snapshot/.snapshot/backup01 Found 1 Items -Rw-R–R– 2 hdfs supeRgRoup 88 2021-10-08 16:59 /data/test/test_snapshot/.snapshot/backup01/ods_User1.txt
由此可见,在开启快照的目录下会新建一个名为 .snapshot 的子目录,里面包含名为 backup01 的快照目录,里面有原始文件的拷贝。
查看快照
如果再上传一个文件,再创建第二个快照以便对比:
创建快照 backup02,表示 .snapshot 目录下会多出一个 backup02 目录:
[hdfs@cdh-003 ~]$ hdfs dfs -ls /data/test/test_snapshot/.snapshot Found 3 Items dRwxR-xR-x – hdfs supeRgRoup 0 2021-10-08 17:04 /data/test/test_snapshot/.snapshot/backup01 dRwxR-xR-x – hdfs supeRgRoup 0 2021-10-08 17:12 /data/test/test_snapshot/.snapshot/backup02
对比快照
在后续操作中,若再上传一个文件,backup02 下的文件数量会多于 backup01,如多出一个文件 uRls.txt:
[hdfs@cdh-003 ~]$ hdfs snapshotDiFF /data/test/test_snapshot backup01 backup02 difference between snapshot backup01 and snapshot backup02 undeR diRecTory /data/test/test_snapshot: M . + ./uRls.txt
如果不小心把某个文件删除,且开启了回收站,则该文件会被移动到回收站;若未开启回收站或回收站已清理,仍然可以通过快照进行恢复:直接 cp 过去即可。
恢复快照
将快照中的文件拷贝回工作目录,例如将 backup01 的 ods_User1.txt 恢复到 /data/test/test_snapshot 中:
命令示例: hdfs dfs -CP /data/test/test_snapshot/.snapshot/backup01/ods_User1.txt /data/test/test_snapshot
