/var/www/html/index.html
外观
外观
约 3553 字大约 12 分钟
存储文件系统挂载tar
2026-07-30
[Windows PowerShell] wsl ~:打开本机默认的 WSL2 Ubuntu;出现 用户名@主机名:~$ 后再执行标为 [WSL] 的命令。[WSL] ssh root@你的ECS公网IP:从 WSL 连接自己的 ECS;如果登录用户不是 root,请换成控制台显示的实际用户,看到远端提示符后再执行标为 [ECS] 的命令。第三次课已经把课程学习站发布到了 Nginx。接着自然要问:万一首页被误删,站点还能恢复吗?
本课做的事情:把 /var/www/html 打成带时间戳的归档,生成 SHA-256 校验值,传到 WSL,然后在隔离目录里走一遍“删了再恢复”的完整测试。
完成后应留下:
安全边界
恢复练习只删除 ~/cloud-course/lab-04/restore-test 中的测试文件,不删除在线站点 /var/www/html。创建快照和 OSS 资源可能产生费用,本课只讲用途,不要求学生自行购买。
在 Linux 中,站点文件经过以下关系落到云盘:
/var/www/html/index.html
-> 目录与文件
-> 文件系统
-> 挂载点
-> 分区或逻辑块设备
-> ECS 云盘几个概念对应不同的存储层级:
观看时留意:三种存储分别向使用者暴露磁盘块、目录文件还是对象接口?
与本课的关系:视频解释存储类型。备份、快照和恢复粒度的区别继续按正文中的故障范围判断。
用下面三条命令查看这条关系:
lsblk -f:查看块设备、文件系统类型和挂载点。findmnt /:查看根目录来自哪个设备、使用什么文件系统。df -hT /var/www/html:查看站点所在文件系统的类型、容量和使用率。[ECS] lsblk -f
[ECS] findmnt /
[ECS] df -hT /var/www/html这三条命令能确认站点落在哪个文件系统、哪块云盘上,但不能代替备份。云盘正常工作只说明当前数据还能读。
文件归档
tar(归档打包工具)、sha256sum。云盘快照
OSS 对象存储
关键提醒
备份位置与原数据在同一块云盘时,只能应对部分文件误操作,不能应对整块云盘不可用。恢复目标不同,备份方式也应不同。
交互式模拟
从 index.html 一直追到文件系统、挂载点和 ECS 云盘,再比较快照与 OSS。
◌ 设备名和目录关系是课程示意,实际结果以自己的 lsblk、findmnt 和 df 输出为准。
Nginx 站点首页是目录树中的一个普通文件。
/var/www/html/index.html
负责目录、权限和空间组织。
把文件系统接入目录树。
向操作系统提供块设备。
云盘某个时间点的数据状态。
独立上传和管理的对象。
光拿到一个 .tar.gz 压缩包,离“备份可用”还有相当长的距离。一套合格的备份至少要经受住 5 个维度的检验:
本课对应的防线与工具:
tar -tzf:只读列出压缩包内的目录与文件树,免解压核验;sha256sum:计算文件内容的哈希摘要,比对指纹;scp:基于已建立的加密 SSH 频道安全传输数据;diff:逐行比对恢复出来的副本与生产源文件。需要清楚的是:校验和相同,仅代表那一刻两份文件的字节完全一致。它无法证明打包的内容本身有没有漏文件,也无法代替真实的解压恢复演练。
备份前先确认目标、来源和容量:
whoami、hostname、pwd:确认账号、主机和当前目录。du -sh /var/www/html:估算站点目录当前占用。find /var/www/html -maxdepth 2 -type f -print:查看两层范围内有哪些普通文件。df -hT "$HOME":确认备份目标所在文件系统有可用空间。[ECS] whoami
[ECS] hostname
[ECS] pwd
[ECS] du -sh /var/www/html
[ECS] find /var/www/html -maxdepth 2 -type f -print
[ECS] df -hT "$HOME"确认 /var/www/html/index.html 是第三次课发布的页面。来源目录或目标空间没搞清楚之前,不要创建归档。
下面的真实案例没有读取共享主机的 /var/www/html,而是检查了课程专用目录 /opt/xpk-course-demos/lesson-03-04-capture/site。lsblk 和 findmnt 先确认目录落在 /dev/vda1 的 ext4 根文件系统上;df 再确认捕获时可用空间为 34G;du 与 find 最后把备份范围收窄到 8.0K 的 site/index.html。
云主机 B 课程站点目录的块设备、文件系统和容量基线。展示从 lsblk 到 find 的完整存储检查链路。
root@SYG680400:~$ lsblk -fNAME FSTYPE LABEL FSAVAIL FSUSE% MOUNTPOINTSvda├─vda1 ext4 cloudimg-rootfs 33.9G 42% /└─vda15 vfat UEFI 98.3M 6% /boot/efi“查看块设备”保留了完整命令和与它相邻的输出。判断时应直接引用输出中的字段或状态,不要把步骤名称当成结论。 记录说明:loop 与光驱设备已从教学截图中节选,未改变原始数值
这一步是“课程目录位于 /dev/vda1 的 ext4 根文件系统,捕获时可用 34G、使用率 42%,源目录为 8.0K 且只有 index.html”证据链中的一环。
数值只代表捕获时刻和教师云主机;未展示磁盘 I/O 性能、云盘类型、快照或其他目录内容

