Журнал LinuxFormat - перейти на главную

LXF168:Пере-перезагрузка

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Категория: Главное в мире Linux == UEFI: Пе­ре-пе­ре­за­груз­ка == ''BIOS за­гру­жал ПК 30 лет, но …»)
 
(UEFI: Пе­ре-пе­ре­за­груз­ка)
 
(не показаны 4 промежуточные версии 1 участника)
Строка 10: Строка 10:
  
 
MBR слу­жит двум це­лям: она со­дер­жит bootloader, исполняемый BIOS для за­груз­ки ком­пь­ю­те­ра, и таб­ли­цу раз­де­лов, оп­ре­де­ляю­щую рас­по­ло­жение фай­ло­вых сис­тем на дис­ке. Вся эта ин­фор­ма­ция хранит­ся в са­мом пер­вом сек­то­ре дис­ка (име­нуе­мом сек­тор 0) и по этой при­чине ог­раничена до 512 байт: 446 байт под за­груз­чик, плюс таб­ли­ца раз­де­лов, со­дер­жа­щая до че­ты­рех 16-байт­ных за­пи­сей. По­следние два бай­та – это подпись, по ко­то­рой BIOS рас­по­зна­ет дей­ст­вую­щую MBR. Таб­ли­цы раз­де­лов ис­поль­зу­ют ад­рес­ные по­ля с 32-бит­ным сек­то­ром, а зна­чит, не мо­гут об­ра­щать­ся к дис­кам раз­ме­ром бо­лее 2 TiB. Та­кой тип таб­ли­цы раз­де­лов час­то име­ну­ет­ся таб­ли­цей раз­де­лов MSDOS, с це­лью от­ли­чить его от но­во­го GPT.
 
MBR слу­жит двум це­лям: она со­дер­жит bootloader, исполняемый BIOS для за­груз­ки ком­пь­ю­те­ра, и таб­ли­цу раз­де­лов, оп­ре­де­ляю­щую рас­по­ло­жение фай­ло­вых сис­тем на дис­ке. Вся эта ин­фор­ма­ция хранит­ся в са­мом пер­вом сек­то­ре дис­ка (име­нуе­мом сек­тор 0) и по этой при­чине ог­раничена до 512 байт: 446 байт под за­груз­чик, плюс таб­ли­ца раз­де­лов, со­дер­жа­щая до че­ты­рех 16-байт­ных за­пи­сей. По­следние два бай­та – это подпись, по ко­то­рой BIOS рас­по­зна­ет дей­ст­вую­щую MBR. Таб­ли­цы раз­де­лов ис­поль­зу­ют ад­рес­ные по­ля с 32-бит­ным сек­то­ром, а зна­чит, не мо­гут об­ра­щать­ся к дис­кам раз­ме­ром бо­лее 2 TiB. Та­кой тип таб­ли­цы раз­де­лов час­то име­ну­ет­ся таб­ли­цей раз­де­лов MSDOS, с це­лью от­ли­чить его от но­во­го GPT.
{{Врезка|left|Заголовок= Боль­шой диск|Ширина=60%|Содержание=
+
{{Врезка|left|Заголовок= Боль­шой диск|Ширина=58%|Содержание=
 
Раз­ме­ры же­ст­ких дис­ков ста­ли та­ки­ми боль­ши­ми, что схе­ма де­ления на раз­де­лы MS-DOS уже не справ­ля­ет­ся с ними. Она не умее­т об­ра­щать­ся к дис­кам раз­ме­ром бо­лее 2 TiB, по­то­му что таб­ли­цы раз­де­лов хра­нят ад­ре­са сек­то­ров в ви­де 32-бит­ных чи­сел, то есть бо­лее 2^32 сек­то­ров быть не мо­жет.
 
Раз­ме­ры же­ст­ких дис­ков ста­ли та­ки­ми боль­ши­ми, что схе­ма де­ления на раз­де­лы MS-DOS уже не справ­ля­ет­ся с ними. Она не умее­т об­ра­щать­ся к дис­кам раз­ме­ром бо­лее 2 TiB, по­то­му что таб­ли­цы раз­де­лов хра­нят ад­ре­са сек­то­ров в ви­де 32-бит­ных чи­сел, то есть бо­лее 2^32 сек­то­ров быть не мо­жет.
  
 
Так как в ка­ж­дом сек­то­ре 512 байт, это да­ет мак­си­маль­ный объ­ем 2 TiB. Но­вая схе­ма раз­де­лов GPT об­хо­дит дан­ное ог­раничение, ис­поль­зуя 64-бит­ные об­лас­ти, что по­зво­ля­ет хранить 2^64 сек­то­ров по 512 байт, или 8 ZiB (9,б4 ZB). Это пре­восхо­дит сум­му всех ныне су­ще­ст­вую­щих хранилищ.  
 
Так как в ка­ж­дом сек­то­ре 512 байт, это да­ет мак­си­маль­ный объ­ем 2 TiB. Но­вая схе­ма раз­де­лов GPT об­хо­дит дан­ное ог­раничение, ис­поль­зуя 64-бит­ные об­лас­ти, что по­зво­ля­ет хранить 2^64 сек­то­ров по 512 байт, или 8 ZiB (9,б4 ZB). Это пре­восхо­дит сум­му всех ныне су­ще­ст­вую­щих хранилищ.  
 
}}
 
}}
[[Файл: | |thumb|400px|> Диск GPT со­дер­жит две ко­пии таб­лиц раз­де­лов плюс за­щит­ную таб­ли­цу раз­де­лов MS-DOS.]]  
+
[[Файл:LXF168.feat_uefi.partit_opt2.png | |thumb|380px|> Диск GPT со­дер­жит две ко­пии таб­лиц раз­де­лов плюс за­щит­ную таб­ли­цу раз­де­лов MS-DOS.]]  
 
Не­достат­ки та­ко­го ро­да на­строй­ки – то, что она ог­раниче­на одним за­груз­чи­ком, че­тырь­мя раз­де­ла­ми и мак­си­маль­ным раз­ме­ром дис­ка 2 TiB. UEFI под­дер­жи­ва­ет мно­же­ст­вен­ные за­груз­чи­ки, а GPT под­дер­жи­ва­ет до 128 раз­де­лов и ра­бо­та­ет с дис­ка­ми, по объ­е­му пре­вы­шаю­щи­ми 2 TiB. Кро­ме то­го, UEFI да­ет таб­ли­це воз­мож­ность сде­лать про­цесс за­груз­ки безо­пас­ным.
 
