我知道这听起来很奇怪,但我有几个 64 GB 的 USB 闪存驱动器,我需要存储一个 100 GB 的文件,这超出了单个 USB 闪存驱动器的存储容量。有没有办法将这两个 USB 闪存驱动器合并为一个逻辑分区,看起来像一个更大的磁盘?
请注意,我使用的是 Debian Linux,而不是 Windows。
我总是将两个 USB 闪存驱动器连接到我的笔记本电脑上工作,并且我不会只插入一个 USB 来访问文件。
为了澄清我的问题,让我举个例子。例如,我有一个文件包含以下数据:
1234567890
,我想将文件拆分为12345
和,67890
如果每个 USB 闪存驱动器只能容纳 5 个字符的数据。但只有同时插入 2 个 USB 闪存驱动器才能访问该文件。
您可能想要通过将档案分割成更小的部分来实现。这取决于您是否需要直接访问 100 GB 的文件,还是仅用于存档目的。如果是后者,这种方法可能会有所帮助。
在此示例中,我使用 7-Zip 创建了一个
tar
文件,并将其分成 100 MB 的块:这也适用于其他档案格式,例如
zip
或7z
。这里我将some_large_file.iso(1.04 GB)分成 100 MB 的块:
在本例中,您需要将文件分割成 64 GB 的单位 ( 64G )。根据USB 的实际大小,您可能需要稍微减小这个大小。
如果“逻辑分区将显示为一个更大的磁盘”不是严格要求,那么您可以使用 Btrfs。
首先决定是否要将整个 USB 设备都用于要创建的文件系统,或者是否要在每个 USB 设备上创建分区表。后一种方法更为规范,前一种方法更为简单。
此答案中的大多数命令都需要 root 访问权限。为简洁起见,我没有
sudo
在命令中明确包含这些命令。sudo
在需要时使用。假设您要使用的设备是
/dev/sdx
和/dev/sdy
。以防万一运行wipefs -a /dev/sdx /dev/sdy
,这样设备看起来就干净了。如果您想使用分区而不是整个设备,那么请为每个设备创建一个大分区(使用
fdisk
或gdisk
类似工具)。如果您选择的工具询问您是否应该创建新的文件系统,请拒绝。如果该工具找到旧签名并询问您是否应该删除它,请确认。创建分区(例如/dev/sdx1
和/dev/sdy1
)后,以防万一您可以运行wipefs -a /dev/sdx1 /dev/sdy1
,这样它们看起来肯定是干净的。现在在设备上创建一个 Btrfs。它将是
或者
取决于您是否想使用整个设备或分区。
这不会创建“看起来像一个更大磁盘的逻辑分区”;我的意思是,不会出现任何
/dev/something
可以在块级别访问的分区。不过,将创建一个更大的文件系统并准备挂载。要挂载文件系统,请挂载其任何设备,无论哪个设备。如果内核知道哪些其他设备属于同一文件系统,那么它将正确使用它们。如果缺少任何设备(内核确实缺少或“错过”),则内核将不允许您挂载文件系统。在创建文件系统后,内核应该知道设备,挂载应该可以直接进行。在重新启动或将设备(重新)连接到相同或另一个 Linux 后,您可能需要
btrfs device scan
先运行,以使内核检查所有设备并了解 Btrfs 的位置。即使内核已经知道,运行也没有任何坏处btrfs device scan
;因此,如果有疑问,只需运行它即可。安装方式如下:
其中
sd…
是属于文件系统的设备之一。在我们的示例中,它可以是sdx
或sdy
(如果文件系统位于这些整个设备上),或sdx1
或sdy1
(如果文件系统位于这些分区内)。您可以按照最常规的方式卸载:
笔记:
要存储更大的文件,您可以
mkfs.btrfs
首先使用三个或更多设备;或者您可以稍后使用 向 Btrfs 添加设备btrfs device add …
(请参阅man 8 btrfs-device
)。您可以使用整个设备、分区和/或常规文件*作为提交给 Btrfs 的“设备”。您可以混合使用这些类型。
* 对于常规文件,您需要
losetup
在之前创建循环设备(使用)btrfs device scan
。评论说“USB 闪存驱动器非常不可靠,出错的几率会加倍”,这基本上是正确的。我给你提供了一种方法来实现你想要的效果,因为这是可能的。就我个人而言,我只会在多个 USB 闪存驱动器上使用 Btrfs 来短期(临时)存储消耗性数据。
用于
split
分割文件:将为您提供
filename01
和filename02
。要恢复原始状态,只需执行我总结了答案和评论,并提出了 2 个主要解决方案。第一个解决方案最安全,但有点复杂,第三个解决方案则坚持原点问题:
解决方案 1:跨多个闪存驱动器创建LVM逻辑卷
感谢@GlennWillen 对链接的评论和提醒。
注:以下步骤复制自网站
步骤 1 – 在每个 USB 闪存盘上创建一个分区
开始之前,记得插入所有四个 USB
第 2 步 - 创建 LVM 物理卷 (PV)
驱动器准备就绪后,我们将在 USB 闪存驱动器上创建 PV。PV 和分区之间存在 1:1 映射。
由于每个 USB 闪存驱动器都配置为具有一个跨整个磁盘的分区,因此不会出现分区设备(例如 /dev/sdb1)。然后我们可以在“原始”设备本身上创建 PV:
步骤 3 - 使用 PV 创建 LVM 卷组 (VG)
在此步骤中,我们将 PV 分组到一个 VG 中。此层非常重要,因为它抽象了物理磁盘(由其对应的 PV 表示),从而实现了使用 LVM 的一些主要优势,例如在卷正在使用时通过添加/删除物理磁盘来调整大小。
步骤 4 - 使用 VG 创建 LVM 逻辑卷(LV)
对于最后的 LVM 步骤,我们将创建一个使用在上一步中创建的 VG vg00 的逻辑卷:
第 5 步 - 创建文件系统并挂载
LVM 逻辑卷的行为类似于块设备 - 我们需要安装文件系统并挂载它才能使用它:$ sudo mkfs.ext4 /dev/mapper/vg00-lv01
解决方法2:将文件分割成两半,使用时再重新组合。
感谢@vidarlo 的回答和建议。
用于
split
分割文件:请注意,
-b
每个输出文件的大小字节数将为您提供
filename01
和filename02
。要恢复原始状态只需执行以下操作:
解决方案 3:使用 RAID 技术
RAID(独立磁盘冗余阵列)是一种将多个存储设备(如硬盘或 USB 闪存盘)组合成单个逻辑单元的技术。它可以提供性能优势、冗余性或两者兼而有之,具体取决于所使用的 RAID 级别。
扩展解决方案:将文件夹压缩并分部分存储
感谢@velvet的回答和建议
另一个解决方案是使用
7-zip
拆分存档文件并创建一个.tar
文件。使用 7z 将文件压缩为 100MB 大小的块(或您想要的任何大小)
结果
Windows 的对应产品似乎是 JBOD,搜索“JBOD Linux”会返回一些可能有用的结果。其中之一是Ask Ubuntu 的一篇帖子,其中建议使用 Fuse(链接站点中的 Fuse 链接)作为在 Linux 上使用 JBOD 的答案。
我没有足够的能力来验证这个答案,但这个答案已经被原始发帖者接受,以满足他的目的。
还有一些其他结果我没有去探究,而是留给读者作为练习。
如果您只想对 100GB 的文件进行只读访问,并且它具有一定的可压缩性,您可以尝试运行
mksquashfs
它,看看它是否可以压缩到足够小以适合一个磁盘。如果可以,您可以在需要使用它的拇指驱动器上安装 squashfs。预计mksquashfs
需要很长时间。在 Linux 上?是的,这很容易(就“容易”的某些价值观而言 - 我不想通过电话向我年迈的岳母讲解这些 - 但作为复制/粘贴?还不错)。
首先,插入所有要使用的 USB。其次,将它们全部列出:(
ls /dev/disk/by-id
如果您的发行版不使用那组特定的链接,也没关系;ls /dev/sd*
在插入 USB 之前运行,然后在大约五秒钟后再次运行 - “新”条目是 USB)。创建 RAID 阵列:
sudo mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=[number of USBs] [listing of the block devices from above]
格式化 RAID 阵列。我
ext4
在这里使用,但您的操作系统支持的任何格式都可以:sudo mkfs.ext4 /dev/md0
创建挂载点:
mkdir -p [anywhere on the FS you want, maybe /home/[your username]/myMount or /dev/shm/myUSBRaid]
完成后,您现在可以安装阵列:
sudo mount /dev/md0 [mount point from above]
...并确保您可以访问它:
sudo chown [your username] [mount point from above]
...然后它就只是文件系统的一块,和其他任何文件系统一样。复制吧!完成后,卸载它:
sudo umount /dev/md0
注意:
/dev/md0
拔出/重新插入 USB 后可能会发生变化 - 但它应该始终如此,/dev/md[something]
以便您可以通过以下方式查找ls /dev/md*