简短回答:

简短回答:

当您使用 diskpart 在磁盘或分区上设置只读属性时,它是否存储在磁盘本身上?这里的一些答案说是的,但根据我的经验,它不会保存在磁盘上。我在一台机器(win 8.1)上将可移动 USB 磁盘标记为只读,将其带到另一台机器(win10),diskpart 没有将其显示为只读。是否有选项可以将此属性保存在磁盘上?

答案1

简短回答:

Attributes DISK [set | clear] READONLY存储属性在 Windows 注册表中,而不是物理磁盘。这意味着它仅对当前正在运行的 Windows 安装有效,并且不会在其他操作系统上执行、设置和强制执行

Attributes VOLUME [set | clear] READONLY存储属性在物理磁盘上。 这意味着它将被携带、设置和执行到其他操作系统上,包括 Linux(我必须以 rw 模式手动重新安装磁盘,而且它没有触及存储的属性,所以我必须在 Windows 中手动将其删除)。

但要小心管理访问权限:
虽然该DISK属性可以防止整个磁盘上的所有写入(即卷文件系统和分区表),该VOLUME属性阻止写入仅适用于卷文件系统,使分区表仍然可写(即您仍然可以删除只读卷)。


长答案:

属性DISK[设置 | 清除] READONLY

该属性存储在名为 的值中"Attribute",位于注册表子项HKLM\SYSTEM\CurrentControlSet\Enum\*\Disk*\Device Parameters\Partmgr,其中*是磁盘的枚举和安装的设备节点(查看“磁盘管理”中的“设备属性”)。

它是一个位掩码值,属性readonly为位#1(位#0表示在线/离线磁盘状态),因此readonly在线磁盘上的设置会将值从 更改为02但在离线磁盘上设置会将值从 更改13

优点:
磁盘是完全只读:所有写入尝试都将保证失败包括其分区表(例如删除/创建卷、更改唯一磁盘签名/ID 等),而且状态将在磁盘管理中清晰可见。

缺点:
它仅对当前正在运行的 Windows 安装有效,直到其枚举设备节点保持不变(不保证可移动驱动器)。如果磁盘连接到另一台计算机或其设备节点由于任何原因发生变化,例如连接到另一条总线、端口或集线器(尤其是 USB),或者在设备管理器中卸载并重新安装,则磁盘将再次处于读写模式。

属性VOLUME[设置 | 清除] READONLY

该属性是物理存储在磁盘上,取决于其分区样式(MBR 或 GPT)。

GPT磁盘上:
该属性存储在Attributes卷分区表条目的字段中,并且它仅对该卷有效(如diskpart帮助说明中所述)。

MBR磁盘上:
该属性存储在偏移量 0x400h(或 512 字节逻辑格式化磁盘上的扇区 #2)作为 GPT 条目的“短版本”,其中仅使用Type GUIDAttributes字段,总共 0x18h 字节,并且有效适用于所有卷(如diskpart帮助说明中所述)。

下面是十六进制输出示例及其结构:

   Hex Offset    0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
   0000000400   A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7
   0000000410   00 00 00 00 00 00 00 10
  • 0x400:128 位 GUID Type GUID,带有值EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(即 Microsoft基本数据分区类型GUID);

  • 0x410:64 位整数Attributes,有值0x1000000000000000(即位#60设置)。

以同样的方式,也可以设置SHADOWCOPYHIDDENNODEFAULTDRIVELETTER属性(分别为位#61#62#63)。

优点:
该属性是保存当磁盘连接到其他系统(例如 Linux)时,即使卷以 rw 模式(重新)安装,它也会保留它。

缺点:
该属性在“磁盘管理”中不可见,仅在内可见diskpart,此外:

GPT磁盘上:

  • 属性仅适用于选定的卷(但这是预期的行为);
  • 它不会阻止删除只读卷(但如果删除,则属性会被自动清除,因为其关联的 GPT 条目已完全清零)。

MBR磁盘上:

  • 属性适用于磁盘上的所有卷,因为没有其他方法可以在 MBR(以及随之而来的磁盘属性结构)上设置属性;

  • 卷仍然可以被删除(据我所知,原因不明);

  • 如果删除一个或多个或所有卷,则不会清除该属性(安全清除它的唯一方法是在提示符attributes VOLUME CLEAR readonly下执行diskpart);

  • 仍然可以创建新卷,但无法格式化(因为它是写入操作)。


这是我的简单观点,但将卷属性应用于 MBR 磁盘上的所有卷的原因可能是:

  1. MBR 扇区中没有更多可用位置,因为“启动指示器”标志拒绝除 0x80 或 0x00 之外的任何值(否则启动顺序将出错)并且位于偏移量 0x1BC(444)处的“可选”字节被声明为“保留”(尽管该 16 位字段的某些位可以使用);

  2. Windows 对分区中的所有文件系统共享相同的类型 GUID,因此设置该类型 GUID 意味着“针对所有数据卷”(其他类型 GUID(例如恢复分区)将不会接收 Diskpart“卷”条目,只会接收“分区”条目)。

答案2

该信息不能存储在分区上 - 它可能是与文件系统相关的属性 - 如果文件系统在关机时状态不一致,则文件系统具有这样的属性以强制进行磁盘检查,然后才允许对磁盘进行进一步的更改,这种情况并不少见。

答案3

只读标志不能存储在磁盘本身上。要获取磁盘的只读状态,您可以使用 PowerShell 命令 Get-Disk。例如:(Get-Disk -Number 2).IsReadOnly

相关内容