【取证学习】Linux系统的证据收集和分析 解决dd备份磁盘爆掉

目录

一、实验目的

二、实验内容

三.实验仪器及器材

四、实验步骤


一、实验目的

掌握 Linux 系统下使用 dd 进行磁盘镜像备份与恢复的核心技术

熟悉取证分析中文件删除后的数据恢复流程

理解 ext2 文件系统中 inode 与数据块的关联机制。

二、实验内容

磁盘镜像构建与备份

dd 创建 100MB 虚拟磁盘镜像,格式化为 ext2 文件系统,写入测试文件 hello.txt 并记录其 inode 号。

通过 dd 整盘备份并实时压缩,验证压缩率;解压后恢复镜像。

取证场景模拟

删除测试文件 hello.txt ,制造"已删除文件"取证场景。

数据恢复验证

使用 debugfs 分析镜像,定位已删除文件的 inode (如 12 号记录),导出数据块(如 block 265 ),成功恢复 hello.txt

. 实验仪器及器材

VMware Ubuntu 20.04

四、实验步骤

首先要明确压缩、解压文件需要空间,我的虚拟机数据是放在D盘,我首先查看D盘还剩多少空间,还剩一百多个G

接着打开ubuntu 的终端,查看磁盘整体使用情况

bash 复制代码
 df -h
  • 根分区 / 只用了 5%,还有 196G 可用;

  • /home 几乎为空(113M / 265G);

  • 只有 /boot 用了 83%,但 44M 剩余也足够。

查看磁盘

bash 复制代码
lsblk
  • 只有一块物理盘 /dev/sda 500 G

  • 分区情况

    • /dev/sda1 220.6 G → 系统根分区 /

    • /dev/sda2 286 M → /boot

    • /dev/sda3 9 G → 交换分区

    • /dev/sda4 270.1 G → /home(几乎空,仅 113 M 已用)

备份 /dev/sda4/home),但因为实际物理机我只剩一百多个G,所以我根本到时候压缩这个盘之后解压没有那么多空间可以放。所以进行以下方案:
创建工作目录

mkdir -p ~/dd-lab && cd ~/dd-lab

造 100 M 空盘
dd if=/dev/zero of=disk-100M.img bs=1M count=100

2. 格式化成「最简 ext2」并指定 1 KiB 块大小(方便小 block 号)
bash 复制代码
sudo mkfs.ext2 -b 1024 -O ^extent,^dir_index,^sparse_super,^resize_inode disk-100M.img
只写一次文件 → 立即只读卸载
bash 复制代码
sudo mount -o loop disk-100M.img /mnt
echo "Hello DD+GZIP+DebugFS" | sudo tee /mnt/hello.txt
sudo umount /mnt           # 关键:卸载后内核不会再动数据
用 debugfs 内部删除(不触内核回收)
bash 复制代码
sudo debugfs -w disk-100M.img
debugfs:  rm /hello.txt
debugfs:  quit
立刻 dd + gzip 备份(不再挂载!)
bash 复制代码
dd if=disk-100M.img bs=1M status=progress | gzip > disk.gz
解压成恢复镜像
bash 复制代码
gunzip -c disk.gz > disk-restored.img
找回 inode & block 号
bash 复制代码
sudo debugfs disk-restored.img
debugfs:  lsdel

我这里是12

按 q退出,继续在debugfs界面下输入:注意有空格

bash 复制代码
debugfs:  stat <12>

记下 BLOCKS

我这里是265,记得替换成你们的

输入q退出debugfs界面,回到终端

导出真实数据(开始恢复文件)
bash 复制代码
sudo dd if=disk-restored.img of=recovered.txt bs=1024 count=1 skip=XXX

skip后面的xxx为实际的上一步的BLOCKS,比如我的就是265

查看回复的文件内容

bash 复制代码
head -c 22 recovered.txt

确实没错

清理(可选)
bash 复制代码
cd ~ && rm -rf ~/dd-lab

完整实验截图:

恭喜完成!

相关推荐
xiaoye-duck36 分钟前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
一条小小yu41 分钟前
基于数据库唯一索引 + 过期时间的分布式锁
学习
传奇开心果编程1 小时前
【ArkUI 练中学】第15课:UI 界面设计与实战
学习·ui·华为·harmonyos
zx_741484811 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS2 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿2 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
传奇开心果编程3 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
wdfk_prog3 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞3 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
扶风ff3 小时前
练题簿小程序:家庭在线练题,课后复习更简单
学习·小程序