У меня есть ноутбук ASUS с жестким диском и двойной загрузкой через grub2: Windows 7, Ubuntu 14.
Когда через 5 лет жесткий диск начал сбой с плохими блоками, я добавил SSD на порт SATA 2. Я сделал SSD один загрузочный Ubuntu 16 со своим собственным разделом EFI - чтобы удалить жесткий диск в один прекрасный день, когда он завершился неудачно, и продолжить работу с SSD.
Я установил SSD вручную при установке Ubuntu 16 на нем с Live USB: выбрал «Что-то еще» в диалоговом окне установки, позаботился о монтировании /boot/efi, /boot, / и /home в разделы SSD, которые я только что создал из Live USB, и проверил, что разделы жесткого диска находятся в разделе «Не использовать этот раздел ".
К сожалению, я не проверял раздел EFI на HDD. Поэтому, несмотря на указание sdb1 (/ boot / efi SSD) как Use as: EFI System Partition и, несмотря на выбор / dev / sdb (SSD) в качестве Device for boot loader installation, загрузчики оказались на жестком диске, а не на SSD, как я и планировал. Это связано с тем, что раздел EFI на жестком диске также был сконфигурирован как Use as: EFI System Partition.
Две возникающие проблемы:
ESP (EFI) находится на жестком диске, а не на SSD. Windows 7 попадает в спасение grub, в то время как Ubuntu 16 и Ubuntu 14 загружаются нормально. Интересно, связаны ли 2 проблемы.Чтобы решить проблему 1, я скопировал содержимое EFI жесткого диска в EFI SSD и изменил отображение /boot/efi в /etc/fstab, чтобы указать EFI SSD (UUID=E2A1-9FFE, /dev/sdb1):
# /boot/efi was on /dev/sda1 during installation
#UUID=40BE-2040 /boot/efi vfat umask=0077 0 1
# redirecting /boot/efi from /dev/sda1 to /dev/sdb1
UUID=E2A1-9FFE /boot/efi vfat umask=0077 0 1
Теперь правильный раздел EFI (на SSD) устанавливается на /boot/efi, когда загружается Ubuntu (хотя я не проверял, используется ли правильная EFI во время загрузки). Можно ли решить проблему 1 следующим образом: путем копирования файлов + изменения fstab?
И во время ? Когда вы выбираете Windows Boot Manager (on /dev/sda1) в grub, я вижу эту ошибку и эту конфигурацию от set:
error: symbol `grub_term_highlight_color` not found.
grub rescue> set
lang=
locale_dir=
prefix=(hd0,gpt6)/grub
root=hd0,gpt6
secondary_locale_dir=
При выборе Windows Boot Manager (on /dev/sdb1) в grub я вижу эту ошибку и эту конфигурацию от set:
error: file `/grub/x86_64-efi/normal.mod` not found.
grub rescue> set
prefix=(hd1,gpt6)/grub
root=hd1,gpt6
В BIOS (UEFI) вызываются загрузочные устройства, соответственно:
Windows Boot Manager (P0: ST1000...)
Windows Boot Manager (P1: Samsung SSD 850 PRO ...)
Однако, когда Live USB в USB-порту, выберите загрузочные устройства из BIOS (Esc ) производит выход set с номерами hd, сдвинутыми на один:
error: symbol `grub_term_highlight_color` not found.
grub rescue> set
lang=
locale_dir=
prefix=(hd1,gpt6)/grub
root=hd1,gpt6
secondary_locale_dir=
и
error: file `/grub/x86_64-efi/normal.mod` not found.
grub rescue> set
prefix=(hd2,gpt6)/grub
root=hd2,gpt6
Я чувствую, что все в порядке, хотя не на 100% не причина сбоя загрузки Win7.
Вот информация из boot-repair: Вставить из boot-repair в pastebin.
Я боюсь запустить boot-repair как его Предполагаемый ремонт, похоже, фиксирует загрузку Ubuntu, а не Win. (Я еще должен узнать, что означает rename-ms-efi.)
У меня также возникла идея удалить SSD и попробовать загрузиться только с HDD, но я боюсь, что раздел EFI будет завинчен еще больше ( например, путем автоматической фиксации), и я больше не смогу загрузиться в Ubuntu 14. Звучит глупо, наверное. Но в конце концов, введение Ubuntu 14 рядом с исходным Win7 приведет к тому, что grub не сможет возобновить Win7 из спящего режима.
Любая помощь была бы высоко оценена!
Я буду создавать резервные копии для разделов SSD в Между тем.
Большое спасибо за подсказки @oldfred!
Я начал рыть в записи цепочки и обнаружил, что /boot/grub/grub.cfg файлы отличаются на sda и sdb. Исходный grub.cfg с HDD (sda) содержал запись меню, которую я использовал для загрузки в Win7, в то время как grub.cfg из sdb не имел этого. Я не помню, были ли созданные пользовательские записи меню мной или grub при установке Ubuntu 12 рядом с Win7. Это и может быть полезно для других, чтобы создать пользовательскую запись в меню вручную.
Вот два шага, которые я сделал, чтобы перезагрузить Win7:
Копировать недостающие /etc/grub.d/25_custom sdb из sda.Содержимое /etc/grub.d/25_custom:
#!/bin/sh
exec tail -n +3 $0
menuentry "Windows UEFI bkpbootmgfw.efi" {
search --fs-uuid --no-floppy --set=root 40BE-2040
chainloader (${root})/EFI/Microsoft/Boot/bkpbootmgfw.efi
}
menuentry "Windows Boot UEFI loader" {
search --fs-uuid --no-floppy --set=root 40BE-2040
chainloader (${root})/EFI/Boot/bkpbootx64.efi
}
menuentry "efi/EFI/Boot/bkpbootx64.efi" {
search --fs-uuid --no-floppy --set=root 84ba8463-a7a4-4a32-a429-f28e606435f2
chainloader (${root})/efi/EFI/Boot/bkpbootx64.efi
}
, где 40BE-2040 и 84ba8463-a7a4-4a32-a429-f28e606435f2 являются разделом EFI и / загрузочным разделом Ubuntu 14 на HDD соответственно:
/dev/sda1: LABEL="SYSTEM" UUID="40BE-2040" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="41d1ad3d-8c17-44cd-9e4f-e6554d3c532b"
/dev/sda6: UUID="84ba8463-a7a4-4a32-a429-f28e606435f2" TYPE="ext4" PARTUUID="7f61e2e3-7b36-49a0-a357-90032497db30"
sudo update-grub затем обновляет grub.cfg.
Для загрузки Win7 я использую вторую запись меню: Windows Boot UEFI loader.
Копия отсутствует /etc/grub.d/25_custom до sdb из sda.Сделка сломалась в моем случае, вероятно, из-за изменения имени & amp; ярлык раздела EFI на sdb при исследовании того, может ли некодированное имя раздела / метка быть причиной того, что Win7 не загружается. Раздел подкачки начал запрашивать пароль при загрузке Ubuntu 16. Я не мог исправить это, обновив UUID в /etc/fstab, /etc/crypttab и /etc/initramfs-tools/conf.d/resume. Только связанная ссылка помогла исправить зашифрованный раздел подкачки. Запуск sudo ecryptfs-setup-swap завершился неудачно, но после перезагрузки обмен был зашифрован правильно:
> lsblk
├─sdb3 8:19 0 8G 0 part
│ └─cryptswap1 253:0 0 8G 0 crypt [SWAP]
И вывод swapon -s отличается от показанного в приведенной выше ссылке:
Filename Type Size Used Priority
/dev/dm-0 partition 8388092 0 -1
Но кажется, что это правильный раздел подкачки:
> ls -l /dev/mapper/cryptswap1
lrwxrwxrwx 1 root root 7 sept 25 14:02 /dev/mapper/cryptswap1 -> ../dm-0
Большое спасибо за подсказки @oldfred!
Я начал рыть в записи цепочки и обнаружил, что /boot/grub/grub.cfg файлы отличаются на sda и sdb. Исходный grub.cfg с HDD (sda) содержал запись меню, которую я использовал для загрузки в Win7, в то время как grub.cfg из sdb не имел этого. Я не помню, были ли созданные пользовательские записи меню мной или grub при установке Ubuntu 12 рядом с Win7. Это и может быть полезно для других, чтобы создать пользовательскую запись в меню вручную.
Вот два шага, которые я сделал, чтобы перезагрузить Win7:
Копировать недостающие /etc/grub.d/25_custom sdb из sda.Содержимое /etc/grub.d/25_custom:
#!/bin/sh
exec tail -n +3 $0
menuentry "Windows UEFI bkpbootmgfw.efi" {
search --fs-uuid --no-floppy --set=root 40BE-2040
chainloader (${root})/EFI/Microsoft/Boot/bkpbootmgfw.efi
}
menuentry "Windows Boot UEFI loader" {
search --fs-uuid --no-floppy --set=root 40BE-2040
chainloader (${root})/EFI/Boot/bkpbootx64.efi
}
menuentry "efi/EFI/Boot/bkpbootx64.efi" {
search --fs-uuid --no-floppy --set=root 84ba8463-a7a4-4a32-a429-f28e606435f2
chainloader (${root})/efi/EFI/Boot/bkpbootx64.efi
}
, где 40BE-2040 и 84ba8463-a7a4-4a32-a429-f28e606435f2 являются разделом EFI и / загрузочным разделом Ubuntu 14 на HDD соответственно:
/dev/sda1: LABEL="SYSTEM" UUID="40BE-2040" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="41d1ad3d-8c17-44cd-9e4f-e6554d3c532b"
/dev/sda6: UUID="84ba8463-a7a4-4a32-a429-f28e606435f2" TYPE="ext4" PARTUUID="7f61e2e3-7b36-49a0-a357-90032497db30"
sudo update-grub затем обновляет grub.cfg.
Для загрузки Win7 я использую вторую запись меню: Windows Boot UEFI loader.
Копия отсутствует /etc/grub.d/25_custom до sdb из sda.Сделка сломалась в моем случае, вероятно, из-за изменения имени & amp; ярлык раздела EFI на sdb при исследовании того, может ли некодированное имя раздела / метка быть причиной того, что Win7 не загружается. Раздел подкачки начал запрашивать пароль при загрузке Ubuntu 16. Я не мог исправить это, обновив UUID в /etc/fstab, /etc/crypttab и /etc/initramfs-tools/conf.d/resume. Только связанная ссылка помогла исправить зашифрованный раздел подкачки. Запуск sudo ecryptfs-setup-swap завершился неудачно, но после перезагрузки обмен был зашифрован правильно:
> lsblk
├─sdb3 8:19 0 8G 0 part
│ └─cryptswap1 253:0 0 8G 0 crypt [SWAP]
И вывод swapon -s отличается от показанного в приведенной выше ссылке:
Filename Type Size Used Priority
/dev/dm-0 partition 8388092 0 -1
Но кажется, что это правильный раздел подкачки:
> ls -l /dev/mapper/cryptswap1
lrwxrwxrwx 1 root root 7 sept 25 14:02 /dev/mapper/cryptswap1 -> ../dm-0