Ответ на этот вопрос многогранен.
Первое, что вы должны сделать, это попытаться забыть все знания, связанные с загрузкой BIOS, которые у вас могут быть - здесь они не применяются. Нет MBR, нет загрузчика второй ступени , нет раздела boot . Эти вещи, к счастью, быстро устаревают, как и 16-разрядный дисковый интерфейс реального режима BIOS INT-13H четвертьвековой давности, для поддержки которого они были разработаны.
Затем вам нужно подумать о выполнении загрузки. Когда ваш компьютер запускается, микропрограмма выполняет несколько действий перед вызовом исполняемого файла EFI - ядра вашей операционной системы или некоторого избыточного загрузчика цепочки, которому дано указание вызвать ядро вашей операционной системы.
Сначала проверяется питание и прерывание, затем проверяется видео. Он либо вызывает старую опцию BIOS видео в реальном режиме и ждет ее завершения, либо обнаруживает видеопЗУ GOP в защищенном режиме, нажимает переключатель и переходит к следующему этапу. Это по большей части то, что подразумевается под быстрой загрузкой в большинстве интерфейсов. Либо микропрограммное обеспечение должно обрабатывать бит реального режима с помощью своего CSM (модуль поддержки совместимости) , либо оно может автоматически реализовать несколько стандартов GOP и оставить остальную часть инициализации видео для ОС, которая скоро будет призывать. У вас, судя по всему, видеокарта, совместимая с GOP. Использование этой функции в полной мере не относится к Windows.
Он также загрузит все драйверы UEFI, которые OEM-производитель сохранил во флэш-памяти на вашей материнской плате, но по большей части мы можем игнорировать это, за основным исключением является FAT драйвер файловой системы. Как я упоминал ранее, нет раздела MBR или boot , но есть раздел EFI-system . Эти два принципиально отличаются тем, что первый был разделом, из которого прошивка BIOS считывала первый сектор необработанного диска и выполняла любой найденный там код, тогда как последний - это раздел, который монтируется прошивкой UEFI как файловая система и из которой он будет выполнять файл.
Существует максимум один esp отмеченный раздел на каждый диск, отформатированный в формате GPT. У вас уже есть жестко отформатированныйдиск, иначе у вас никогда бы не было быстро загружаемой Windows. Тип формата вашего USB-диска на данный момент мне неизвестен. Для некоторых прошивок UEFI съемные диски являются особыми случаями, поскольку их не нужно помечать esp , если у них вообще нет таблицы разделов - другими словами, часто можно загрузиться с USB-диска, который никогда не был разбит на разделы. и полностью отформатирован в файловой системе FAT. Это не обязательно надежная функция, но это обычное дело.
Когда встроенное ПО монтирует раздел esp , оно загружает путь, который хранится в памяти. Модуль памяти представляет собой встроенную микросхему NVRAM, на которой микропрограммное обеспечение хранит информацию, которая потребуется ей между загрузками, например, переменную Boot0000- {GUID}
. В вашем случае содержимое этой переменной, скорее всего, $ {ESP-GUID} \ EFI \ BOOT \ BOOTx64.efi
, что почти всегда указывает на собственный менеджер загрузки Microsoft - (который равен not BOOTMGR.efi
, между прочим - он появляется позже в процессе загрузки MS) .
Обычно вы можете просто:
mv ${ESP}/EFI/BOOT/BOOTx64.efi ${ESP}/EFI/BOOT/BOOTx64.efi.bak
mv ./${mybootmgr}.efi ${ESP}/EFI/BOOT/BOOTx64.efi
... вообще никогда не редактировать переменную NVRAM.
При загрузке в режиме EFI ядро Linux должно автоматически загрузить свой модуль ядра efivarfs
и смонтировать содержимое NVRAM в / sys / firmware / efi / efivars
. Вы можете ls
этот каталог и увидеть имена всех ваших переменных efi. Вот содержимое моей переменной Boot0002- {GUID}
:
printf %b $(
od -An -t o1 -w1 -v \
/sys/firmware/efi/efivars/Boot0002-* |
sed 's/ */\\0/'
)
#OUTPUT �^��~�J�3K��8���0\EFI\BOOT\BOOTX64.EF�AMBO
Бессмысленные символы являются результатом кодировки UEFI UTF-16 в отличие от кодировки UTF-8 моей системы Linux. В любом случае, просто представьте, что этот бессмысленный бит - это мой GUID esp . Думаю, у меня больше нет переменной Boot0000- {GUID}
- должно быть, я когда-то удалил ее.
efibootmgr
Если и делал, то, вероятно, делал это с помощью программы efibootmgr
. Если вы вызовете его без аргументов, он напечатает ваш порядок загрузки.
efibootmgr
#OUTPUT
BootCurrent: 0002
Timeout: 3 seconds
BootOrder: 0002,000F,000D
Boot0002* UEFI: KINGSTON SV300S37A120G
Boot000D* Hard Drive
Boot000F* CD/DVD Drive
Вот фрагмент его страницы man
:
man efibootmgr 2>/dev/null |
sed '/^ *DESCRIPTION/,/^ *OPTIONS/!d;//c\\'
#OUTPUT
efibootmgr is a userspace application used to mod‐
ify the Intel Extensible Firmware Interface (EFI)
Boot Manager. This application can create and
destroy boot entries, change the boot order, change
the next running boot option, and more.
Details on the EFI Boot Manager are available from
the EFI Specification, v1.02 or later, available
from:
Note: efibootmgr requires that the kernel
support access to EFI non-volatile variables
through /sys/firmware/efi/vars or
/sys/firmware/efi/efivars/.
Я рекомендую вам следовать с этого момента до этого другого моего ответа а оттуда на rodsbooks.com , где также есть ссылка, и вы полностью отказываетесь от grub
- это ненужное осложнение в вашем случае, как я надеюсь, вы скоро убедитесь. Но независимо от того, выберете ли вы grub
в качестве EFI-исполняемого файла, который ваша прошивка будет вызывать во время загрузки, вам действительно следует прочитать
rodsbooks.com .
Следующая часть оболочки должна - с учетом выбора по умолчанию во время процесса установки Mint - быть способной преобразовывать вашу флешку MBR в загрузочный диск в формате GPT UEFI с собственным системным разделом EFI и менеджер загрузки. Вы можете легко добавить другие установки на эту же флешку - даже установку Windows с небольшой осторожностью - и ее намного проще поддерживать в долгосрочной перспективе. Признаюсь, я немного сомневаюсь в бит tar
, так как чувствую, что должен указать некоторые параметры командной строки для сохранения разрешений файловой системы (надеюсь, кто-то знает лучше?) . Тем не менее, в qemu
у меня все работало нормально - я перешел с загрузочного диска USB Mint Live на загрузочный диск USB Mint Live.
Однако вы должны заметить, что если вы настроили свой основной загрузочный раздел с удовлетворительным менеджером загрузки - таким как rEFInd - вы, вероятно, могли бы загрузить устаревший отформатированный загрузочный диск, такой как у вас сейчас.
Если вы запустите следующее, убедитесь, что в BIG_LONG_TAR_BACKUP_LOCATION_VAR_PATH
путь, который не расположен в пути к каталогу / tmp / usbwd
, он создает, потому что он также удалит этот каталог, когда будет выполнен. Вам понадобится как минимум unzip
, tar
, gdisk
, wget
и coreutils
, установленные для его работы - все они, скорее всего, уже установлены на любой live-загрузочный диск Linux, который вы захотите попробовать, но также доступны через любой менеджер пакетов, который я могу придумать.
mkdir -p /tmp/usbwd/mintmnt; cd /tmp/usbwd; mkdir esp
wget -qO ./refind.zip \
'http://sourceforge.net/projects/refind/files/0.8.3/refind-bin-0.8.3.zip/download'
unzip -qq ./refind.zip
sudo sh -se -- "/dev/${USBDISK}" \
"${PATH_TO_A_DIR_WHERE_YOU_CAN_SAVE_A_BACKUP_OF_MINT_INSTALL}" \
<<\SUDO
mount "${1}1" ./mintmnt
tar -C ./mintmnt -czf "$2" ./; umount ./mintmnt
printf %s\\n o y n '' '' \+750M ef00 n 2 '' '' '' w y |
gdisk "${1}" || :
mkfs.vfat -n USBESP "${1}1"
./refind*/install.sh --usedefault "${1}1"
mkfs.${YOUR_FS_OF_CHOICE=ext4} -L MINTROOT "${1}2"
mount "${1}1" ./esp; mount "${1}2" ./mintmnt
mkdir ./esp/EFI/mintboot
>./esp/EFI/mintboot/refind_linux.conf \
printf %s\ \
'"Linux Mint"' \
'"root=/dev/disk/by-label/MINTROOT quiet splash"'
cd ./mintmnt && tar -xzf "$2"
>>./etc/fstab \
printf %s\\n \
'/dev/disk/by-label/USBESP /esp vfat defaults 0 1' \
'/esp/EFI/mintboot /boot none bind,defaults 0 0'
cp -T ../esp/EFI/mintboot ./boot/vmlinuz* ./boot/init*
cd ..; umount ./mintmnt; umount ./esp
SUDO
cd ~; rm -rf /tmp/usbwd
Вам следует использовать telnet
, чтобы проверить, работает ли переадресация портов:
telnet localhost 1234
Вероятно, она не работает, так как вы используете неправильные SSH
опции (дважды):
ssh -L localhost:1234:remoteip:5634 user@remoteip
или (в зависимости от того, какой(ие) интерфейс(ы) прослушивает сервер:
ssh -L localhost:1234:localhost:5634 user@remoteip