【发布时间】:2011-09-07 23:06:37
【问题描述】:
我有一个文件,大小为 100MB。我需要将它分成(例如)4 个不同的部分。 假设第一个文件从 0-20MB,第二个 20-60MB,第三个 60-70MB,最后一个 70-100MB。 但我不想安全拆分 - 分成 4 个输出文件。我想就地做。所以输出文件应该使用这个源文件所占用的硬盘上的同一个位置,并且字面意思分割它,而不是复制(所以在分割的那一刻,我们应该松开原始文件)。
换句话说,输入文件就是输出文件。
这可能吗?如果可以,怎么做?
我在想也许可以手动向文件系统添加一条记录,文件 A 从这里开始,到这里结束(在另一个文件的中间),执行 4 次,然后删除原始文件。但为此,我可能需要管理员权限,并且可能对文件系统不安全或不健康。
编程语言无关紧要,我只是对它感兴趣。
【问题讨论】:
-
或许可以做到,当然不明智。
-
我之所以要这样做,是因为性能和磁盘空间。如果文件为 20GB,则“以正确的方式”拆分文件将需要另外 20GB 和大量时间才能完成。 “就地”拆分需要一秒钟的时间,结果是一样的,尤其是当我处理的数据相关性较低时。
-
除非你破坏了文件系统,否则你会花一整天的时间来修复它:)
-
理论上,这相当简单。就 inode(NTFS:文件记录,HFS+:??)而言,第一个 inode 包含文件大小和属于该文件的块的(开头)列表。理想情况下,您只需更改 4 个 inode。但我怀疑你会那么容易逃脱。您需要仔细研究 NTFS 和 HFS+ 的内部结构。
-
可以按照常规方式拆分大文件,而无需使用等于整个文件的额外空间。您可以将 last 块复制到新文件,然后使用
truncate()从输入文件中删除该部分,然后重复。输入文件以开头的块结束。这只需要与块大小相等的额外空间。使用的时间几乎与天真的方法一样多,但空间更少。
标签: file split filesystems