无法将大于 4G 的文件复制到我的 8GUSB闪存盘,我将其格式化为 ext3。虽然到目前为止这对我来说工作正常,但如果我想用它将文件复制到不使用 Linux 的人,就会出现问题。
我正在考虑将其格式化为自定义函数相反,我希望它能够在三种最流行的操作系统(Windows、MacOS 和 Linux)上读取(甚至写入)。无需安装任何额外的驱动程序。但是,从我在网上已经找到的内容来看,似乎有几个与用于创建文件系统的参数相关的小问题,这会降低兼容性(但我发现的大多数页面都是关于光学媒体的,而不是 USB 闪存驱动器)。
我想知道:
- 我应该使用哪个实用程序来创建文件系统?(到目前为止,我已经找到
mkudffs
和genisoimage
,并且mkudffs
似乎是最好的选择。) - 为了获得最大兼容性,我应该与所选实用程序一起使用哪些参数?
- UDF 与这三个操作系统的最常见版本的兼容性实际上如何?
- 使用 UDF 真的是最好的主意吗?是否有其他文件系统具有更好的兼容性,没有像 FAT32 4G 文件大小限制这样的问题限制,并且无需在接触它的每台计算机上安装特殊驱动程序?
答案1
首先,在创建 UDF 文件系统之前,我将驱动器完全清零:
dd if=/dev/zero of=/dev/sdx bs=512
这是为了避免任何剩余的超级块或其他元数据,它们可能会混淆操作系统的文件系统类型检测(至少需要将第一个扇区清零,以消除分区表;前几个扇区不被 UDF 使用,而剩余的分区表可能会造成混淆)。您还可以使用count=1
dd 命令上的开关,以便更快地将驱动器的前 512 个字节清零(MBR 通常位于其中),尽管这没有经过测试。
为了创建文件系统,我使用的命令是:
mkudffs --media-type=hd --blocksize=512 /dev/sdx
mkudffs
安装软件包后,命令将在基于 Debian 的 Linux 发行版(例如 Ubuntu)上可用udftools
:
sudo apt-get install udftools
的默认块大小为mkudffs
2048,这对于 USB 闪存驱动器(使用 512 字节扇区)来说是错误的。由于块大小用于查找文件系统元数据,因此使用错误的块大小可能会导致它无法被识别为 UDF 文件系统(因为锚点不在文件系统驱动程序期望的位置)。请注意,手册mkudffs
页是错误的;512 是块大小的有效值(并且代码明确接受它)。
我还使用整个驱动器而不是分区;这应该更兼容。
我目前的测试结果:
- 具有最新内核的 Linux(2.6.31,来自 Ubuntu 9.10):可以运行。
- 具有较旧内核的 Linux:需要选项
bs=512
,mount
因为它错误地使用了 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个大限制:
如果不可移动硬盘没有 MBR 或 GPT 分区表,Microsoft Windows 系统将无法识别它。
Apple Mac OS X 系统无法识别分区磁盘上的 UDF 文件系统。
如果 UDF 块大小与磁盘的逻辑扇区大小不匹配,则所有系统(除了最新的 Linux 内核)都可能无法识别 UDF 文件系统。
自 2.0 版起,工具 mkudffs 可处理所有 3 个限制。格式化不可移动硬盘时,它会创建“假”MBR 表,该表从扇区 0 开始并跨越整个磁盘。因此,可以从第一个分区(Microsoft Windows 需要)或整个磁盘(Apple Mac OS X 需要)读取 UDF 文件系统。有关更多详细信息,请参阅 mkudffs 2.0 手册页。