整页截图与上方分步卡片来自同一条记录;敏感字段已经遮盖,较长命令可能经过换行排版。
先建立课程备份目录,再用变量保存本次文件名:
[ECS] mkdir -p ~/cloud-course/backups ~/cloud-course/lab-04
[ECS] backup_name="nginx-site-$(date +%Y%m%d-%H%M%S).tar.gz"
[ECS] backup_path="$HOME/cloud-course/backups/$backup_name"
[ECS] printf 'backup_name=%s\n' "$backup_name"文件名里嵌入时间戳,是为了区分多次备份。变量只在当前 Shell 会话里有效,重新打开终端后需要按实际文件名重新赋值。
创建归档:
[ECS] tar -czf "$backup_path" -C /var/www html各参数含义:
-c:创建归档。-z:使用 gzip 压缩。-f:后面跟归档文件名。因为 -f 必须紧接文件名,它在组合参数中必须放在最后——-czf 正确,-fcz 会让 tar 把 z 当成文件名。-C /var/www:先切换归档基准目录。html:只把 /var/www/html 作为相对路径写入归档。创建后检查文件大小和归档目录:
[ECS] ls -lh "$backup_path"
[ECS] tar -tzf "$backup_path" | sed -n '1,30p'归档列表里应该有 html/ 和 html/index.html。如果列表路径跟预期不符,停在这里,不要继续传或恢复。
进入备份目录,以相对文件名生成校验文件:
[ECS] cd ~/cloud-course/backups
[ECS] sha256sum "$backup_name" | tee "$backup_name.sha256"
[ECS] chmod 600 "$backup_name" "$backup_name.sha256"
[ECS] sha256sum -c "$backup_name.sha256"输出 OK 表示当前备份包与校验文件中的摘要一致。
SHA-256 校验文件要和备份包一起保存。如果只截图保存摘要,不仅容易抄错,也无法用于自动验证。
scp 通过 SSH 连接传输文件,不需要额外开放 FTP 端口。传输前需记录 ECS 中 backup_name 的实际值。
在 WSL 中建立接收目录,并填写自己的登录目标与备份文件名:
[WSL] mkdir -p ~/cloud-course/lab-04-received
[WSL] cd ~/cloud-course/lab-04-received
[WSL] ECS_TARGET="登录用户名@自己的ECS公网地址"
[WSL] BACKUP_NAME="填写ECS中显示的备份文件名"传输备份包和校验文件:
[WSL] scp "$ECS_TARGET:cloud-course/backups/$BACKUP_NAME" .
[WSL] scp "$ECS_TARGET:cloud-course/backups/$BACKUP_NAME.sha256" .
[WSL] ls -lh
[WSL] sha256sum -c "$BACKUP_NAME.sha256"WSL 中再次输出 OK,说明传输后的备份包与 ECS 生成校验文件时内容一致。
安全边界
不要为传文件额外开放 FTP、Samba 或任意高位端口。SCP 复用现有 SSH 访问;私钥和密码仍然不能放入命令记录、Word 或 AI 对话。
观看时留意:命令中的源路径、目标路径和远程主机标记各在什么位置?
与本课的关系:传输前先确认方向和文件名,传输后仍要用大小或 SHA-256 检查结果。
案例把课程站点打包为 nginx-site-20260728-081700.tar.gz,先在云主机检查目录和 SHA-256,再用 SCP 传到本地控制端。案例中的 [CTRL] 是 macOS 控制端,不是学生 WSL;个人实训仍应在自己的 WSL 中完成同一组接收与 sha256sum -c 检查。
在云主机 B 创建站点归档和 SHA-256 校验,经 SCP 传到教师 macOS 控制端后再次校验。
...$ tar -czf nginx-site-20260728-081700.tar.gz -C /opt/xpk-course-demos/lesson-03-04-capture site-rw-r--r-- 1 root root 860 Jul 28 08:15 nginx-site-20260728-081700.tar.gz“创建站点归档”保留了完整命令和与它相邻的输出。判断时应直接引用输出中的字段或状态,不要把步骤名称当成结论。
这一步是“860 字节站点归档包含 site/index.html,远端校验通过,经 SCP 到控制端后再次通过相同 SHA-256 校验”证据链中的一环。
控制端是教师 macOS,不是学生 WSL;小文件传输成功不能证明大规模备份速度、异地容灾或长期保留

