当您使用 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
在线磁盘上的设置会将值从 更改为0
,2
但在离线磁盘上设置会将值从 更改1
为3
。
优点:
磁盘是完全只读:所有写入尝试都将保证失败,包括其分区表(例如删除/创建卷、更改唯一磁盘签名/ID 等),而且状态将在磁盘管理中清晰可见。
缺点:
它仅对当前正在运行的 Windows 安装有效,直到其枚举设备节点保持不变(不保证可移动驱动器)。如果磁盘连接到另一台计算机或其设备节点由于任何原因发生变化,例如连接到另一条总线、端口或集线器(尤其是 USB),或者在设备管理器中卸载并重新安装,则磁盘将再次处于读写模式。
属性VOLUME
[设置 | 清除] READONLY
该属性是物理存储在磁盘上,取决于其分区样式(MBR 或 GPT)。
在GPT
磁盘上:
该属性存储在Attributes
卷分区表条目的字段中,并且它仅对该卷有效(如diskpart
帮助说明中所述)。
在MBR
磁盘上:
该属性存储在偏移量 0x400h(或 512 字节逻辑格式化磁盘上的扇区 #2)作为 GPT 条目的“短版本”,其中仅使用Type GUID
和Attributes
字段,总共 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
设置)。
以同样的方式,也可以设置SHADOWCOPY
、HIDDEN
和NODEFAULTDRIVELETTER
属性(分别为位#61
、#62
和#63
)。
优点:
该属性是保存当磁盘连接到其他系统(例如 Linux)时,即使卷以 rw 模式(重新)安装,它也会保留它。
缺点:
该属性在“磁盘管理”中不可见,仅在内可见diskpart
,此外:
在GPT
磁盘上:
- 属性仅适用于选定的卷(但这是预期的行为);
- 它不会阻止删除只读卷(但如果删除,则属性会被自动清除,因为其关联的 GPT 条目已完全清零)。
在MBR
磁盘上:
属性适用于磁盘上的所有卷,因为没有其他方法可以在 MBR(以及随之而来的磁盘属性结构)上设置属性;
卷仍然可以被删除(据我所知,原因不明);
如果删除一个或多个或所有卷,则不会清除该属性(安全清除它的唯一方法是在提示符
attributes VOLUME CLEAR readonly
下执行diskpart
);仍然可以创建新卷,但无法格式化(因为它是写入操作)。
这是我的简单观点,但将卷属性应用于 MBR 磁盘上的所有卷的原因可能是:
MBR 扇区中没有更多可用位置,因为“启动指示器”标志拒绝除 0x80 或 0x00 之外的任何值(否则启动顺序将出错)并且位于偏移量 0x1BC(444)处的“可选”字节被声明为“保留”(尽管该 16 位字段的某些位可以使用);
Windows 对分区中的所有文件系统共享相同的类型 GUID,因此设置该类型 GUID 意味着“针对所有数据卷”(其他类型 GUID(例如恢复分区)将不会接收 Diskpart“卷”条目,只会接收“分区”条目)。
答案2
该信息不能存储在分区上 - 它可能是与文件系统相关的属性 - 如果文件系统在关机时状态不一致,则文件系统具有这样的属性以强制进行磁盘检查,然后才允许对磁盘进行进一步的更改,这种情况并不少见。
答案3
只读标志不能存储在磁盘本身上。要获取磁盘的只读状态,您可以使用 PowerShell 命令 Get-Disk。例如:(Get-Disk -Number 2).IsReadOnly