假设我有一个有权读取的磁盘映像(可能已分区)。但是,我无权通过环回*安装它。理论上,数据就在那里;但实际上,数据已经存在了。我可以编写类似于 Linux 内核、分区编辑器和mount
自己的代码的代码来解析映像、查找分区、解释文件系统并提取文件。但是 GNU/Linux 系统上已经存在这样的工具了吗?
*真的,我正在编写工具来处理它,并且我不想(a)假设这些工具的用户可以sudo
并且(b)要求它们到达sudo
可能不需要的地方。
(如果答案根据文件系统而变化,ext2-4
对我来说更重要。但是涵盖多个流行文件系统的答案将是首选。)
答案1
7z(来自 p7zip)可以从许多但不是全部常见的 VM 磁盘映像、分区方案和文件格式中解压磁盘和文件系统映像。 https://www.7-zip.org/有列表(并且可以在 Windows 中使用 - p7zip 是 Linux/Posix 端口)
请注意,这通常是一个两步过程:
$ 7z l [raw HD image file]
Path = [raw HD image file]
Type = MBR
Physical Size = 42949672960
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
..... 104857600 104857600 0.ntfs
..... 42842718208 42842718208 1.ntfs
..... 1048576 1048576 2
------------------- ----- ------------ ------------ ------------------------
42948624384 42948624384 3 files
下一步:
$ 7z x [raw image file] 0.ntfs
Extracting archive: [raw Image file]
最后
$ 7z l 0.ntfs
Scanning the drive for archives:
1 file, 104857600 bytes (100 MiB)
Listing archive: 0.ntfs
--
Path = 0.ntfs
Type = NTFS
Physical Size = 104857600
Label = System Reserved
File System = NTFS 3.1
Cluster Size = 4096
Sector Size = 512
Record Size = 1024
Created = 2013-09-10 16:20:30
ID = 591300999067013540
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2013-09-10 16:20:30 ..HS. 262144 262144 [SYSTEM]/$MFT
[Lots of files]
2013-09-10 16:23:30 .RHSA 8192 8192 BOOTSECT.BAK
------------------- ----- ------------ ------------ ------------------------
2014-10-14 16:35:50 23880514 23957604 56 files, 31 folders
2013-09-10 16:20:30 1314956 1318920 3 alternate streams
2014-10-14 16:35:50 25195470 25276524 59 streams
答案2
分机[234]
如果 /dev/whatever 的根目录中有一个文件foo
:
debugfs -f <(echo cat /foo) /dev/whatever | tail -n +2 > /restore/file
一般的做法
一种通用方法是创建一个具有两个磁盘驱动器(原始模式下的文件)的虚拟机,一个是映像(以只读方式提供给虚拟机),另一个用于恢复文件(如果无法使用网络来传输文件) 。
您应该能够从映像启动(如果不能:创建一个具有三个磁盘驱动器的虚拟机,一个用于启动),从而能够轻松访问文件系统。
由于无法挂载,因此必须以某种无需文件系统即可识别的形式写入数据,例如
tar -cf /dev/vdc /etc/passwd
在主机上您可以简单地读取图像文件:
tar -xf imagefile.img
tar
识别存档的末尾并忽略文件的其余部分。