在 USB 闪存驱动器上使用 UDF

在 USB 闪存驱动器上使用 UDF

无法将大于 4G 的文件复制到我的 8GUSB闪存盘,我将其格式化为 ext3。虽然到目前为止这对我来说工作正常,但如果我想用它将文件复制到不使用 Linux 的人,就会出现问题。

我正在考虑将其格式化为自定义函数相反,我希望它能够在三种最流行的操作系统(Windows、MacOS 和 Linux)上读取(甚至写入)。无需安装任何额外的驱动程序。但是,从我在网上已经找到的内容来看,似乎有几个与用于创建文件系统的参数相关的小问题,这会降低兼容​​性(但我发现的大多数页面都是关于光学媒体的,而不是 USB 闪存驱动器)。

我想知道:

  • 我应该使用哪个实用程序来创建文件系统?(到目前为止,我已经找到mkudffsgenisoimage,并且mkudffs似乎是最好的选择。)
  • 为了获得最大兼容性,我应该与所选实用程序一起使用哪些参数?
  • UDF 与这三个操作系统的最常见版本的兼容性实际上如何?
  • 使用 UDF 真的是最好的主意吗?是否有其他文件系统具有更好的兼容性,没有像 FAT32 4G 文件大小限制这样的问题限制,并且无需在接触它的每台计算机上安装特殊驱动程序?

答案1

首先,在创建 UDF 文件系统之前,我将驱动器完全清零:

dd if=/dev/zero of=/dev/sdx bs=512

这是为了避免任何剩余的超级块或其他元数据,它们可能会混淆操作系统的文件系统类型检测(至少需要将第一个扇区清零,以消除分区表;前几个扇区不被 UDF 使用,而剩余的分区表可能会造成混淆)。您还可以使用count=1dd 命令上的开关,以便更快地将驱动器的前 512 个字节清零(MBR 通常位于其中),尽管这没有经过测试。

为了创建文件系统,我使用的命令是:

mkudffs --media-type=hd --blocksize=512 /dev/sdx

mkudffs安装软件包后,命令将在基于 Debian 的 Linux 发行版(例如 Ubuntu)上可用udftools

sudo apt-get install udftools

的默认块大小为mkudffs2048,这对于 USB 闪存驱动器(使用 512 字节扇区)来说是错误的。由于块大小用于查找文件系统元数据,因此使用错误的块大小可能会导致它无法被识别为 UDF 文件系统(因为锚点不在文件系统驱动程序期望的位置)。请注意,手册mkudffs页是错误的;512 是块大小的有效值(并且代码明确接受它)。

我还使用整个驱动器而不是分区;这应该更兼容。

我目前的测试结果:

  • 具有最新内核的 Linux(2.6.31,来自 Ubuntu 9.10):可以运行。
  • 具有较旧内核的 Linux:需要选项bs=512mount因为它错误地使用了 2048 而不是设备扇区大小(已修复提交 1197e4d)。
  • Windows Vista:可以工作。
  • 全新的 Mac:可以工作。
  • Windows XP:可以正常读取,但尝试写入时出现“拒绝访问”;似乎还认为磁盘已满。

尽管我到目前为止还没有尝试在其中创建大于 4G 的文件,但我认为没有理由它不起作用。

鉴于它可以在所有最新的操作系统上完美运行(只需要在 Linux 上手动安装,Ubuntu 9.10 和 Fedora 12 发布后就不再需要这样做了),并且可以在 Windows XP 中以只读方式运行(这让我很惊讶;我以为它根本无法识别文件系统),在大型 USB 闪存驱动器中使用 UDF 而不是 FAT32 或 NTFS 似乎是个好主意。

答案2

CesarB 很好地抓住了问题的关键。有一点不能过分强调,那就是在格式化 UDF 时使用正确的块大小是多么重要。

受到 CesarB 的帖子(以及我的其他研究/测试)的启发,我编写了一个脚本来自动执行 UDF 中的格式化过程——使用正确检测到的扇区大小。参见GitHub 上的 format-udf. 显著特点:

  • 将块驱动器(硬盘驱动器或闪存驱动器)格式化为通用磁盘格式 (UDF)
    • 使用 UDF 修订版 2.01 实现最大兼容性
    • 前 4096 个扇区被清零以清除任何现有的 MBR(正确检测 UDF 所必需)
  • 生成的文件系统可以在多个操作系统系列(Windows、OS X 和 Linux)中读取/写入
  • 可在任何具有 Bash 环境的操作系统上运行

由于最后一点,我编写的这个脚本无法在 Windows 上使用。但是,该脚本可以在 OS X 和 Linux 上运行。这样做之后,Windows 应该能够神奇地检测到新格式化的 UDF 驱动器。

为了直接回答提出的问题,format-udf 将:

  • 根据操作系统和环境选择合适的格式化工具
  • 自动检测并填充格式化所需的所有参数
  • 最大化操作系统兼容性(请参阅 GitHub 页面的兼容性图表)
  • 提供提问者想要的最大功能集(和最小限制)

答案3

我似乎记得曾经这样做过,我发现的问题是,我安装的 Linux 版本是只读的,因为驱动程序不是为读/写构建的。它在 Windows 上确实可以工作,我想 Mac 上也可以。

是的,很难找到一个好的解决方案。有一段时间,我有一个外部驱动器,它有一个 fat32 分区,里面有适用于 win 和 mac 的驱动程序、一个 mac 分区和一个大的 ext3 分区。它能用,但这意味着要安装驱动程序。巧妙的技巧是它也可以在 mac 上启动(fw&usb),你必须留出空间并记下一些笔记,然后你可以通过命令行和 mac 分区表添加分区。

世界需要一个免费的、万物可用的文件系统。ZFS 是一个不错的选择。:-)

答案4

为了实现最大兼容性,您应该使用 mkudffsudf工具项目至少在 2.0 版本中。无需特殊参数,一切都是自动检测的。

有3个大限制:

  1. 如果不可移动硬盘没有 MBR 或 GPT 分区表,Microsoft Windows 系统将无法识别它。

  2. Apple Mac OS X 系统无法识别分区磁盘上的 UDF 文件系统。

  3. 如果 UDF 块大小与磁盘的逻辑扇区大小不匹配,则所有系统(除了最新的 Linux 内核)都可能无法识别 UDF 文件系统。

自 2.0 版起,工具 mkudffs 可处理所有 3 个限制。格式化不可移动硬盘时,它会创建“假”MBR 表,该表从扇区 0 开始并跨越整个磁盘。因此,可以从第一个分区(Microsoft Windows 需要)或整个磁盘(Apple Mac OS X 需要)读取 UDF 文件系统。有关更多详细信息,请参阅 mkudffs 2.0 手册页。

相关内容