
Когда вы устанавливаете атрибут «только для чтения» на диске или разделе с помощью diskpart, он сохраняется на самом диске? Некоторые ответы здесь говорят «да», но по моему опыту он не сохраняется на диске. Я пометил съемный USB-диск как «только для чтения» на одной машине (win 8.1), перенес его на другую машину (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
атрибут — бит № 1 (бит № 0 соответствует статусу диска «онлайн/офлайн»), поэтому установка readonly
для подключенного диска изменит значение с 0
на 2
, а установка для отключенного диска изменит значение с 1
на 3
.
Преимущества:
Диск естьполностьютолько для чтения: все попытки записи будут гарантированноНЕУДАЧА,включая таблицу разделов(например, удаление/создание томов, изменение уникальной подписи/идентификатора диска и т. д.), а также статус будет четко виден в Управлении дисками.
Недостатки:
Он действителен только для текущей работающей установки Windows, пока ее узел перечисления устройств не останется прежним (нет гарантии для съемных дисков). Диск снова будет в режиме чтения-записи, если он подключен к другому компьютеру или его узел устройства изменится по какой-либо причине, например, он подключен к другой шине, порту или концентратору (особенно USB) или он будет удален и переустановлен в диспетчере устройств.
Атрибуты VOLUME
[установить | очистить] ТОЛЬКО ДЛЯ ЧТЕНИЯ
Атрибут - этофизически хранится на диске, в зависимости от стиля раздела (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Раздел базовых данныхВведите GUID);0x410: 64-битное целое число
Attributes
со значением0x1000000000000000
(т.е.#60
установленным битом).
Таким же образом можно задать атрибуты SHADOWCOPY
, HIDDEN
и NODEFAULTDRIVELETTER
(биты #61
, #62
и #63
, соответственно).
Преимущества:
Атрибут - этосохранилиськогда диск подключен к другим системам, например, Linux, что сохраняет его даже если том (пере)монтируется в режиме чтения/записи.
Недостатки:
Атрибут не виден в Управлении дисками, а только в diskpart
, плюс:
На GPT
дисках:
- атрибуты применяются ТОЛЬКО к выбранному тому (но это ожидаемое поведение);
- это не препятствует удалению тома, доступного только для чтения (но если он удаляется, атрибут автоматически очищается, поскольку связанная с ним запись GPT полностью обнуляется).
На MBR
дисках:
атрибуты применяются ко ВСЕМ томам на диске, поскольку нет другого способа задать атрибуты в MBR (и, соответственно, структуру атрибутов на диске);
тома по-прежнему можно удалять (насколько мне известно, по неизвестной причине);
атрибут НЕ очищается, если удаляются один или несколько томов или все тома (единственный способ безопасно очистить его — выполнить команду
attributes VOLUME CLEAR readonly
вdiskpart
командной строке);Новые тома по-прежнему можно создавать, но их нельзя форматировать (поскольку это операция записи).
Это моя упрощенная точка зрения, но причина, по которой атрибуты тома применяются ко ВСЕМ ТОМАМ на MBR-дисках, может быть следующей:
Больше нет доступных мест в секторе MBR, так как флаг «индикатор загрузки» отклоняет любые значения, отличные от 0x80 или 0x00 (иначе последовательность загрузки сойдёт с ума), а «необязательные» байты, расположенные по смещению 0x1BC (444), объявлены «зарезервированными» (несмотря на то, что некоторые биты этого 16-битного поля могут быть использованы);
Windows использует один и тот же Type GUID для всех файловых систем в разделе, поэтому установка этого Type GUID означает «для всех томов данных» (другие Type GUID, такие как раздел восстановления, не получат запись «тома» Diskpart, только запись «раздела»).
решение2
Эту информацию нельзя хранить в разделе — вероятно, это атрибут, связанный с файловой системой. Нередко файловые системы имеют такой атрибут, чтобы принудительно выполнить проверку диска перед внесением дальнейших изменений на диск, если файловая система не находится в согласованном состоянии при завершении работы.
решение3
Флаг «Только для чтения» не может храниться на самом диске. Чтобы получить статус диска «только для чтения», можно использовать команду PowerShell Get-Disk. Например: (Get-Disk -Number 2).IsReadOnly