AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1884389
Accepted
Max
Max
Asked: 2025-03-04 19:16:26 +0800 CST2025-03-04 19:16:26 +0800 CST 2025-03-04 19:16:26 +0800 CST

是否可以将两个 USB 闪存驱动器合并为一个分区来存储非常大的文件?如果可以,如何实现?

  • 772

我知道这听起来很奇怪,但我有几个 64 GB 的 USB 闪存驱动器,我需要存储一个 100 GB 的文件,这超出了单个 USB 闪存驱动器的存储容量。有没有办法将这两个 USB 闪存驱动器合并为一个逻辑分区,看起来像一个更大的磁盘?

请注意,我使用的是 Debian Linux,而不是 Windows。

我总是将两个 USB 闪存驱动器连接到我的笔记本电脑上工作,并且我不会只插入一个 USB 来访问文件。

为了澄清我的问题,让我举个例子。例如,我有一个文件包含以下数据:

1234567890,我想将文件拆分为12345和,67890如果每个 USB 闪存驱动器只能容纳 5 个字符的数据。但只有同时插入 2 个 USB 闪存驱动器才能访问该文件。

hard-drive
  • 7 7 个回答
  • 4865 Views

7 个回答

  • Voted
  1. Velvet
    2025-03-04T19:30:50+08:002025-03-04T19:30:50+08:00

    您可能想要通过将档案分割成更小的部分来实现。这取决于您是否需要直接访问 100 GB 的文件,还是仅用于存档目的。如果是后者,这种方法可能会有所帮助。

    在此示例中,我使用 7-Zip 创建了一个tar文件,并将其分成 100 MB 的块:

    在此处输入图片描述

    这也适用于其他档案格式,例如zip或7z。

    这里我将some_large_file.iso(1.04 GB)分成 100 MB 的块:

    在此处输入图片描述

    在本例中,您需要将文件分割成 64 GB 的单位 ( 64G )。根据USB 的实际大小,您可能需要稍微减小这个大小。

    • 31
  2. Kamil Maciorowski
    2025-03-05T05:01:59+08:002025-03-05T05:01:59+08:00

    如果“逻辑分区将显示为一个更大的磁盘”不是严格要求,那么您可以使用 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。它将是

    mkfs.btrfs -d single -m dup /dev/sdx /dev/sdy
    

    或者

    mkfs.btrfs -d single -m dup /dev/sdx1 /dev/sdy1
    

    取决于您是否想使用整个设备或分区。

    这不会创建“看起来像一个更大磁盘的逻辑分区”;我的意思是,不会出现任何/dev/something可以在块级别访问的分区。不过,将创建一个更大的文件系统并准备挂载。

    要挂载文件系统,请挂载其任何设备,无论哪个设备。如果内核知道哪些其他设备属于同一文件系统,那么它将正确使用它们。如果缺少任何设备(内核确实缺少或“错过”),则内核将不允许您挂载文件系统。在创建文件系统后,内核应该知道设备,挂载应该可以直接进行。在重新启动或将设备(重新)连接到相同或另一个 Linux 后,您可能需要btrfs device scan先运行,以使内核检查所有设备并了解 Btrfs 的位置。即使内核已经知道,运行也没有任何坏处btrfs device scan;因此,如果有疑问,只需运行它即可。

    安装方式如下:

    mount /dev/sd… /path/to/mountpoint
    

    其中sd…是属于文件系统的设备之一。在我们的示例中,它可以是sdx或sdy(如果文件系统位于这些整个设备上),或sdx1或sdy1(如果文件系统位于这些分区内)。

    您可以按照最常规的方式卸载:

    umount /path/to/mountpoint
    

    笔记:

    • 要存储更大的文件,您可以mkfs.btrfs首先使用三个或更多设备;或者您可以稍后使用 向 Btrfs 添加设备btrfs device add …(请参阅man 8 btrfs-device)。

    • 您可以使用整个设备、分区和/或常规文件*作为提交给 Btrfs 的“设备”。您可以混合使用这些类型。

      * 对于常规文件,您需要losetup在之前创建循环设备(使用)btrfs device scan。

    • 评论说“USB 闪存驱动器非常不可靠,出错的几率会加倍”,这基本上是正确的。我给你提供了一种方法来实现你想要的效果,因为这是可能的。就我个人而言,我只会在多个 USB 闪存驱动器上使用 Btrfs 来短期(临时)存储消耗性数据。

    • 23
  3. vidarlo
    2025-03-05T04:09:40+08:002025-03-05T04:09:40+08:00

    用于split分割文件:

    split -b 60G filename
    

    将为您提供filename01和filename02。要恢复原始状态,只需执行

    cat filename01 filename02 > filename
    
    • 15
  4. Max
    2025-03-05T09:26:06+08:002025-03-05T09:26:06+08:00

    我总结了答案和评论,并提出了 2 个主要解决方案。第一个解决方案最安全,但有点复杂,第三个解决方案则坚持原点问题:

    解决方案 1:跨多个闪存驱动器创建LVM逻辑卷

    感谢@GlennWillen 对链接的评论和提醒。

    • https://lupeng.wordpress.com/2023/10/01/creating-a-lvm-logic-volume-across-several-usb-flash-drives/

    注:以下步骤复制自网站

    步骤 1 – 在每个 USB 闪存盘上创建一个分区

    开始之前,记得插入所有四个 USB

    $ sudo fdisk /dev/sdb
    
    Welcome to fdisk (util-linux 2.37.2).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    
    Command (m for help): p
    Disk /dev/sdb: 1.87 GiB, 2002780160 bytes, 3911680 sectors
    Disk model: Flash Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x6a5f5bac
    
    Command (m for help): n
    Partition type
      p   primary (0 primary, 0 extended, 4 free)
      e   extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 1):
    First sector (2048-3911679, default 2048):
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-3911679, default 3911679):
    
    Created a new partition 1 of type 'Linux' and of size 1.9 GiB.
    
    Command (m for help): p
    Disk /dev/sdb: 1.87 GiB, 2002780160 bytes, 3911680 sectors
    Disk model: Flash Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x6a5f5bac
    
    Device     Boot Start     End Sectors  Size Id Type
    /dev/sdb1        2048 3911679 3909632  1.9G 83 Linux
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    第 2 步 - 创建 LVM 物理卷 (PV)

    驱动器准备就绪后,我们将在 USB 闪存驱动器上创建 PV。PV 和分区之间存在 1:1 映射。

    由于每个 USB 闪存驱动器都配置为具有一个跨整个磁盘的分区,因此不会出现分区设备(例如 /dev/sdb1)。然后我们可以在“原始”设备本身上创建 PV:

    $ sudo pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde
    Physical volume "/dev/sdb" successfully created.
    Physical volume "/dev/sdc" successfully created.
    Physical volume "/dev/sdd" successfully created.
    Physical volume "/dev/sde" successfully created.
    
    步骤 3 - 使用 PV 创建 LVM 卷组 (VG)

    在此步骤中,我们将 PV 分组到一个 VG 中。此层非常重要,因为它抽象了物理磁盘(由其对应的 PV 表示),从而实现了使用 LVM 的一些主要优势,例如在卷正在使用时通过添加/删除物理磁盘来调整大小。

    $ sudo vgcreate vg00 /dev/sdb /dev/sdc /dev/sdd /dev/sde
    Volume group "vg00" successfully created
    
    步骤 4 - 使用 VG 创建 LVM 逻辑卷(LV)

    对于最后的 LVM 步骤,我们将创建一个使用在上一步中创建的 VG vg00 的逻辑卷:

    $ sudo lvcreate -n my_volume -l 100%FREE vg00
    Logical volume "lv01" created.
    
    第 5 步 - 创建文件系统并挂载

    LVM 逻辑卷的行为类似于块设备 - 我们需要安装文件系统并挂载它才能使用它:$ sudo mkfs.ext4 /dev/mapper/vg00-lv01

    $ sudo mount -t ext4 /dev/mapper/vg00-lv01 <PATH TO MOUNT POINT>
    

    解决方法2:将文件分割成两半,使用时再重新组合。

    感谢@vidarlo 的回答和建议。

    • 用于split分割文件:

      split -b 60G filename
      

      请注意,-b每个输出文件的大小字节数
      将为您提供filename01和filename02。

    • 要恢复原始状态只需执行以下操作:

      cat filename01 filename02 > filename
      

    解决方案 3:使用 RAID 技术

    RAID(独立磁盘冗余阵列)是一种将多个存储设备(如硬盘或 USB 闪存盘)组合成单个逻辑单元的技术。它可以提供性能优势、冗余性或两者兼而有之,具体取决于所使用的 RAID 级别。

    扩展解决方案:将文件夹压缩并分部分存储

    感谢@velvet的回答和建议

    另一个解决方案是使用7-zip拆分存档文件并创建一个.tar文件。

    使用 7z 将文件压缩为 100MB 大小的块(或您想要的任何大小)

    在此处输入图片描述

    结果

    在此处输入图片描述

    • 12
  5. fred_dot_u
    2025-03-04T20:31:16+08:002025-03-04T20:31:16+08:00

    Windows 的对应产品似乎是 JBOD,搜索“JBOD Linux”会返回一些可能有用的结果。其中之一是Ask Ubuntu 的一篇帖子,其中建议使用 Fuse(链接站点中的 Fuse 链接)作为在 Linux 上使用 JBOD 的答案。

    我没有足够的能力来验证这个答案,但这个答案已经被原始发帖者接受,以满足他的目的。

    还有一些其他结果我没有去探究,而是留给读者作为练习。

    • 5
  6. David G.
    2025-03-06T06:35:21+08:002025-03-06T06:35:21+08:00

    如果您只想对 100GB 的文件进行只读访问,并且它具有一定的可压缩性,您可以尝试运行mksquashfs它,看看它是否可以压缩到足够小以适合一个磁盘。如果可以,您可以在需要使用它的拇指驱动器上安装 squashfs。预计mksquashfs需要很长时间。

    • 2
  7. Best Answer
    Jack Simth
    2025-03-07T02:37:05+08:002025-03-07T02:37:05+08:00

    在 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*

    • 2

相关问题

  • 可以读取硬盘驱动器并专门写入 RAM 的系统?

  • 5 年后我应该更换/升级我的硬盘吗?

  • 我应该对用于存储的辅助(非操作系统)SSD 进行分区吗?[关闭]

  • 在 Windows 10 中运行 CrystalDiskMark 会导致 BSOD

  • “写悬崖”现象是否只发生在SSD盘上?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve