我有一个非常大的文件(TrueCrypt 容器),我想将其保存在某个云中,但它对文件大小有限制,限制为 2 GB,而且它有一些同步目录的工具。这个想法是创建指向某个目录中文件部分的硬链接,这些部分将被同步。
例如:我们有文件A文件大小为 4 Kb;乙指向第一个 1Kb 部分A, 文件C指向第二个 1Kb 部分A, 文件德指向第三个 1Kb 部分A, 文件埃指向最后 1Kb 部分A。
因此问题是:
- 是否可以?
- 有哪些可能的替代方案?
- 如果完全不可能,那么我需要一个 TrueCrypt 模拟程序,允许拆分容器并实现全部TrueCrypt 的功能。
限制:
- 操作系统:Gentoo Linux
- 总尺寸增加是不允许
- 删除原始文件是不允许
- 文件系统:Ext4 | ReiserFS
答案1
您可以通过循环透明地访问文件的不同部分。下面是实现示例设置的脚本:
dd if=/dev/zero of=A count=8
losetup --offset 0 --sizelimit 1024 /dev/loop0 A
losetup --offset 1024 --sizelimit 1024 /dev/loop1 A
losetup --offset 2048 --sizelimit 1024 /dev/loop2 A
losetup --offset 3072 --sizelimit 1024 /dev/loop3 A
因此,初始文件的部分内容A
可通过/dev/loopX
文件访问:您写入的任何内容A
都可以读取/dev/loopX
,反之亦然。不过,我不确定您的云客户端是否可以使用特殊文件。
答案2
某些东西肯定可以与 ZFS 配合使用,也可能与和其他卷管理器配合lvm
使用btrfs
:
您可以使用几个空文件(用 创建dd if=/dev/zero of=file01 bs=1M count=2000
),然后使用这些文件作为卷管理器中的“硬盘”来形成 RAID0(条带化)。
对于btrfs
和lvm
,您必须将文件安装为循环设备(参见其他答案)。
然后卷管理器会将这些文件呈现为一个大硬盘。您可以将 truecrypt 容器放在这个新文件系统中。
对于使用 LVM,请参阅此处的教程:https://www.debian-administration.org/article/410/A_simple_introduction_to_working_with_LVM
对于 btrfs 来说,它可能是类似
mkfs.btrfs -d raid0 file1 file2 file3
这样的命令:https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices#Filesystem_creation
由于您使用的是 Gentoo,因此您必须选择使用 ZFSonLinux(内核模块,请勿使用 FUSE 实现!)。可以按如下方式完成:
# create 10 files of 1GB each
for i in {0..9} ; do
dd bs=1M count=1000 if=/dev/zero of=part_${i}
done
# create a zpool (sth like a virtual harddrive) from the 10 files
zpool create MyPoolName /absolute/path/to/part_*
# this will also create a new file system, that is mounted at /MyPoolName
# can be seen with
df -h
# Now, you can put your Truecrypt container in there. If you want to upload/download the files, you should "export" the zpool first.
zpool export MyPoolName
# If all the synchronization is done, you can import the pool with
zpool import MyPoolName -d /absolute/path/to/folder/that/contains/parts
我建议不要使用太多小文件,因为这会产生很大的开销。最好尝试一下如何使用 ZFS 以及云上传的运行情况。