恢复所需文件并保留新增资料

大数据Beginner
立即练习

介绍

工作坊当前的活动安排被意外改成已取消,联系地址文件也丢失了。两个原生快照仍然存在,但较新的一个包含未获批准的草稿。团队需要恢复获准的活动安排,同时保留后来新增的 Paper Folding 活动和未改变的通行说明。

这个独立环境包含全部必需数据,不使用上一个实验的文件。你应已掌握其中练习过的快照路径和普通 HDFS 操作。你将按业务要求选择版本,恢复两个具名对象,并测试真实共享读取。全程使用 Terminal。作者估计需 45 分钟,包含阅读和普通错误修正。

选择获准版本并恢复活动安排

在这一步中,你将比较两个恢复点,只恢复符合公开活动安排的日程文件。打开 Terminal,从本地工作区开始:

cd /home/labex/project

公开活动安排要求房间 A 提供 Printmaking,房间 B 提供 Bookbinding。访客联系地址是 visitors@example.test。草稿不会因为更新就自动获得批准。后来新增的当前文件 late-session.csv 添加了房间 C 的 Paper Folding 活动,必须保留。同时保留 notes.txt、全部提供的快照、普通用户所有权和只读共享。不要重建整个目录。

列出当前文件和原生恢复点:

hdfs dfs -ls /user/labex/snapshot-workshop/team
hdfs dfs -ls /user/labex/snapshot-workshop/team/.snapshot

当前活动安排文件仍在,但 contacts.csv 丢失了。两个快照名为 morning-approved 和 afternoon-draft。比较其中实际保存的活动安排;仅凭名称不足以判断:

hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/schedule.csv
hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/afternoon-draft/schedule.csv

上午版本包含 Printmaking 和 Bookbinding。下午版本把房间 A 的活动改成了 Draft Planning。读取当前活动安排:

hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv

其中包含 A,CANCELLED。因此,正确恢复点是获准的上午版本,而不是最新快照。丢失的文件可以单独恢复,没有理由替换整个目录树。

HDFS 的 -cp 在 HDFS 路径之间复制。-p 保留源文件的时间戳、所有者、组和权限模式;-f 允许替换已存在的指定目标。这里的两个路径都在课程目录内,目标归你所有:

hdfs dfs -cp -p -f /user/labex/snapshot-workshop/team/.snapshot/morning-approved/schedule.csv /user/labex/snapshot-workshop/team/schedule.csv

通过真实 analyst 身份读取恢复后的活动安排:

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv

它现在列出 Printmaking 和 Bookbinding。确认后来新增的当前文件仍然可用:

hdfs dfs -cat /user/labex/snapshot-workshop/team/late-session.csv

它仍然列出 Paper Folding。如果复制提示源不存在,列出那个精确的快照目录并修正源路径,不要创建空文件替代。如果不小心复制了草稿日程,应再次比较两个历史版本,只重做正确的具名文件复制。带 -f 的复制可以安全替换那一个错误版本,不会触及新增活动。

恢复丢失的联系地址并保持只读共享

在这一步中,你将恢复已删除的联系地址,读取完整活动安排,并测试访问边界。继续使用同一个 Terminal。

选择之前,先比较两份历史联系地址文件:

hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/contacts.csv
hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/afternoon-draft/contacts.csv

上午版本包含要求的 visitors@example.test;草稿使用临时地址。把获准的历史文件复制回其丢失的当前路径。目标不存在时无需覆盖选项:

hdfs dfs -cp -p /user/labex/snapshot-workshop/team/.snapshot/morning-approved/contacts.csv /user/labex/snapshot-workshop/team/contacts.csv

如果复制完成后这个目标已经存在,应先读取它。如果内容错误,可沿用第 1 步中范围明确的 -cp -p -f 模式,指定获准的联系地址源文件和这一个目标。不要通过删除整个目录来解决文件已存在的错误。

以共享 analyst 身份读取恢复的联系地址:

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/contacts.csv

使用同一个真实身份读取未改变的说明和新增活动:

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/notes.txt
sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/late-session.csv

说明仍要求保持安静房间开放,新增活动仍是 Paper Folding。这些真实读取使用了保留下来的数据;仅下载到本地并不能修复这份 HDFS 活动安排。

查看目录以及每个当前文件的所有权和权限模式。-ls -d 显示目录条目本身;给 * 加引号,让 HDFS 而非本地 shell 选择文件路径:

hdfs dfs -ls -d /user/labex/snapshot-workshop/team '/user/labex/snapshot-workshop/team/*'

提供的目录使用 750,文件使用 640,所有者为 labex,组为 bigdata。这些模式允许组读取和遍历,但不允许组写入。目录权限同样重要:如果组可以写目录,即使每个文件只读,也能删除或替换文件。

使用预配置 HDFS 的 -test -w 操作,询问某个身份是否具有写入权限。它不会尝试写入。下一条命令应返回非零状态且没有输出,因为 analyst 不应能修改团队目录:

sudo -u analyst /usr/local/bin/hdfs dfs -test -w /user/labex/snapshot-workshop/team

这个预期的非零结果表示边界测试成功;请继续。无关身份不应能够读取私密共享文件。接下来两条命令都应失败并显示 Permission denied:

sudo -u nobody /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv
sudo -u nobody /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/contacts.csv

如果意外修改权限导致 analyst 被拒绝,只修复受影响的课程对象:-chgrp bigdata 设置共享组,-chmod 750 用于团队目录,-chmod 640 用于指定的当前文件。例如,下面这些完整命令只修复联系地址文件和团队目录:

hdfs dfs -chgrp bigdata /user/labex/snapshot-workshop/team/contacts.csv
hdfs dfs -chmod 640 /user/labex/snapshot-workshop/team/contacts.csv
hdfs dfs -chmod 750 /user/labex/snapshot-workshop/team

最后列出完整的当前活动安排目录和保留下来的恢复点:

hdfs dfs -ls /user/labex/snapshot-workshop/team
hdfs dfs -ls /user/labex/snapshot-workshop/team/.snapshot

四份当前文件和两个原始快照都仍存在。你恢复了两个受影响对象,没有丢弃较新的工作。合法替代方法也可以只删除一个已知损坏的当前文件,再复制其历史版本回来,但必须保留相同内容和共享边界。任务不要求特定的命令拼写或编辑器。

总结

你根据业务内容选择获准的历史版本,恢复了一个被修改的文件和一个丢失文件,同时保留后续工作与原始快照。真实 analyst 读取和无关用户被拒绝,证明了共享结果。位于同一个 HDFS 上的快照仍只是恢复手段,不是独立备份,也不能保证抵御整个存储系统的灾难性丢失。