UDF 可以且应该用作硬盘格式吗?

UDF 可以且应该用作硬盘格式吗?

最近我多次看到有人建议使用 UDF 作为 Linux、Mac OS X 和 Windows XP 及更高版本上使用的驱动器的跨平台格式的解决方案。

我在这里搜索过,并没有发现相同的建议(大多数都建议使用 ntfs-3g,但它似乎需要花钱并且没有预装在 Mac 上)。

所以我的问题是:如何正确完成这项工作,有没有人这样做过?您是否填满了驱动器并删除了一些文件以腾出空间,发现一切都像真正的 r/w 格式一样工作,尽管它似乎主要是一次写入格式?

你可以说我疯了,但如果 UDF 系统也能自动挂载并可供登录用户写入,那我会非常高兴。到目前为止,我尝试过的方法(kicsyromy 提到的 udftools 格式)都无法满足这个愿望。

答案1

有人研究了如何使用 udf 格式化闪存驱动器,以便它可以在尽可能多的操作系统上使用。以下是他的发现(曾经那里,目前处于离线状态):

  • Windows 7的完全支持 UDF v2.6,但 UDF 块大小必须与底层设备的块大小相匹配(对于 USB 棒和大多数磁盘,其块大小为 512 字节;“高级格式”磁盘为 4096 字节)。显然,磁盘必须进行分区。

  • Linux 2.6.30及以上版本至少完全支持 UDF 2.5 版本。

  • Mac OS X 10.5完全支持 UDF 2.01 及以下版本,但仅限于在完整磁盘上使用,因此无需分区。

如上所述,对于 USB 硬盘,Windows 要求对磁盘进行分区。另一方面,UDF 仅在 OS X 中用于完整磁盘(未分区)时才有效。令人惊讶的是,有一种解决方案可以同时适用于这两种情况:同时对磁盘进行分区和未分区。

DOS 分区表存储在主引导记录的第 446-510 字节中。此主引导记录存储在磁盘的第一个扇区(即扇区 0)中。通常,指定的第一个分区将从几千字节处开始。但是,似乎可以构造一个分区表,其第一个分区从扇区 0 开始,因此结果是一个包含分区表本身的分区。分区编辑器程序似乎拒绝创建这样的表,但至少最近的 Linux 和 Windows 内核似乎并不在意。

好消息是,UDF 不会(我想是故意的)使用它所在分区或磁盘的前几千字节,因此这个地方实际上可以用来存储遗留分区表,指的是跨整个磁盘的分区。一些测试表明,这在 Linux、Windows 和 Mac OS X 上确实有效:

  • 在 Linux 2.6.30+、Mac OS X 10.5+、Windows Vista+ 中自动以读写方式挂载
  • 在 Windows XP 中可以只读方式使用,在 Linux 2.6.0+ 中可通过命令行挂载使用
  • 支持大文件、UNIX 权限、Unicode 文件名、符号链接、硬链接等。

正确格式化磁盘的脚本:Perl 脚本或者Bash 脚本

答案2

不。

回复时是 2015 年。我在 Mactel 机器 (Macmini 7,1) 上使用 OSX Yosemite、Ubuntu 14.10 和企业版 Windows 10 技术预览版。

我尝试了 UDF 和 exFat。我使用 Ubuntu 进行开发,确实需要 Unix 风格的权限。

所有以前的指南不再适用:UDF 驱动程序已经发展起来,所有操作系统都将接受 UDF 分区,但存在的问题和不稳定性却比我能说出的还要多。

  • 在 Mac OS 上格式化的 UDF 驱动器:无法在 Windows 10 上安装。
  • 在 Linux 上格式化的 UDF 驱动器:无法在 Windows 10 上安装。
  • 在 Windows 10 上格式化的 UDF 驱动器:在 Linux 上以读/写方式安装,在 OSX 上以只读方式安装。

但是,Windows 不允许您在格式化 UDF 卷时指定块大小,因此,您的逻辑块大小可能与分区的物理块大小不同。

我不清楚这是否与我在 OSX 上以读/写方式安装它时遇到的困难有关,但在使用 Linux 删除一定数量的文件后,我就无法在 OSX 上再次安装该驱动器了。

系统陷入内核恐慌并崩溃。

这一点,以及有关该主题的各种答案,都表明目前对这种格式的支持并不一致。

似乎我可以使用NTFS卷来实现现代文件系统特性、Unix 风格的权限(我可能能够设置它们)和所有操作系统上的读/写挂载之间的平衡。

答案3

我刚刚在虚拟机中测试了这一点。看来您需要在 Windows 中(重新)创建分区,为其分配驱动器号,但不要将其格式化为任何文件系统。之后启动 Ubuntu,只需按照说明操作,它就可以进行读/写。

记得备份所有数据!

首先安装 UDF 工具:

sudo apt-get install udftools

将您想要格式化为 UDF^ 的分区上的第一个块替换为空:

sudo dd if=/dev/zero of=/dev/sdxN bs=512 count=1

最后格式化为 UDF^:

sudo mkudffs --media-type=hd --blocksize=512 /dev/sdxN

^其中:

  • x 是当前分配给硬盘的字母的占位符

  • N 是分区号的占位符

祝你好运,如果成功的话请告诉我。

相关内容