将文件连接在一起而不使用文件系统中的空间

将文件连接在一起而不使用文件系统中的空间

我想在 Linux 中加入(串联)两个文件,而不使用文件系统中的空间。我可以这样做吗?

A + B = AB

该文件使用文件系统的AB扇区或片段AB是否有可能做到这一点?

我可以gparted在不复制两个文件的情况下识别AB为新文件吗(这是一个缓慢的过程)?

答案1

我假设您有一个非常大的磁盘映像,分为大文件f1f2并且f3想要修改该磁盘映像中的分区。然后假设所有文件的大小都是 512 的倍数,你可以这样做(作为 root)

offset=0
for f in f1 f2 f3; do
   loop=$(losetup -f --show -- "$f")
   size=$(blockdev --getsz "$loop")
   printf '%s\n' "$offset $size linear $loop 0"
   offset=$(( offset + size ))
done | dmsetup create myimg

然后您可以执行gparted /dev/mapper/myimg,甚至格式化并安装它之后创建的分区。

要拆除该设备:

  • 确保所有文件系统和其他资源都已卸载/释放
  • dmsetup remove myimg
  • losetup -d在每个循环设备上运行。

答案2

工艺替代可用于连接两个或多个文件,使它们看起来像是一个进程的一个文件,例如some_program <(cat A B).

gparted然而,与任何其他旨在修改输入文件的程序一起使用是没有任何意义的——它不是一个真正的文件,它是一个 fifo、一个匿名管道,而且它是短暂的。创建的“文件”<()也是只读且不可查找的(即只能顺序读取)。

进程替换还包括>()将 stdout 重定向到进程,但这对于 来说仍然没有任何用处gparted,它期望使用真正的块设备或磁盘映像文件。

相关内容