Вопрос или проблема
Когда вы устанавливаете атрибут только для чтения на диск или раздел с помощью diskpart, сохраняется ли это на самом диске? Некоторые ответы здесь говорят “да”, но по моему опыту это не сохраняется на диске. Я отметил съемный USB-диск как только для чтения на одной машине (win 8.1), перенес его на другую машину (win10), и diskpart не показывает его как только для чтения.
Есть ли возможность сохранить этот атрибут на диске?
Краткий ответ:
Attributes DISK [set | clear] READONLY
сохраняет атрибут в реестре Windows, а не на физическом диске. Это означает, что он действителен только для текущей работы Windows и не переносится и не применяется на другие ОС.
Attributes VOLUME [set | clear] READONLY
сохраняет атрибут на физическом диске. Это значит, что он будет перенесён, установлен и применен также на другие ОС, включая Linux (мне пришлось вручную перемонтировать диск в rw-режиме, плюс это не изменило сохранённый атрибут, поэтому мне пришлось вручную удалить его в Windows).
Будьте осторожны с административным доступом:
в то время как атрибут DISK
предотвращает запись на весь диск (т.е. как в файловую систему тома(ов), так и в таблицу разделов), атрибут VOLUME
предотвращает запись только в файловую систему тома(ов), оставляя таблицу разделов всё ещё доступной для записи (т.е. вы всё ещё можете удалить том, установивший атрибут только для чтения).
Длинный ответ:
Attributes DISK
[set | clear] READONLY
Атрибут сохраняется в значении с именем "Attribute"
, расположенном в подразделе реестра HKLM\SYSTEM\CurrentControlSet\Enum\*\Disk*\Device Parameters\Partmgr
, где *
является перечисленным и установленным узлом устройства диска (смотрите в Свойства устройства в Управлении дисками).
Это значение маски битов, и атрибут readonly
— это Бит №1 (Бит №0 предназначен для онлайн/оффлайн статуса диска), поэтому установка readonly
на онлайн диске изменит значение с 0
на 2
, но установка его на оффлайн диске изменит значение с 1
на 3
.
Преимущества:
Диск полностью является только для чтения: все попытки записи не удутся, включая его таблицу разделов (например, удаление/создание томов, изменение уникального сигнатуры/ID диска и так далее), плюс статус будет чётко виден в Управлении дисками.
Недостатки:
Он действителен только для текущей работы Windows до тех пор, пока его узел устройства остается тем же (нет гарантии для сменных носителей). Диск станет доступным для записи снова, если он подключён к другому компьютеру или его узел устройства изменится по какой-либо причине, например, он подключен к другой шине, порту или хабу (особенно USB) или он удалён и переустановлен в Диспетчере устройств.
Attributes VOLUME
[set | clear] READONLY
Атрибут физически сохраняется на диске, в зависимости от стиля его раздела (MBR или GPT).
На GPT
дисках:
Атрибут сохраняется в поле Attributes
записи в таблице разделов тома, и он действителен ТОЛЬКО для этого тома (как указано в описании справки diskpart
).
На MBR
дисках:
Атрибут сохраняется по адресу смещения 0x400h (или сектор №2 на 512-байтовом логически отформатированном диске) как “короткая версия” записи 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 Основной раздел данных Type 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 использует один и тот же Type GUID для всех файловых систем в разделе, поэтому установка этого Type GUID означает “для всех томов данных” (другие Type GUIDы, такие как раздел восстановления, не будут получать запись “volume” в Diskpart, только “partition”).
Рассматривая определение диска, тома и раздела в diskpart, я предположил следующее:
attributes disk set ...
: Атрибуты диска хранятся в операционной системе (реестре).
gpt attributes=0x...
: Атрибуты раздела хранятся в таблице разделов (существуют только в gpt).
Это описано @ST83, когда говорит о “type guid” и атрибутах в виде шестнадцатеричных значений.
attributes volume set ...
: атрибуты тома хранятся в файловой системе внутри раздела.
Но в MBR операционная система не использовала эти атрибуты для управления томами, а использовала некоторые обходные пути.
Как объяснил @ST83, атрибут хранится по смещению 0x400h для всего диска.
Я чувствую, что немного опоздал к разговору. Но сам факт, что в diskpart есть 3 разные команды, которые каким-то образом были объединены в 2 @ST83, не кажется мне логичным.
Тем не менее, я был бы очень признателен, если бы кто-нибудь из вас нашёл время прояснить любые ошибки, которые я сделал. Или, если я прав, объясните, почему атрибуты тома не использовались, даже если они были там.
Эта информация не может быть сохранена на разделе – это, вероятно, атрибут, связанный с файловой системой – не редкость, что файловые системы имеют такой атрибут, чтобы заставить выполнять проверку диска перед внесением дальнейших изменений на диск, если файловая система находится в несогласованном состоянии при завершении работы.
Флаг только для чтения не может быть сохранён на самом диске.
Чтобы получить статус только для чтения диска, вы можете использовать команду PowerShell Get-Disk.
Например: (Get-Disk -Number 2).IsReadOnly
.
Ответ или решение
Вопрос, где хранится атрибут "только для чтения" диска в Windows, требует понимания того, как операционная система Windows обрабатывает различные уровни дискпартовых команд: диспарт-атрибуты для диска и тому подобное. Давайте подробно рассмотрим механизм работы этого функционала и различия между тем, как атрибуты применяются и сохраняются.
Теория
Первоначально важно осознать, что Windows предлагает несколько уровней управления атрибутами для дисков с использованием утилиты diskpart. Наиболее часто используемые команды это:
-
Disk Attributes (
DISK ATTRIBUTES [SET | CLEAR] READONLY
): Эти атрибуты применяются ко всему диску и хранятся в системном реестре Windows. Это значит, что они работают только в конкретной установке Windows и не переносятся на другие операционные системы или даже другие установки Windows на том же компьютере, если узел устройства изменяется. -
Volume Attributes (
VOLUME ATTRIBUTES [SET | CLEAR] READONLY
): Эти атрибуты применяются к логическому тому и физически сохраняются на диске, в структурированных данных диска, таких как таблицы разделов, что позволяет им сохраняться в случае переноса диска на другие операционные системы, такие как Linux.
Пример
Рассмотрим сценарий: если вы устанавливаете атрибут "только для чтения" для диска, используя команду diskpart DISK ATTRIBUTES
, Windows сохранит эту настройку в реестре. Путь к этому атрибуту в реестре будет примерно таким: HKLM\SYSTEM\CurrentControlSet\Enum\...\Device Parameters\Partmgr
. Из-за этого, когда вы подключаете тот же диск к другой системе, или если устройство переустанавливается, предварительные настройки "только для чтения" теряются.
Теперь, если вы используете команду VOLUME ATTRIBUTES
, атрибуты "только для чтения" сохраняются на самом диске, используя либо записи в GPT (GUID Partition Table), либо в MBR (Master Boot Record). В случае использования GPT, атрибут сохраняется в таблице разделов as часть записи каждого тома, тогда как на MBR-дисках атрибуты хранятся в определённом смещении, что зачастую применяется ко всем томам.
Применение
Зная указанную выше теорию и примеры, мы можем сделать некоторые практические заключения для решения задач с атрибутами "только для чтения" в профессиональной среде Windows:
-
Определите необходимость и сценарий использования: Если вам необходимо переслать диск и хранить настройки "только для чтения" между различными системами или даже между различными операционными системами, лучше всего использовать
VOLUME ATTRIBUTES
. Это гарантирует, что настройки сохранятся независимо от системы, к которой подключается ваш диск. -
Учитывайте тип диска: Если у вас MBR-диск и требуется настроить его так, чтобы все тома были "только для чтения", это может произойти автоматически при одной настройке на уровне диска. Однако, для более точных настроек, таких как выборочные одноразовые изменения на GPT-диске, можно использовать
VOLUME ATTRIBUTES
, чтобы сосредоточиться на определённых томах. -
Понимание ограничений: Отметим, что ни один из этих атрибутов не защищает физическую информацию на диске, например, от случайного или преднамеренного изменения структуры разделов или удаления томов. Эти настройки не являются полноценной защитой данных.
-
Проверяйте текущие установки: Используйте PowerShell команду
Get-Disk
, чтобы оперативно проверять статусы "только для чтения" и убедиться в правильности внедрения атрибута.
Итак, ответ на вопрос, где хранится атрибут "только для чтения" в Windows, зависит от того, какие команды активации атрибута используются. Знание различий между уровнями атрибутов и понимание того, как и где они сохраняются, жизненно важно для управления storage-ресурсами в сетевой или облачной инфраструктуре.