Не­достат­ки та­ко­го ро­да на­строй­ки – то, что она ог­раниче­на одним за­груз­чи­ком, че­тырь­мя раз­де­ла­ми и мак­си­маль­ным раз­ме­ром дис­ка 2 TiB. UEFI под­дер­жи­ва­ет мно­же­ст­вен­ные за­груз­чи­ки, а GPT под­дер­жи­ва­ет до 128 раз­де­лов и ра­бо­та­ет с дис­ка­ми, по объ­е­му пре­вы­шаю­щи­ми 2 TiB. Кро­ме то­го, UEFI да­ет таб­ли­це воз­мож­ность сде­лать про­цесс за­груз­ки безо­пас­ным.
  
Строка 113: Строка 113:
  
 
Это уста­но­вит сис­тем­ные фай­лы на фай­ло­вую сис­те­му root, мон­ти­ро­ван­ную на /mnt. Она так­же до­бав­ля­ет­ся к /etc/fstab, что­бы по­за­бо­тить­ся до­полнитель­ной за­груз­ке и фай­ло­вых сис­те­мах EFI, мон­ти­ро­ван­ных под /mnt (sed встав­ле­но, что­бы обой­ти ошиб­ку в genfstab). За­тем мы уста­но­вим па­кет grub и про­ве­рим, за­гру­жен ли мо­дуль яд­ра efivars (он обес­пе­чи­ва­ет доступ к пе­ре­мен­ным EFI в /sys/firmware/efi). Да­лее grub-install уста­но­вит Grub в но­вую под­ди­рек­то­рию ESP – arch-grub, мы мон­ти­ро­ва­ли ее в /boot/efi. Ес­ли все пой­дет хо­ро­шо, долж­но поя­вить­ся со­об­щение: “Installation finished: No error reported [Ус­та­нов­ка за­вер­ше­на: оши­бок не об­на­ру­же­но]”. По­сле это­го мы генери­ру­ем файл на­строй­ки Grub и раз­мон­ти­ру­ем на­ши фай­ло­вые сис­те­мы из /mnt. По­сле пе­ре­за­пуска вир­ту­аль­ная ма­ши­на долж­на пред­ло­жить вам све­же­на­стро­ен­ное ме­ню Grub и за­гру­зить на­шу сис­те­му.
 
