UDF 的分区 ID/文件系统类型是什么?

sko*_*ima 10 linux windows filesystems

在 UDF 格式的 CD/DVD/Blu-Ray 上使用 cfdisk 检查这可能是微不足道的,但我手头没有它们。

我在 USB 硬盘驱动器上创建了一个 UDF 格式的分区,以在 Linux 和 Windows 计算机之间共享数据(FAT 不处理 4GB 文件,Linux 下的 NTFS 访问权限支持不稳定)。我现在只有一个问题 - Windows 拒绝挂载分区,因为文件系统类型 ID 设置为“83”(“Linux”)。我已经看了很多遍,但找不到应该放在那里的数字?

(后续:“我应该用什么工具将硬盘格式化为 UDF? ”)

小智 10

答案是分区类型 06 (FAT16)。不要问我为什么,问微软。


sko*_*ima 6

事实证明UDF没有分区表,也没有分配给它的分区 ID。该文件系统必须跨越整个磁盘才能被 Windows 识别。将硬盘驱动器格式化为 UDF 不会触及现有分区表(小心 - 它会包含陈旧信息,如果您使用它安装驱动器,您将破坏数据!)。

出于好奇 - UDF 2.5 和更新版本为元数据创建了单独的分区(每个磁盘一个或两个)。但是,这些分区在标准 DOS 分区表中也不可见。


Pal*_*ali 5

简短回答:我建议对 UDF 分区使用 MBR id 0x07

\n\n
\n\n

长答案:

\n\n

Linux 不关心 MBR 分区 ID 并忽略它 (*)。

\n\n

当且仅当IsRecognizedPartition(PartitionType)为 true 时,Windows 2000 及更高版本才可以为具有 id PartitionType的某些分区分配驱动器号。此外,对于非 FT 分区,必须确保IsFTPartition(PartitionType)为 false(否则该分区将被检测为 FT,而不是普通的 FAT/NTFS/UDF/...)。

\n\n

条件IsRecognizedPartition(PartitionType) && !IsFTPartition(PartitionType)适用于这些 MBR 分区 ID:0x01、0x04、0x06、0x07、0x0B、0x0C、0x0E (**)。这意味着如果 MBR 分区 ID 是其中之一,Windows 2000(及新版本)可以识别并使用 UDF 分区。可能没有其他限制,并且任何受支持的文件系统都接受具有任何 MBR id 的分区。这意味着这些 MBR ID 不用于检测文件系统。

\n\n

但是,当应使用特定的PartitionType时,Microsoft有一些建议:

\n\n
    \n
  • 0x01 - FAT12 主分区或逻辑驱动器(卷中少于 32,680 个扇区)
  • \n
  • 0x04 - FAT16 分区或逻辑驱动器(32,680\xe2\x80\x9365,535 个扇区或 16 MB\xe2\x80\x9333 MB)
  • \n
  • 0x06 - BIGDOS FAT16 分区或逻辑驱动器 (33 MB\xe2\x80\x934 GB)
  • \n
  • 0x07 - 可安装文件系统(NTFS 分区或逻辑驱动器)
  • \n
  • 0x0B - FAT32 分区或逻辑驱动器
  • \n
  • 0x0C - FAT32 分区或使用 BIOS INT 13h 扩展的逻辑驱动器 (***)
  • \n
  • 0x0E - BIGDOS FAT16 分区或使用 BIOS INT 13h 扩展的逻辑驱动器 (***)
  • \n
\n\n

还有微软的意思

\n\n
    \n
  • 0x01 - 指定具有 12 位 FAT 条目的分区。
  • \n
  • 0x04 - 指定具有 16 位 FAT 条目的分区。
  • \n
  • 0x06 - 指定 MS-DOS V4 大分区。
  • \n
  • 0x07 - 指定 IFS 分区。
  • \n
  • 0x0B - 指定 FAT32 分区。
  • \n
  • 0x0C - Windows 95/98:指定使用扩展 INT 13 服务的分区。
  • \n
\n\n

在维基百科上还可以找到一些建议:

\n\n
    \n
  • 0x01 - CHS/LBA - DOS 2.0+ - FAT12 作为第一个物理 32 MB 磁盘中的主分区...(否则使用 0x06 代替)
  • \n
  • 0x04 - CHS/LBA - DOS 3.0+ - FAT16 少于 65536 个扇区 (32 MB) ...(否则使用 0x06 代替)
  • \n
  • 0x06 - CHS/LBA - DOS 3.31+ - 具有 65536 或更多扇区的 FAT16B。它必须驻留在第一个物理 8 GB 磁盘中...(否则使用 0x0E 代替)。也用于主分区中的 FAT12 和 FAT16 卷(如果它们不驻留在第一个物理 32 MB 磁盘中)。
  • \n
  • 0x07 - CHS/LBA - OS/2 1.2+、Windows NT/CE - IFS/HPFS/NTFS/exFAT/QNX
  • \n
  • 0x0B - CHS/LBA - DOS 7.1+ - 带 CHS 寻址的 FAT32
  • \n
  • 0x0C - LBA - DOS 7.1+ - 带 LBA 的 FAT32
  • \n
  • 0x0E - LBA - DOS 7.0+ - 带 LBA 的 FAT16B
  • \n
\n\n

为了完整的 ID 列表,这里有一些关于不支持 UDF 格式硬盘分区的旧系统的信息。

\n\n

Windows NT 4.0 及更早版本只能将驱动器号分配给 MBR ID 为:0x01、0x04、0x06、0x07 的分区。

\n\n

基于 DOS 的 Windows(95、98 和 ME)只能将驱动器号分配给 MBR ID 为:0x01、0x04、0x06、0x0B、0x0C、0x0E 的分区。MS-DOS 本身只能访问 MBR ID 为:0x01、0x04、0x06 的分区。请注意,这些系统使用 MBR 分区 ID 来检测文件系统。MBR 分区 ID 必须与分区上的文件系统匹配。

\n\n

结论:

\n\n

查看分区大小:0x01 和 0x04 应该仅用于磁盘前 32MB 中的分区。0x06 仅存在于磁盘的前 8GB 中。0x0B 用于 CHS 寻址,对 8GB 磁盘有限制。因此,没有此类限制的只有 id:0x07、0x0C 和 0x0E。由于 0x0C 和 0x0E 用于 FAT 分区,我建议选择0x07。它对于 IFS(可安装文件系统)分区来说意味着,根据 Wikipedia,Microsoft 在 Windows 2000 IFS API 中添加了对 UDF 的支持。使用 0x0C 或 0x0E 会导致基于 DOS 的系统将该分区显示为 FAT,即使它会被格式化为 UDF。MBR ID 为 0x07 的分区在这些系统上是隐藏的。它们不支持 UDF,因此最好选择 0x0C 或 0x0E。

\n\n

通用时间:

\n\n

GPT分区布局不存在这个问题,但它有与MBR类似的问题。没有为 UDF 分配分区 GUID(MBR id 的 GPT 等效项)。因为 Windows XP x64 支持 UDF,只能识别 GUID EBD0A0A2-B9E5-4433-87C0-68B6B72699C7的 GPT 数据分区(Microsoft 基本数据分区)的 GPT 数据分区,因此它是 GPT 的唯一可能选择。

\n\n

资料来源:

\n\n\n\n

\n(*) 有一个例外:MBR ID 0x05、0x0F 和 0x85 用于检测扩展 MBR 分区。
\n(**) 这两个调用的定义可以在 WinIoCtl.h 文件中找到,因为它们被声明为 C 宏。
\n(***) BIOS INT 13h 扩展意味着使用 LBA 而不是 CHS。\n

\n