(这是“UDF 的分区 ID / 文件系统类型是什么?“)
我知道两种将硬盘格式化为 UDF 的方法:
- Windows Vista 或更高版本:“
format x: /fs:UDF
”(不要使用/q
!) - Linux:“
mkudffs --media-type=hd --blocksize=512 /dev/sdx
”
问题是“其他”操作系统根本无法识别已格式化的磁盘:无论我尝试什么命令,它都拒绝安装它。
如何将硬盘格式化为 UDF,以便 Windows 和 Linux 都能使用它?
编辑:更新了命令,现在结果应该可以在任一操作系统上运行。
答案1
事实证明,使用/q
Windows 上的开关是罪魁祸首:它启用了“快速格式化”,即每次写入磁盘时,格式化过程都会在后台继续。一旦完成,Linux 就可以很好地处理驱动器。
答案2
在格式化 UDF 时,有一件事不能过分强调,那就是在格式化 UDF 时使用适当的块大小是多么重要。正如解释的那样这里,使用与物理扇区大小不匹配的配置块大小可能意味着某些操作系统将无法将驱动器检测为有效的 UDF。
受上述链接答案(以及我的其他研究/测试)的启发,我编写了一个脚本来自动执行 UDF 中的格式化过程 - 使用正确检测到的扇区大小。参见GitHub 上的 format-udf. 显著特点:
- 将块驱动器(硬盘驱动器或闪存驱动器)格式化为通用磁盘格式 (UDF)
- 使用 UDF 修订版 2.01 实现最大兼容性
- 前 4096 个扇区被清零以清除任何现有的 MBR(正确检测 UDF 所必需)
- 生成的文件系统可以在多个操作系统系列(Windows、OS X 和 Linux)中读取/写入
- 可在任何具有 Bash 环境的操作系统上运行
由于最后一点,我编写的这个脚本无法在 Windows 上使用。但是,该脚本可以在 OS X 和 Linux 上运行。这样做之后,Windows 应该能够神奇地检测到新格式化的 UDF 驱动器。
为了直接回答提出的问题,format-udf 将:
- 根据操作系统和环境选择适当的格式化工具(
mkudffs
在 Linux 上) - 自动检测并填充格式化所需的所有参数(包括
blocksize
) - 最大化操作系统兼容性(请参阅 GitHub 页面的兼容性图表)
- 提供提问者想要的最大功能集(和最小限制)
答案3
您如何将上一个问题中的发现(UDF 文件系统应在整个磁盘而不是分区上创建)与 Windows 命令(“format x: /fs:UDF”)相协调?在我的尝试中,Windows 仅为分区提供驱动器号。
至于格式化兼容性,我认为关键在于块大小。由于大多数硬盘和 USB 闪存盘的块大小为 512 字节,因此当我创建该块大小的 FS 时,兼容性最高。我认为 format.com 正在使用该块大小,并且 mkudffs 有一个用于更改块大小的命令开关。当我使用 512 字节块时,我只能让 OS X 和 Windows 挂载文件系统。旧版本的 Linux 假定块大小为 2048,但您始终可以使用“-o bs=512”进行挂载。
整个磁盘与分区问题仍然会导致兼容性问题。当我格式化整个磁盘时,Windows 无法挂载,而 OS X 在确定其文件系统时不会查看分区的类型编号,这迫使我手动挂载它。Linux 不在乎,只要我给它适当的设备名称(sda 与 sda1)。
总之,我发现最兼容的设置是类型 06(FAT16)的单个分区,使用 UDF 格式化,块大小为 512。在 Windows 上自动运行,在 Linux 和 OS X 上需要少量手动干预。