目前我的电脑有 2 * 2TB SSD:
- 第一个只有一个带有 Windows 的 NTFS 分区。
- 第二个有几个分区:Windows 使用的 1 TB NTFS 和 Linux 的 4 个分区:两个大的 EXT4 分区,一个有数据,一个有交换分区,一个有 GRUB 引导加载程序。我需要准备全新的 Linux 安装并清除这 2 个大的 Linux 分区,但我想复制它们,这样我就可以访问一些旧数据。
准备这两个 EXT4 分区的副本以便以后可以访问它们的最佳方法是什么?我实际上不需要从这些副本中恢复工作系统分区,我只需要访问文件,尽管目前我无法决定我需要哪些文件,不需要哪些文件。我有另一个空磁盘,有足够的空间来容纳所有这些文件。我希望尽可能节省空间,但也不想永远等待解压密集的档案。
我考虑了 3 个解决方案:
- 使用一些工具从每个分区创建单个文件。但是,是否可以在不恢复整个分区的情况下访问这些副本中的文件?
- 逐字节复制这些分区。但这不会浪费其他磁盘上的大量空间吗?这些分区上有大量可用空间。
- 只需使用一些文件管理器将所有现有文件复制到另一个磁盘上的准备好的目录中,而无需创建任何特殊分区。如果我以后不需要恢复这些分区,那么该解决方案有什么缺点吗?
答案1
假设您不需要块的磁盘布局的精确副本,并且这只是一个只读副本,我选择的工具是 SquashFS。
顾名思义,SquashFS 是一个文件系统,但除了可以在 Linux 上直接挂载之外,最好将其视为真的奇特的存档格式。除了存储文件之外,它还可以:
- 使用选择的算法(或者根本不使用)对它们进行压缩。
- 独立于文件压缩其自己的内部数据结构(这平均可以获得更好的压缩率,因为压缩器状态不会受到以前的文件/元数据的污染)。
- 检测重复文件并仅存储具有多个硬链接的数据的一个副本。
- Sanely 处理稀疏文件,仅存储实际数据。
- 具有特殊处理以避免在文件末尾浪费部分块的空间。
- 商店满的UNIX 权限和所有权。
- 存储扩展属性,包括对 POSIX ACL、SELinux 安全上下文和其他有用内容的支持。
- 允许完全随机访问文件(无需解析大部分文件系统/档案即可获取靠近末尾的文件)。
这使得它特别适合您所描述的用例类型。
大多数 Linux 系统都具有创建 SquashFS 映像所需的工具,这些工具位于名为 的软件包中squashfs-tools
。创建 SquashFS 映像后,可以通过三种不同的方式访问该映像:
- 几乎所有主流 Linux 发行版都包含 SquashFS 的内核驱动程序,让您可以将 SquashFS 映像视为常规文件系统(但如果您使用某些压缩算法,则需要足够新的内核来读取映像)。
- 大多数 Linux 发行版提供的软件包
squashfuse
可以让您使用 FUSE 将映像作为文件系统挂载,这意味着您不需要 root 访问权限(但性能会稍差)。 squashfs-tools
提供了一个名为的命令unsquashfs
,可用于列出或提取单个文件,就像使用大多数其他存档格式一样。
答案2
但我也不想等待很长时间才能解压密集的档案。
那么不要使用 Tar 作为存档格式。大多数其他存档格式(7z、rar、zip)默认情况下都是非“密集”的,允许直接提取单个文件,而不会显著降低压缩效率。
使用一些工具从每个分区创建单个文件。但是,是否可以在不恢复整个分区的情况下访问这些副本中的文件?
是的,与从实际分区读取完全相同。两者在访问文件方面没有根本区别。
因此,当您有一个包含 ext4 映像的文件时:
在 Linux 上,包含文件系统的文件可以附加到“循环设备”,然后可以像分区一样挂载该设备。(它甚至支持 fstrim,允许您修剪内部文件系统的“空”空间,以便它不占用外部文件系统的空间,只要后者支持稀疏文件。)
大多数其他系统支持安装文件支持的文件系统;即使 Windows 也具有支持 ISO 和 VHD 格式的有限形式(尽管这对 ext4 没有帮助,但 Disk2vhd 将是 NTFS 磁盘的首选工具)。
在 Windows 上,7-zip 归档器支持 ext4,就像它是一种归档格式一样,因此您可以打开 ext4 映像并浏览里面的文件。
(档案和文件系统之间几乎没有什么区别——一切都取决于里面的数据是如何构造的,例如,它是否有一个允许查找的中央索引,它是否使用不可查找的压缩形式。例如,当访问 tar.gz 档案中的某些内容时,您需要“提取”所有内容,因为它是面向磁带的结构,没有中央索引,而且它的压缩是一次性应用于整个档案的,但您不必对 zip/rar/7z 档案这样做,因为它们会单独压缩每个项目。)
逐字节复制这些分区。但这不会浪费其他磁盘上的大量空间吗?这些分区上有大量可用空间。
大多数文件系统都支持“稀疏”文件,其中一长串 NUL 字节可以标记为“空洞”,而不会存储在磁盘上。有些分区克隆工具可以理解文件系统结构,并跳过复制文件系统指示为空的区域,从而创建一个不占用其全部大小的稀疏映像文件。对于 NTFS,此类工具是 ntfsclone;对于 ext4 和 btrfs 等,此类工具是 partclone。
(Linux“循环设备”甚至可以在克隆后将全尺寸图像变成稀疏图像,只要您首先可以容纳完整图像。)
还有一些图像格式可以在内部跟踪“漏洞”——虚拟机会使用它们来存储虚拟机磁盘映像。VHD/VHDX 就是这样一种格式;如果您使用 Disk2vhd 将 NTFS 映像创建为 VHD 文件,它只会占用与内部数据一样多的空间,并且可以通过双击打开它。