
當您使用diskpart在磁碟或分割區上設定唯讀屬性時,它是否儲存在磁碟本身上?這裡的一些答案說是,但根據我的經驗,它沒有保存在磁碟上。我在一台機器(win 8.1)上將可移動 USB 磁碟標記為唯讀,然後將其帶到另一台機器(win10)上,diskpart 不將其顯示為唯讀。是否有選項可以將此屬性保存在磁碟上?
答案1
簡短回答:
Attributes DISK [set | clear] READONLY
儲存屬性在 Windows 登錄中,不在物理磁碟上。這意味著它僅對目前運行的 Windows 安裝有效,不會在其他作業系統上攜帶、設定和強制。
Attributes VOLUME [set | clear] READONLY
儲存屬性在實體磁碟上。這意味著它也將被攜帶、設定和強製到其他作業系統上,包括 Linux(我必須以讀寫模式手動重新掛載磁碟,而且它沒有觸及儲存的屬性,因此我必須在 Windows 中手動將其刪除)。
但要小心管理訪問:
當該DISK
屬性阻止整個磁碟上的所有寫入(即卷宗檔案系統和分區表),此VOLUME
屬性防止寫入僅適用於卷宗檔案系統,使分割表仍然可寫入(即您仍可刪除唯讀磁碟區)。
長答案:
屬性DISK
[設定|清除]只讀
此屬性儲存在名為 的值中"Attribute"
,該值位於登錄子項目 中HKLM\SYSTEM\CurrentControlSet\Enum\*\Disk*\Device Parameters\Partmgr
,其中*
是磁碟的枚舉和安裝的裝置節點(請在「磁碟管理」中的「裝置屬性」中檢視)。
它是一個位元遮罩值,屬性readonly
為 Bit #1(Bit #0 表示線上/離線磁碟狀態),因此readonly
在線上磁碟上設定會將值變更為0
,2
但在離線磁碟上設定會將值變更1
為3
。
優點:
該磁碟是完全只讀:所有寫入嘗試將保證失敗,包括它的分區表(例如刪除/建立磁碟區、變更唯一磁碟簽章/ID 等),且狀態將在磁碟管理中清晰可見。
缺點:
它僅對目前運行的 Windows 安裝有效,直到其枚舉裝置節點保持不變(不保證可移動磁碟機)。如果磁碟連接到另一台電腦或其裝置節點因任何原因發生更改,例如連接到另一個匯流排、連接埠或集線器(尤其是USB)或在裝置管理員中卸載並重新安裝,則磁碟將再次處於讀取寫模式。
屬性VOLUME
[設定|清除]只讀
屬性是物理存儲在磁碟上,取決於其分割樣式(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)時,即使磁碟區以讀寫模式(重新)安裝,它也會保留它。
缺點:
該屬性在磁碟管理中不可見,但僅在 中可見diskpart
,加上:
在GPT
磁碟上:
- 屬性僅適用於選定的磁碟區(但這是預期的行為);
- 它不會阻止只讀卷宗被刪除(但如果刪除,該屬性將自動清除,因為其關聯的 GPT 條目完全清除)。
在MBR
磁碟上:
屬性適用於磁碟上的所有磁碟區,因為沒有其他方法可以在 MBR 上設定屬性(以及隨後的磁碟屬性結構);
卷仍然可以被刪除(出於未知原因,AFAIK);
如果刪除一個或多個或所有捲,則不會清除該屬性(安全清除該屬性的唯一方法是在提示字元
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