整页截图与上方分步卡片来自同一条记录;敏感字段已经遮盖,较长命令可能经过换行排版。
恢复测试不覆盖在线站点。先回到 ECS,重新指定实际备份文件名:
[ECS] cd ~/cloud-course/backups
[ECS] backup_name="填写本次实际备份文件名"
[ECS] backup_path="$PWD/$backup_name"
[ECS] restore_dir="$HOME/cloud-course/lab-04/restore-test"
[ECS] mkdir -p "$restore_dir"解压并检查:
[ECS] tar -xzf "$backup_path" -C "$restore_dir"
[ECS] find "$restore_dir" -maxdepth 3 -type f -print
[ECS] diff -u /var/www/html/index.html "$restore_dir/html/index.html"diff 没有输出,说明两份 index.html 内容一致。注意:这只是测试目录中的恢复文件跟当前在线文件一致,不代表其他文件也没问题。
在删除测试文件前,先确认它位于隔离目录:
[ECS] realpath "$restore_dir/html/index.html"
[ECS] ls -l "$restore_dir/html/index.html"确认路径位于 ~/cloud-course/lab-04/restore-test 后,删除测试副本:
[ECS] rm "$restore_dir/html/index.html"
[ECS] test ! -e "$restore_dir/html/index.html" && echo "测试文件已删除"从归档恢复这一个文件,再比较内容:
[ECS] tar -xzf "$backup_path" -C "$restore_dir" html/index.html
[ECS] test -f "$restore_dir/html/index.html" && echo "测试文件已恢复"
[ECS] diff -u /var/www/html/index.html "$restore_dir/html/index.html"从创建归档开始,经过目录检查、校验、传输和隔离恢复,形成完整闭环。
[ECS] tar -czf nginx-site-日期时间.tar.gz -C /var/www html
交互式模拟
备份包只有经过内容检查、校验、传输和隔离恢复,才能证明它真的可用。
◌ 流程在模拟目录中演示,不会删除或覆盖在线站点 /var/www/html。
先核对站点目录、文件清单和目标空间,避免从错误位置打包。
/var/www/html
尚未创建。
尚未生成。
尚未开始。
只允许写入测试目录。
尚未执行。
[ECS] find /var/www/html -maxdepth 2 -type f -print同一备份随后只在课程专用的 restore-test 中解压。第一次 diff 证明隔离副本与源文件一致;删除的也是隔离副本;从归档恢复指定成员后再次比对,并检查 lesson03-nginx-ok 页面标记。整个过程没有覆盖在线站点。
在云主机 B 的隔离 restore-test 目录中解压归档,比对恢复文件与源文件,演练删后恢复。
...$ tar -xzf nginx-site-20260728-081700.tar.gz -C restore-test/opt/xpk-course-demos/lesson-03-04-capture/lesson-04/restore-test/site/index.html“解压到隔离目录”保留了完整命令和与它相邻的输出。判断时应直接引用输出中的字段或状态,不要把步骤名称当成结论。
这一步是“归档可解压到隔离目录,首次内容一致;删除隔离副本后可只恢复 index.html,恢复结果与源文件一致且保留发布标记”证据链中的一环。
只恢复课程静态文件副本,不覆盖正在运行的源目录,也不包含数据库、权限、属主、SELinux 或应用一致性检查

整页截图与上方分步卡片来自同一条记录;敏感字段已经遮盖,较长命令可能经过换行排版。
文件误删,但 ECS 和云盘正常
云盘损坏、实例无法启动或需要整盘回退
判断标准就一句话:
要恢复的是一个文件、一组目录,还是一整块云盘?恢复粒度决定工具选择,不是越“云”就越好。
输入脱敏后的归档、校验、传输或恢复记录,让助教指出现有证据能证明什么。
本实验的原始聊天仅保存在当前标签页,不会写入全局课程助教上下文。
实训包含五项任务:
ECS 暂不可用时,可以在 WSL 使用课程提供的合成站点目录完成 tar、校验和恢复流程,并标明运行位置。云盘、挂载和公网服务器证据需要在 ECS 可用后补交。
完整步骤、截图清单和验收脚本见实训 04:备份并恢复课程学习站。最终提交:
班级_学号_姓名_第04次课_站点备份恢复报告.docx报告需依次包含存储关系、备份前检查、归档列表、ECS 校验、WSL 传输校验、测试文件删除、恢复结果和两级恢复方案。
检查归档、校验、传输和恢复证据是否支持“备份可用”的结论。
关键提醒
整理完成后,将一个最终 .docx 上传到智慧职教在线平台“第04次课”对应的作业收集中。备份包只保存在自己的 ECS 与 WSL,不上传到智慧职教,也不提交服务器地址和凭据。
小测检查以下判断能力:
用 6 道题检查存储层次、归档、校验、安全传输和恢复策略。
本课完成了课程学习站第一次可验证的备份:
tar 把站点目录整理成可传输的归档文件。tar -tzf 检查归档内容,SHA-256 检查文件在传输前后是否一致。下一次课在现有 Nginx 和备份的基础上,加入 PHP、数据库与 WordPress,搭出课程学习站 v1。
为下一步保留三样交接物:
tar -tzf、SHA-256 与隔离恢复测试的站点归档;第 5 次课会把单一静态服务扩展为 Nginx、PHP-FPM 和 MariaDB 三层应用。届时要继续沿用本课的习惯:变更前留基线,故障时先分层,恢复后沿原路径验证。
助教会读取当前课程页面和结构化学习记录,但不会读取正文实验框里的原始聊天。