环回设备

环回设备

split将文件分割成多个块,这些块总共消耗相同的存储空间(消耗的磁盘空间加倍)。

ln可以创建到其他(目标)文件的符号链接(symlink),同时不复制文件,因此不会消耗目标文件双倍的空间。

由于缺乏存储空间,是否可以通过指向大文件中特定偏移量的引用/符号方式(即虚拟地分割文件)来分割文件?

例如,给定一个 2MB 的文件,将其分成 2 个部分,其中每个部分引用大文件的 1MB(与符号链接工作原理相同),这样每个部分:

  • 不与其他片段重叠(片段不会引用大文件中的相同数据)
  • 不消耗与其引用的大文件部分相同的存储大小
piece_1.file -> 2mb.file 1st MB
piece_2.file -> 2mb.file 2nd MB

并且每块的存储大小远小于1MB

答案1

由于缺乏存储空间,是否可以通过指向大文件中特定偏移量的引用/符号方式(即虚拟地分割文件)来分割文件?

不是直接的。在 POSIX 的思想中,文件不是那样工作的。它们是更独立的、原子的数据单位。

两种选择:

环回设备

这是一个运行解决方案,这意味着它不是磁盘上的解决方案,而是需要手动设置。这可能是优点,也可能是缺点!

你可以很容易地设置一个环回设备;如果您使用与 freedesktop 系统消息总线兼容的会话管理器(即,您以图形方式登录到计算机并运行 gnome、xfce4、kde...),udisks 是您的朋友:

blksize=$((2**20))
udisksctl loop-setup -s $blksize -f /your/large/file
udisksctl loop-setup -s $blksize -o $blksize -f /your/large/file
  • 第一个命令给你一个/dev/loop

答案2

在 Linux 上,您可以使用设备执行此类操作loop

例如:

losetup --find --show             --sizelimit=2M file
losetup --find --show --offset=2M --sizelimit=2M file
losetup --find --show --offset=4M --sizelimit=2M file

将输出引用 3 个 2MiB 大部分的 3 个循环设备的路径file

答案3

如果我理解你的权利,这很接近你的问题。不是吗?

supu@devuan ~/TEST ❖ cat bigfile.txt                                                               8:01
DIES IST VIEL TEXT
DIES IST VIEL TEXT

supu@devuan ~/TEST ❖ split -n2 bigfile.txt

supu@devuan ~/TEST ❖ ls -l                                                                         8:00
insgesamt 12.288
-rw-r--r-- 1 supu supu 38 2023-03-14 07:59 bigfile.txt
lrwxrwxrwx 1 supu supu  3 2023-03-14 08:00 piece1 -> xaa
lrwxrwxrwx 1 supu supu  3 2023-03-14 08:00 piece2 -> xab
-rw-r--r-- 1 supu supu 19 2023-03-14 08:00 xaa
-rw-r--r-- 1 supu supu 19 2023-03-14 08:00 xab
supu@devuan ~/TEST ❖ cat piece?                                                                    8:00
DIES IST VIEL TEXT
DIES IST VIEL TEXT
supu@devuan ~/TEST ❖ cat xa?                                                                       8:01
DIES IST VIEL TEXT
DIES IST VIEL TEXT
supu@devuan ~/TEST ❖   

相关内容