Это уста­но­вит сис­тем­ные фай­лы на фай­ло­вую сис­те­му root, мон­ти­ро­ван­ную на /mnt. Она так­же до­бав­ля­ет­ся к /etc/fstab, что­бы по­за­бо­тить­ся до­полнитель­ной за­груз­ке и фай­ло­вых сис­те­мах EFI, мон­ти­ро­ван­ных под /mnt (sed встав­ле­но, что­бы обой­ти ошиб­ку в genfstab). За­тем мы уста­но­вим па­кет grub и про­ве­рим, за­гру­жен ли мо­дуль яд­ра efivars (он обес­пе­чи­ва­ет доступ к пе­ре­мен­ным EFI в /sys/firmware/efi). Да­лее grub-install уста­но­вит Grub в но­вую под­ди­рек­то­рию ESP – arch-grub, мы мон­ти­ро­ва­ли ее в /boot/efi. Ес­ли все пой­дет хо­ро­шо, долж­но поя­вить­ся со­об­щение: “Installation finished: No error reported [Ус­та­нов­ка за­вер­ше­на: оши­бок не об­на­ру­же­но]”. По­сле это­го мы генери­ру­ем файл на­строй­ки Grub и раз­мон­ти­ру­ем на­ши фай­ло­вые сис­те­мы из /mnt. По­сле пе­ре­за­пуска вир­ту­аль­ная ма­ши­на долж­на пред­ло­жить вам све­же­на­стро­ен­ное ме­ню Grub и за­гру­зить на­шу сис­те­му.
 +
{{Врезка|left|Заголовок= Обо­лоч­ка UEFI|Ширина=98%|Содержание=Од­но из осо­бых при­ло­жений UEFI – это обо­лоч­ка UEFI. Это ба­зо­вая сре­да команд­ной стро­ки, ко­то­рую мож­но при­ме­нять для за­пуска при­ло­жений EFI или для ба­зо­вой на­строй­ки и ре­шения про­блем.
  
Часть Grub на­страи­ва­ет по­ря­док за­груз­ки EFI в NVRAM. Обыч­но при этом UEFI на­страи­ва­ет­ся на ав­то­ма­ти­че­скую за­груз­ку Grub при за­пуске ком­пь­ю­те­ра. Од­на­ко VirtualBox не со­хра­ня­ет про­шив­ки NVRAM по­сле вы­клю­чения вир­ту­аль­ной ма­ши­ны, и в ре­зуль­та­те на­строй­ки за­груз­ки те­ря­ют­ся.
+
При от­сут­ст­­вии пра­виль­ной стар­то­вой по­сле­до­ва­тель­но­сти про­шив­ка пе­ре­на­пра­вит вас в обо­лоч­ку. Ту­да так­же мож­но по­пасть че­рез ин­тер­фейс ме­ню про­шив­ки, ес­ли на­жать на нуж­ную кла­ви­шу. В VirtualBox это кла­ви­ша DEL, но у вас долж­на быть очень бы­ст­рая ре­ак­ция! Мо­же­те так­же на­жать c в ме­ню Grub, что­бы по­пасть в ок­но при­гла­шения Grub, и за­тем вве­сти exit. Две удоб­ных ко­ман­ды обо­лоч­ки – help и bcfg:
  
 +
> bcfg boot dump -v
 +
 +
вы­ве­дет спи­сок при­ло­жений EFI, пе­ре­чис­лен­ных в менед­же­ре за­груз­ки. Вы мо­же­те до­бав­лять/уда­лять оп­ции или из­ме­нять их по­ря­док. Что­бы до­ба­вить оп­цию за­груз­ки:
 +
 +
> bcfg boot add 3 fs0:\EFI\arch_grub\grubx64.efi “ArchLinux Grub”
 +
 +
А что­бы пе­ре­мес­тить ее вверх в спи­ске –
 +
 +
> bcfg boot mv 3 2
 +
 +
Сто­ит за­помнить еще од­ну ко­ман­ду обо­лоч­ки – reset; она пе­ре­за­гру­жа­ет ком­пь­ю­тер, что­бы опять на­чать про­цесс за­груз­ки с са­мо­го на­ча­ла.
 +
 +
Оп­ция­ми за­груз­ки так­же управ­ля­ет в Linux ко­ман­да efibootmgr (от имени root). Ес­ли ва­ша про­шив­ка не пре­достав­ля­ет обо­лоч­ки, за­гру­зи­те обо­лоч­ку с от­кры­тым ко­дом с про­ек­та Intel Tianocore, уста­но­вите в подпапку внут­ри /boot/EFI и до­бавь­те пункт ме­ню менед­же­ра за­груз­ки для досту­па к ней:
 +
 +
# mkdir /boot/efi/EFI/tiano
 +
 +
# wget https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi
 +
 +
# efibootmgr --create --label ‘Tiano Shell’ --loader ‘\EFI\tiano\Shell.efi’
 +
 +
В обо­лоч­ке есть не только это, но и мно­гое дру­гое. Име­ет смысл стя­нуть ко­пию спе­ци­фи­ка­ции обо­лоч­ки с фо­ру­ма UEFI (www.uefi.org/specs) для более углубленного ее изучения.
 +
}}
 +
 +
{{Врезка|left|Заголовок= Таб­ли­ца раз­де­лов|Ширина=98%|Содержание=
 +
 +
Но­мер На­ча­ло Ко­нец Раз­мер Ко­до­вое имя
 +
 +
1 2048 411647 200.0 MiB EF00 Сис­те­ма EFI
 +
 +
2 34 2047 1007.0 KiB EF02 Раз­дел BIOS
 +
 +
3 411648 821247 200.0 MiB 8300 Фай­ло­вая сис­те­ма /boot из Linux
 +
 +
4 821248 20971486 200.0 MiB 8300 Фай­ло­вая сис­те­ма /root из Linux
 +
 +
> Обращайтесь к оболочке, используя менеджер загрузки прошивки.
 +
}}
 +
 +
{{Врезка|left|Заголовок= Ти­пы раз­де­лов|Ширина=98%|Содержание=GPT ис­поль­зу­ет GUID для иден­ти­фи­ка­ции ти­па раз­де­ла так же, как это де­ла­ет об­ласть ти­па раз­де­ла в раз­де­ле MSDOS. Мож­но ис­поль­зо­вать gdisk, что­бы из­менить раз­мер ти­па раз­де­ла GPT – вы мо­же­те вве­сти GUID или ис­поль­зо­вать ко­рот­кий код, по­хо­жий на те, ко­то­рые ис­поль­зу­ют­ся в fdisk для раз­де­лов MSDOS. Эти ко­ды спе­ци­аль­но раз­ра­бо­та­ны для gdisk.
 +
 +
Со­от­вет­ст­вую­щие GUID слиш­ком мас­сив­ны, что­бы мы пе­ре­чис­ли­ли их здесь, но неко­то­рые из них при­ве­де­ны в Wikipedia (https://en.wikipedia.org/wiki/GUID_Par­tition_Table#Partition_type_GUIDs).
 +
 +
GUID, из­на­чаль­но ис­поль­зуе­мый для фай­ло­вых сис­тем раз­де­лов Linux, тот же са­мый, что и ис­поль­зуе­мый Microsoft для сво­их (он име­ну­ет­ся ба­зо­вый раз­дел дан­ных). Во из­бе­жание пу­таницы, недав­но был оп­ре­де­лен но­вый GUID для фай­ло­вых сис­тем Linux, но он, воз­мож­но, еще не ис­поль­зу­ет­ся су­ще­ст­вую­щи­ми сис­те­ма­ми. }}
 +
 +
Часть Grub на­страи­ва­ет по­ря­док за­груз­ки EFI в NVRAM. Обыч­но при этом UEFI на­страи­ва­ет­ся на ав­то­ма­ти­че­скую за­груз­ку Grub при за­пуске ком­пь­ю­те­ра. Од­на­ко VirtualBox не со­хра­ня­ет про­шив­ки NVRAM по­сле вы­клю­чения вир­ту­аль­ной ма­ши­ны, и в ре­зуль­та­те на­строй­ки за­груз­ки те­ря­ют­ся.
 +
 
Ес­ли это про­изой­дет, за­пустит­ся обо­лоч­ка EFI, и вам нуж­но бу­дет вруч­ную за­пустить за­груз­чик:
 
Ес­ли это про­изой­дет, за­пустит­ся обо­лоч­ка EFI, и вам нуж­но бу­дет вруч­ную за­пустить за­груз­чик:
  

Текущая версия на 17:40, 11 ноября 2018

[править] UEFI: Пе­ре-пе­ре­за­груз­ка

BIOS за­гру­жал ПК 30 лет, но на­ста­ла по­ра пе­ре­мен. Джон Лэйн зна­ко­мит­ся с пре­ем­ни­ком.

С мо­мен­та, когда IBM соз­да­ла свой пер­вый Пер­со­наль­ный Ком­пь­ю­тер в 1981 го­ду, тот из­менил­ся ед­ва ли не до неуз­на­вае­мо­сти, но при его вклю­чении про­ис­хо­дит, по боль­шей час­ти, все то же са­мое. В ка­ж­дом ПК есть BIOS, от­вет­ст­вен­ная за за­пуск ком­пь­ю­те­ра и за­груз­ку опе­ра­ци­он­ной сис­те­мы. Суть в том, что BIOS (со­кра­щение от Basic Input/Output System — Ба­зо­вая сис­те­ма вво­да/вы­во­да), пре­ж­де чем за­гру­зить про­грам­му за­груз­ки из за­пи­си MBR {master boot record) или на уст­рой­ст­ве хранения, осу­ще­ст­в­ля­ет се­рию тес­тов Power On Self Tests (име­нуе­мых POST) и ис­пол­ня­ет ее. А уж за­груз­чик (bootloader) за­тем принима­ет­ся за ва­шу опе­ра­ци­он­ную сис­те­му.

Две но­вых тех­но­ло­гии по­ку­ша­ют­ся из­менить этот по­ря­док: BIOS по­ти­хонь­ку вы­тес­ня­ет­ся UEFI, Unified Extensible Firmware Interface, а MBR – GUID Partition Table [Таб­ли­ца раз­де­лов GUID], или GPT.

Из­на­чаль­но BIOS раз­ра­ба­ты­ва­лась как ин­тер­фейс ме­ж­ду обо­ру­до­ванием и Disk Operating System (DOS, бо­лее из­вест­ной как MS-DOS). Она бы­ла, и оста­ет­ся, 16-бит­ной про­грам­мой ре­аль­ного ре­жи­ма. По­сколь­ку за эти го­ды опе­ра­ци­он­ные сис­те­мы эво­лю­циониро­ва­ли до 32-бит­но­го, а сей­час и 64-бит­но­го ко­да, они боль­ше не ис­поль­зу­ют ин­тер­фейс BIOS, со­дер­жа вме­сто него соб­ст­вен­ные драй­ве­ры уст­ройств. Роль BIOS со­кра­ти­лась до за­пуска про­цес­са за­груз­ки опе­ра­ци­он­ной сис­те­мы, а по­сле это­го – по су­ти, без­дей­ст­вия.

MBR слу­жит двум це­лям: она со­дер­жит bootloader, исполняемый BIOS для за­груз­ки ком­пь­ю­те­ра, и таб­ли­цу раз­де­лов, оп­ре­де­ляю­щую рас­по­ло­жение фай­ло­вых сис­тем на дис­ке. Вся эта ин­фор­ма­ция хранит­ся в са­мом пер­вом сек­то­ре дис­ка (име­нуе­мом сек­тор 0) и по этой при­чине ог­раничена до 512 байт: 446 байт под за­груз­чик, плюс таб­ли­ца раз­де­лов, со­дер­жа­щая до че­ты­рех 16-байт­ных за­пи­сей. По­следние два бай­та – это подпись, по ко­то­рой BIOS рас­по­зна­ет дей­ст­вую­щую MBR. Таб­ли­цы раз­де­лов ис­поль­зу­ют ад­рес­ные по­ля с 32-бит­ным сек­то­ром, а зна­чит, не мо­гут об­ра­щать­ся к дис­кам раз­ме­ром бо­лее 2 TiB. Та­кой тип таб­ли­цы раз­де­лов час­то име­ну­ет­ся таб­ли­цей раз­де­лов MSDOS, с це­лью от­ли­чить его от но­во­го GPT.

(thumbnail)
> Диск GPT со­дер­жит две ко­пии таб­лиц раз­де­лов плюс за­щит­ную таб­ли­цу раз­де­лов MS-DOS.

Не­достат­ки та­ко­го ро­да на­строй­ки – то, что она ог­раниче­на одним за­груз­чи­ком, че­тырь­мя раз­де­ла­ми и мак­си­маль­ным раз­ме­ром дис­ка 2 TiB. UEFI под­дер­жи­ва­ет мно­же­ст­вен­ные за­груз­чи­ки, а GPT под­дер­жи­ва­ет до 128 раз­де­лов и ра­бо­та­ет с дис­ка­ми, по объ­е­му пре­вы­шаю­щи­ми 2 TiB. Кро­ме то­го, UEFI да­ет таб­ли­це воз­мож­ность сде­лать про­цесс за­груз­ки безо­пас­ным.

По­сколь­ку BIOS под­ра­зу­ме­ва­ет, что за­груз­чик рас­по­ло­жен в пер­вом сек­то­ре дис­ка, тот мо­жет быть толь­ко один на ка­ж­дый диск. Боль­шин­ст­во BIOS раз­ре­ша­ют вы­би­рать спо­соб за­груз­ки дис­ка, и по­это­му мо­гут под­дер­жи­вать столь­ко за­груз­чи­ков, сколь­ко име­ет­ся фи­зи­че­­ских дис­ков. UEFI, на­про­тив, иг­но­ри­ру­ет за­груз­чик в сек­то­ре 0, но за­то раз­ре­ша­ет су­ще­ст­во­вание несколь­ких за­груз­чи­ков на од­ном дис­ке, ис­поль­зуя осо­бый раз­дел вме­сто аб­со­лют­но­го сек­то­ра. Этот осо­бый раз­дел из­вес­тен как EFI System Partition, или ESP, и фор­ма­ти­ру­ет­ся он фай­ло­вой сис­те­мой FAT (обыч­но FAT32) и име­ет раз­мер от 100 до 250 MiB. Со­глас­но сис­тем­ным тре­бо­ваниям UEFI, это дол­жен быть пер­вый раз­дел, и его фла­жок за­груз­ки дол­жен быть уста­нов­лен. В сис­те­мах Linux при­ня­то мон­ти­ро­вать ESP под /boot/efi. Тра­ди­ци­он­но за­груз­чик хра­нят­ся в ESP в под­ди­рек­то­ри­ях в со­от­вет­ст­вии с их про­из­во­ди­те­ля­ми, а на фо­ру­ме UEFI име­ет­ся спи­сок этих под­ди­рек­то­рий в www.uefi.org/specs/esp_registry.

Серд­це­ви­ной UEFI яв­ля­ет­ся его про­шив­ка, и она от­ве­ча­ет за за­груз­ку и ис­полнение при­ло­жений UEFI. Это от­дель­ные про­грам­мы, за­ви­ся­щие толь­ко от сер­ви­сов са­мой про­шив­ки – ОС им не нуж­на. Они мо­гут быть ин­ст­ру­мен­та­ми пред­за­гру­зоч­ной ди­аг­но­сти­ки/тех­об­слу­жи­вания, но боль­шин­ст­во из них яв­ля­ют­ся за­груз­чи­ка­ми ОС. Про­шив­ка UEFI со­дер­жит менед­жер за­груз­ки, по­зво­ляю­щий поль­зо­ва­те­лю за­пустить при­ло­жения UEFI. Менед­жер за­груз­ки на­по­ми­на­ет обыч­ный за­груз­чик, на­при­мер, Grub, но гру­зить он мо­жет толь­ко при­ло­жения EFI. Мож­но ском­пи­ли­ро­вать яд­ро Linux (с вер­сии 3.3) как при­ло­жение EFI, тем са­мым уст­ранив необ­хо­ди­мость в за­груз­чи­ке – том же Grub, по­то­му что тогда UEFI смо­жет за­гру­жать яд­ро на­пря­мую.

Про­шив­ка UEFI уме­ет чи­тать таб­ли­цы разделов и фай­ло­вые сис­те­мы FAT, в от­ли­чие от BIOS, ко­то­рая по­ла­га­ет­ся на за­груз­чик. Она на­страи­ва­ет­ся че­рез пе­ре­мен­ные EFI, хра­ня­щие­ся в NVRAM. Глав­ная пе­ре­мен­ная, управ­ляю­щая менед­же­ром за­груз­ки EFI, име­ну­ет­ся BootOrder; она оп­ре­де­ля­ет, ка­кие пунк­ты ме­ню ото­бра­жать. Ес­ли ее не на­стро­ить, про­шив­ка бу­дет сле­до­вать стан­дарт­ной про­це­ду­ре, об­на­ру­жи­ваю­щей за­груз­чик по ука­зан­но­му пу­ти к ESP. Путь, ко­то­рый за­ви­сит от ар­хи­тек­ту­ры, су­ще­ст­ву­ет в ви­де:

\EFI\BOOT\BOOT[architecture name].EFI

Бу­к­ва G в GPT оз­на­ча­ет GUID, то есть Globally Unique Identifier [Гло­баль­но уникаль­ный иден­ти­фи­ка­тор], реа­ли­за­цию стан­дар­та Universally Unique Identifier, оп­ре­де­лен­но­го RFC4122. GPT ис­поль­зу­ет GUID для иден­ти­фи­ка­ции дис­ков и раз­де­лов. Он на­чи­на­ет с сек­то­ра 1, с за­го­лов­ка, ко­то­рый оп­ре­де­ля­ет ко­ли­че­­ст­во и раз­мер за­пи­сей о раз­де­лах в иду­щей да­лее таб­ли­це. За­го­ло­вок со­дер­жит GUID дис­ка, уникаль­ным об­ра­зом иден­ти­фи­ци­рую­щий диск, и ка­ж­дый раз­дел, оп­ре­де­лен­ный в GPT, со­дер­жит два GUID: пер­вый пред­став­ля­ет тип раз­де­ла, а вто­рой уникаль­ным об­ра­зом иден­ти­фи­ци­ру­ет его. По­ми­мо это­го, за­го­ло­вок со­дер­жит кон­троль­ную сум­му CRC32, ко­то­рая мо­жет ис­поль­зо­вать­ся про­шив­кой или опе­ра­ци­он­ной сис­те­мой для под­твер­ждения це­ло­ст­но­сти дан­ных. Не взду­май­те ре­дак­ти­ро­вать таб­ли­цу раз­де­лов вруч­ную!

GPT мо­жет иметь 128 раз­де­лов, и это уст­ра­няет на­доб­ность в ло­ги­че­­ских и рас­ши­рен­ных раз­де­лах. Рас­ши­рен­ный раз­дел был спо­со­бом ре­шить про­бле­му ог­раничения MBR че­тырь­мя раз­де­ла­ми: один из этих раз­де­лов ис­поль­зо­вал­ся как рас­ши­рен­ный, и его мож­но бы­ло разбить на мно­же­ст­во ло­ги­че­­ских раз­де­лов.

Ка­ж­дая запись раз­де­ла име­ет дли­ну 128 байт и со­дер­жит уже упо­мя­ну­тые GUID, ад­ре­са на­чаль­но­го и конеч­но­го сек­то­ров раз­де­ла, неко­то­рые ат­ри­бу­ты и имя, по­нят­ное че­ло­ве­ку. Вто­рая ко­пия GPT хранит­ся в кон­це дис­ка в ка­че­­ст­ве ре­зерв­ной ко­пии. Что­бы нор­маль­но раз­мес­тить 128 та­ких раз­де­лов, тре­бу­ет­ся 16384 бай­та. Это 32 сек­то­ра, а сле­до­ва­тель­но, пер­вый ис­поль­зуе­мый сек­тор на дис­ке GPT – сек­тор 34.

Схе­ма GPT так­же вклю­ча­ет master boot record, и ее цель – по­мочь пре­дот­вра­тить по­вре­ж­дение дис­ка GPT ин­ст­ру­мен­та­ми, ко­то­рые GPT не рас­по­зна­ют. Эта Protective [За­щит­ная] MBR, или PMBR, со­дер­жит таб­ли­цу раз­де­лов MSDOS с одним раз­де­лом на весь диск (или 2 TiB, ес­ли диск боль­ше). Этот раз­дел от­ме­чен ти­пом 0xEE. Сис­те­мы, не рас­по­знаю­щие GPT, бу­дут ви­деть неиз­вест­ный раз­дел, занимаю­щий весь диск и не остав­ляю­щий сво­бод­но­го мес­та.

Еще од­но при­менение за­щит­ной MBR – раз­ре­шить BIOS за­гру­жать диск GPT. Ес­ли он со­дер­жит за­груз­чик, то BIOS сле­по за­гру­зит и ис­полнит его. Ес­ли этот за­груз­чик понима­ет GPT, то смо­жет его за­гру­зить. Один из та­ких за­груз­чи­ков – Grub2, ис­поль­зуе­мый мно­ги­ми ди­ст­ри­бу­ти­ва­ми Linux. Это по­зво­ля­ет сис­те­мам, ра­бо­таю­щим на BIOS, ис­поль­зо­вать дис­ки раз­ме­ром бо­лее 2 TiB.

Дис­ки с раз­де­ла­ми MS-DOS обыч­но остав­ля­ют про­пуск (име­нуе­мый об­ла­стью со­вмес­ти­мо­сти DOS), на­чи­ная с сек­то­ра 1 и до­хо­дя до на­ча­ла пер­во­го раз­де­ла. Тра­ди­ци­он­но за­груз­чи­ки упот­реб­ляли это сво­бод­ное ме­сто для раз­ме­щения на нем ко­да (Grub 1 за­пи­сал сю­да свою про­грам­му за­груз­ки в ста­дии 1.5). В GPT таб­ли­ца раз­де­лов на­чи­на­ет­ся с сек­то­ра 1, сра­зу по­сле PMBR – и здесь нет неза­ня­то­го мес­та, что­бы его мож­но бы­ло ис­поль­зо­вать по­доб­ным об­ра­зом. Вме­сто это­го спе­ци­фи­ка­ция GPT пре­ду­смат­ри­ва­ет спе­ци­аль­ный раз­дел за­груз­ки BIOS для ис­поль­зо­вания те­ми за­груз­чи­ка­ми, ко­то­рые в ином слу­чае долж­ны бы­ли бы ис­поль­зо­вать об­ласть со­вмес­ти­мо­сти DOS. Grub 2 пи­шет свой за­груз­чик пря­мо на этот раз­дел (он не со­дер­жит фай­ло­вой сис­те­мы). Принимая во внимание, что на­ли­чие об­лас­ти со­вмес­ти­мо­сти DOS бы­ло оп­ре­де­ле­но ско­рее со­гла­шением, чем стан­дар­том, на­ли­чие спе­ци­аль­но от­ве­ден­но­го раз­де­ла бо­лее от­ка­зоустой­чи­во.

Все это бы­ла тео­ри­ей. Те­перь пе­рей­дем к прак­ти­ке – и на­стро­им но­вую сис­те­му на осно­ве UEFI и GPT. На­ша но­вая сис­те­ма бу­дет иметь двой­ную за­груз­ку: она бу­дет ра­бо­тать как с про­шив­кой UEFI, так и с про­шив­кой BIOS.

Мы вос­поль­зуемся VirtualBox, и вы смо­же­те сле­до­вать на­шим ин­ст­рук­ци­ям, да­же ес­ли у вас по­ка нет ком­пь­ю­те­ра с про­шив­кой UEFI. А возь­мем мы ISO Arch Linux от но­яб­ря 2012 – то есть вам нуж­но бу­дет вы­полнить на­строй­ку вруч­ную, это по­мо­жет ра­зо­брать­ся в нуж­ных дей­ст­ви­ях. Ска­чай­те его с https://www.archlinux.org/download.

Спер­ва соз­дай­те но­вую 64-бит­ную вир­ту­аль­ную ма­ши­ну и же­ст­кий диск для тес­тов (10 ГБ долж­но хва­тить). От­меть­те Enable EFI option на странице System на­стро­ек вир­ту­аль­ной ма­ши­ны, что­бы на ком­пь­ю­те­ре поя­ви­лась про­шив­ка UEFI. При­сое­дините ISO-об­раз и за­пусти­те вир­ту­аль­ную ма­ши­ну. Она долж­на ото­бра­зить при­гла­шение для root. Зай­ди­те – па­роль не ну­жен.

Вам нуж­но соз­дать че­ты­ре раз­де­ла. Тут вам при­го­дит­ся gdisk. Мы пред­ла­га­ем раз­ме­ры, доста­точ­ные для это­го уп­ражнения, но мож­но за­дать и дру­гие. ESP соз­да­ет­ся из сек­то­ра 2048 (па­ра­метр по умол­чанию, пред­ла­гае­мый gdisk), а раз­дел за­груз­ки BIOS рас­по­ла­га­ет­ся пе­ред ESP. В таб­ли­це вы най­де­те пред­ло­жения по соз­данию раз­де­лов.

За­пусти­те gdisk ко­ман­дой gdisk /dev/sda, за­тем ис­поль­зуй­те o для соз­дания но­вой пустой таб­ли­цы раз­де­лов. Ис­поль­зуй­те n для соз­дания раз­де­ла, t – для на­строй­ки его ти­по­во­го ко­да, и (оп­цио­наль­но) c для из­менения его имени. За­пи­ши­те но­вую таб­ли­цу раз­де­лов с по­мо­щью w. Или восполь­зуй­тесь parted:

# parted /dev/sda

(parted) unit s

(parted) mktable gpt

(parted) mkpart primary 2048 411647

(parted) set 1 boot on

(parted) name 1 “EFI System Partition”

(parted) mkpart primary 34 2047

(parted) name 2 “BIOS Boot Partition”

(parted) set 2 bios_grub on

(parted) mkpart primary ext2 411648 821247

(parted) name 3 “Linux /boot filesystem”

(parted) mkpart primary ext4 821248 20971486

(parted) name 4 “Linux /root filesystem”

(parted) quit

Мы здесь ис­поль­зо­ва­ли де­ление на раз­де­лы GPT, но мож­но ис­поль­зо­вать вме­сто него и раз­де­лы MSDOS, ес­ли раз­мер дис­ка менее 2 TiB. В этом сце­на­рии про­пусти­те за­гру­зоч­ный раз­дел BIOS и ис­поль­зуй­те fdisk, что­бы из­менить тип раз­де­ла с EFI System Partition на 0xEF. Про­шив­ка UEFI VirtualBox ра­бо­та­ет как с раз­де­ла­ми GPT, так и с раз­де­ла­ми MSDOS, но дру­гие про­шив­ки мо­гут под­дер­жи­вать толь­ко GPT.

Соз­дав фай­ло­вые сис­те­мы, под­мон­ти­руй­те их:

# mkfs.vfat -F32 /dev/sda1
# mkfs.ext2 /dev/sda3
# mkfs.ext4 /dev/sda4
# mount /dev/sda4 /mnt
# mkdir /mnt/boot
# mount /dev/sda3 /mnt/boot
# mkdir /mnt/boot/efi
# mount /dev/sda1 /mnt/boot/efi

Ис­поль­зуй­те ути­ли­ту ArchLinux pacstrap для уста­нов­ки но­вой сис­те­мы на под­го­тов­лен­ные фай­ло­вые сис­те­мы (тре­бу­ет­ся со­единение с Ин­тернетом):

# pacstrap /mnt base
# genfstab -p -U /mnt | sed ‘s/cp437/437/’ >> /mnt/etc/fstab
# arch-chroot /mnt pacman -S grub-efi-x86_64
# modprobe efivars
# arch-chroot /mnt grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloaderid=arch_grub --recheck
# arch-chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
# umount /mnt/boot/efi /mnt/boot /mnt

Это уста­но­вит сис­тем­ные фай­лы на фай­ло­вую сис­те­му root, мон­ти­ро­ван­ную на /mnt. Она так­же до­бав­ля­ет­ся к /etc/fstab, что­бы по­за­бо­тить­ся до­полнитель­ной за­груз­ке и фай­ло­вых сис­те­мах EFI, мон­ти­ро­ван­ных под /mnt (sed встав­ле­но, что­бы обой­ти ошиб­ку в genfstab). За­тем мы уста­но­вим па­кет grub и про­ве­рим, за­гру­жен ли мо­дуль яд­ра efivars (он обес­пе­чи­ва­ет доступ к пе­ре­мен­ным EFI в /sys/firmware/efi). Да­лее grub-install уста­но­вит Grub в но­вую под­ди­рек­то­рию ESP – arch-grub, мы мон­ти­ро­ва­ли ее в /boot/efi. Ес­ли все пой­дет хо­ро­шо, долж­но поя­вить­ся со­об­щение: “Installation finished: No error reported [Ус­та­нов­ка за­вер­ше­на: оши­бок не об­на­ру­же­но]”. По­сле это­го мы генери­ру­ем файл на­строй­ки Grub и раз­мон­ти­ру­ем на­ши фай­ло­вые сис­те­мы из /mnt. По­сле пе­ре­за­пуска вир­ту­аль­ная ма­ши­на долж­на пред­ло­жить вам све­же­на­стро­ен­ное ме­ню Grub и за­гру­зить на­шу сис­те­му.



Часть Grub на­страи­ва­ет по­ря­док за­груз­ки EFI в NVRAM. Обыч­но при этом UEFI на­страи­ва­ет­ся на ав­то­ма­ти­че­скую за­груз­ку Grub при за­пуске ком­пь­ю­те­ра. Од­на­ко VirtualBox не со­хра­ня­ет про­шив­ки NVRAM по­сле вы­клю­чения вир­ту­аль­ной ма­ши­ны, и в ре­зуль­та­те на­строй­ки за­груз­ки те­ря­ют­ся.

Ес­ли это про­изой­дет, за­пустит­ся обо­лоч­ка EFI, и вам нуж­но бу­дет вруч­ную за­пустить за­груз­чик:

2.0 Shell> fs0:\EFI\arch_grub\grubx64.efi

По­сле за­груз­ки ОС на­строй­те за­груз­чик по умол­чанию, что­бы обой­ти про­бле­му от­сут­ст­вия по­сто­ян­ной NVRAM:

# mkdir /boot/efi/EFI/BOOT
# cp /boot/efi/EFI/{arch_grub/grub,BOOT/BOOT}x64.efi

Ес­ли по­ря­док за­груз­ки не на­стро­ен, что и про­изой­дет в том слу­чае, ес­ли в NVRAM ниче­го не бу­дет, про­шив­ка вернет­ся к EFI\BOOT\BOOTx64.efi. В ре­зуль­та­те это долж­но при­вес­ти к успеш­ной за­груз­ке по­сле за­пуска вир­ту­аль­ной ма­ши­ны. Те­перь, что­бы за­ста­вить сис­те­му за­гру­жать BIOS, нуж­но про­сто на­стро­ить за­груз­ку BIOS:

# dhcpcd
# pacman -S grub-bios
# grub-install --target=i386-pc --recheck /dev/sda

Начните с уста­нов­ки се­те­во­го со­единения; один из спо­со­бов сде­лать это – ко­ман­да dhcpcd. За­тем уста­но­ви­те па­кет grub-bios и уста­но­ви­те на диск вер­сию Grub для BIOS. Это соз­даст код за­груз­ки в MBR и раз­дел за­груз­ки BIOS, ко­то­рый мы на­строи­ли рань­ше. Он ис­поль­зу­ет наш го­то­вый файл на­строй­ки Grub, /boot/grub/grub.cfg.

Вы­клю­чи­те вир­ту­аль­ную ма­ши­ну и пе­ре­клю­чите ее на­строй­ки с EFI на BIOS, уб­рав от­мет­ку Enable EFI option на странице System. По­сле пе­ре­за­пуска вир­ту­аль­ная ма­ши­на бу­дет за­гру­жать­ся че­рез BIOS. Этот при­мер по­ка­зы­ва­ет, что на диск с раз­де­ла­ми GPT или MSDOS лег­ко уста­но­вить сис­те­му, ко­то­рая бу­дет ра­бо­тать и с UEFI, и с BIOS. Сто­ит упо­мя­нуть, что в неко­то­рых дру­гих ди­ст­ри­бу­ти­вах это прой­дет не столь глад­ко.

Те­перь зай­мем­ся бегемотом в гостиной: безо­пас­ной за­груз­кой. Суть ее в том, что UEFI не за­гру­зит ниче­го, не под­пи­сан­но­го рас­по­зна­вае­мым клю­чом. Но­вые ПК с пре­дуста­нов­лен­ным Windows 8 по­став­ля­ют­ся с клю­чом от Microsoft, ко­то­рый по­зво­ля­ет их но­вей­шей опе­ра­ци­он­ной сис­те­ме за­гру­жать­ся без про­блем. Ес­ли в та­кой сис­те­ме вклю­че­на безо­пас­ная за­груз­ка и в ней есть толь­ко этот ключ, она бу­дет за­гру­жать толь­ко то, что под­пи­са­но этим клю­чом. Боль­шин­ст­во но­вых ПК на­строе­но имен­но так, что­бы по­лу­чить сер­ти­фи­ка­цию Windows 8.

Ком­пь­ю­те­ры с пре­дуста­нов­лен­ным Windows 8 име­ют безо­пас­ную за­груз­ку по умол­чанию. Од­на­ко ее мож­но от­клю­чить. Для поль­зо­ва­те­лей Linux это на дан­ном эта­пе са­мое прак­тич­ное ре­шение. Прав­да, неко­то­рым безо­пас­ная за­груз­ка бу­дет важ­на – или они про­сто за­хо­тят восполь­зо­вать­ся ею – и для это­го тре­бу­ет­ся, что­бы Linux был под­пи­сан клю­чом, ко­то­рый бу­дет рас­по­зна­вать про­шив­ка.

Для безо­пас­ной за­груз­ки Linux есть две ба­зо­вых оп­ции. Пер­вая – най­ти OEM, ко­то­рые при­ла­га­ли бы до­полнитель­ные клю­чи, ко­то­ры­ми мож­но бы­ло бы под­пи­сать Linux. Вто­рая – под­пи­сать Linux клю­чом Microsoft. По ря­ду прак­ти­че­­ских со­об­ра­жений обе эти оп­ции ма­ло­при­вле­ка­тель­ны.

Под­пи­сы­вать яд­ро Linux непрак­тич­но: оно бы­ст­ро ме­няет­ся, такова его при­ро­да; к тому же мно­гие соз­да­ют соб­ст­вен­ное яд­ро с ин­ди­ви­ду­аль­ной на­строй­кой. По­это­му ло­гич­но бу­дет взять под­пи­сан­ный за­груз­чик, ко­то­рый за­тем смо­жет за­гру­зить лю­бой об­раз яд­ра.

Сре­ди при­ме­ров под­пи­сан­ных за­груз­чи­ков – пред­за­груз­чик от Linux Foundation и ре­шения, пред­ла­гае­мые соз­да­те­ля­ми ди­ст­ри­бу­ти­вов, на­при­мер, Fedora Shim. Бу­ду­чи под­пи­са­ны клю­чом Microsoft, они бу­дут ра­бо­тать на лю­бой ма­шине с Windows 8. Од­на­ко под­пи­сать их этим клю­чом ока­зы­ва­ет­ся про­бле­ма­тич­но (http://bit.ly/VFEAV9).

Что­бы из­бе­жать си­туа­ций, когда по­доб­ные ре­шения мо­гут быть ис­поль­зо­ва­ны вре­до­носны­ми про­грам­ма­ми для нанесения ущер­ба безо­пас­ным сис­те­мам, тре­бу­ет­ся при­сут­ст­вие че­ло­ве­ка, ко­то­рый под­твер­дит на­ме­рение про­дол­жать ра­бо­ту с непод­пи­сан­ной про­грам­мой за­груз­ки.

Суть пред­за­груз­чи­ка Linux Foundation в пре­достав­лении под­пи­сан­ной про­грам­мы за­груз­ки, ко­то­рая за­пустит по це­поч­ке сле­дую­щий за­груз­чик (тот же Grub), а тот за­тем и за­гру­зит Linux. По­сле пред­за­груз­чи­ка про­вер­ка безо­пас­но­сти пре­кра­ща­ет­ся, и та­кой под­ход не бо­лее безо­па­сен, чем от­клю­чение безо­пас­ной за­груз­ки UEFI. Од­на­ко это да­ет воз­мож­ность Linux и дру­гим сис­те­мам с непод­твер­жден­ной безо­пас­но­стью за­гру­зить­ся в сре­ду безо­пас­ной за­груз­ки. Это ре­шение пред­ла­га­ет­ся фон­дом в ка­че­­ст­ве вре­мен­но­го, на тот пе­ри­од, по­ка ди­ст­ри­бу­ти­вы не реа­ли­зу­ют бо­лее безо­пас­ные ре­шения.

Fedora Shim стре­мит­ся пой­ти на шаг даль­ше, обес­пе­чи­вая безо­пас­ную за­груз­ку сис­те­мы Linux. Он за­гру­жа­ет спе­ци­аль­ную вер­сию Grub с пуб­лич­ным клю­чом Fedora, и бу­дет за­гру­жать в безо­пас­ном ре­жи­ме яд­ра, обес­пе­чен­ные этим клю­чом. Он так­же бу­дет за­гру­жать и дру­гие яд­ра, но это по­тре­бу­ет руч­но­го кон­тро­ля во вре­мя за­груз­ки. Безо­пас­но за­гру­жен­ные яд­ра бу­дут так­же ог­раничи­вать за­груз­ку из команд­ной стро­ки и тре­бо­вать, что­бы мо­ду­ли яд­ра име­ли подпись. Та­кой ва­ри­ант да­ет воз­мож­ность безо­пас­но за­гру­зить Linux с пре­до­пре­де­лен­ной кон­фи­гу­ра­ци­ей, но ес­ли тре­бу­ет­ся ин­ди­ви­ду­аль­ная на­строй­ка, то про­бле­ма не снима­ет­ся: по­тре­бу­ет­ся ин­ди­ви­ду­аль­ная про­слой­ка локаль­но про­из­ве­ден­ных клю­чей, под­пи­сан­ных клю­чом, рас­по­зна­вае­мым про­шив­кой. По­ка что непо­нят­но, как это­го до­бить­ся. По­доб­ные же под­хо­ды прак­ти­ку­ют­ся SUSE и Ubuntu.

Ме­ханизм под­пи­си для безо­пас­ной на­строй­ки име­ну­ет­ся Microsoft Authenticode и управ­ля­ет­ся Symantec (быв­шей VeriSign). За го­дич­ную оп­ла­ту в раз­ме­ре $ 99 вы мо­же­те под­пи­сать лю­бое ко­ли­че­­ст­во би­нарников по сво­ему усмот­рению че­рез Microsoft Developer Center по ад­ре­су https://sysdev.microsoft.com (для ре­ги­ст­ра­ции по­на­до­бит­ся Windows Live ID).

Во­прос безо­пас­ной за­груз­ки по­ка что не име­ет од­но­знач­но­го и про­сто­го от­ве­та. Есть ме­то­ды об­хо­да этой про­бле­мы, но по­ка ра­но го­во­рить о том, лег­ко ли бу­дет ра­бо­тать в Linux в сре­де безо­пас­ной за­груз­ки. Ес­ли вас это воз­му­ща­ет, вы, воз­мож­но, за­ин­те­ре­суе­тесь кам­панией, про­во­ди­мой FSF: (http://bit.ly/nHYBRN). И всегда есть воз­мож­ность от­клю­чить безо­пас­ную за­груз­ку – вам вся­ко бу­дет не ху­же, чем сей­час. |

Персональные инструменты
купить
подписаться
Яндекс.Метрика