UEFI / GPT и перемещение C: \ раздел

414
Manchineel

Я помню, что когда mobos использовал BIOS и загрузчик находился в MBR, перемещение раздела Windows вызывало сбой загрузки системы. Я только что закончил (случайно) раздел C (пытаясь изменить его размер) на компьютере своего друга, который имеет таблицу разделов GPT и материнскую плату UEFI, и - к моему удивлению и восхищению, компьютер запустился идеально, не жалуясь на изменение первый сектор раздела (и мой друг не злится на меня). Я полагаю, это потому, что загрузчики UEFI используют UID разделов вместо адресов.

Это заставляет меня задуматься, означает ли это, что я могу свободно перемещать раздел ОС в системе GPT. Также это относится только к Windows или GRUB тоже?

3
Этот вопрос мне довольно понятен, и поэтому ИМХО его не стоит закрывать. Rod Smith 6 лет назад 2

1 ответ на вопрос

5
Rod Smith

Я полагаю, это потому, что загрузчики UEFI используют UID разделов вместо адресов.

Это отчасти, но не совсем, правильно. Загрузчики в режиме BIOS, как подразумевается в приведенном выше заявлении, часто используют номера секторов, чтобы помочь идентифицировать последующий код. То есть BIOS считывает MBR и выполняет любой код, который он содержит. MBR слишком мал, чтобы содержать действительно гибкий загрузчик, поэтому он передает управление коду, расположенному в другом месте, обычно идентифицируя его по номеру своего сектора, находя раздел с установленным флагом загрузки и выполняя код в EBR (первый сектор ) этого раздела. Этот вторичный код загрузчика может повторить этот процесс, опять же часто полагаясь на номера секторов. Таким образом, перемещение разделов или изменение их размера с начальных точек может привести к невозможности загрузки ОС, поскольку сам код загрузчика перемещен.

В EFI, напротив, загрузчики не хранятся в MBR или в EBR разделов. Вместо этого загрузчики хранятся как программные файлы EFI в системном разделе EFI (ESP). Эти программные файлы могут быть настолько большими, насколько это необходимо (вплоть до ограничений, налагаемых размерами файлов, объемом ОЗУ и т. Д.), Поэтому нет необходимости разбивать загрузчик так, как обычно делятся загрузчики BIOS. Кроме того, EFI понимает разделы, в отличие от BIOS, поэтому загрузчик в режиме EFI может ссылаться на разделы, если это необходимо.

Хотя загрузчик EFI может определить местонахождение раздела по его GUID или каким-либо другим способом, на самом деле это не ключевое различие, которое важно для вашего вопроса. Загрузчики в режиме BIOS часто ломаются при перемещении разделов, потому что сам код загрузчика перемещается; но в EFI загрузчик находится в файле, а не в коде, привязанном к определенному сектору. Таким образом, перемещение раздела ОС не перемещает код загрузчика. Даже если вы переместили ESP (там, где живет загрузчик), EFI понимает разделы и файловую систему FAT и, таким образом, может продолжать обнаруживать загрузчик до тех пор, пока идентификационная информация ESP и имя файла загрузчика не изменятся как результат.

Это заставляет меня задуматься, означает ли это, что я могу свободно перемещать раздел ОС в системе GPT. Также это относится только к Windows или GRUB тоже?

Как правило, в системах на основе EFI безопаснее перемещать разделы, чем в системах на основе BIOS. Я бы не сказал, что это абсолютно безопасно на 100%. Во-первых, всегда существует риск того, что операция перемещения раздела приведет к повреждению файловой системы. Это просто стандартное предостережение при обсуждении таких операций. Проблема, которая более важна для вашего вопроса, состоит в том, что загрузчики могут делать все, что они хотят, так, как они хотят. Хотя я не знаю примеров этого, загрузчик на основе EFI мог быполагаться на необработанные номера секторов для идентификации ядра ОС, что сделает небезопасным перемещение раздела, на котором находится ядро. Если загрузчик использует такие функции, как номера разделов, для идентификации раздела с ядром, и если перемещение раздела изменяет номер раздела, процесс загрузки может завершиться неудачно после перемещения раздела. OTOH, перемещение раздела может не создать проблем, если номер раздела не изменился. Таким образом, безопасность операции перемещения раздела зависит от загрузчика и деталей того, что происходит при перемещении раздела.