Ошибка Grub 'несовместимая лицензия'

На днях я использовал ноутбук для общего использования на рабочем столе, когда его клавиатура начала действовать. Большинство клавиш на правой стороне клавиатуры полностью перестали работать, и появятся комбинации клавиш, такие как символы Ctrl u, которые не должны появляться. Ключ заднего хода показал самое странное поведение; он каким-то образом мог вызвать символы удаления в командной строке.

Я не смог перезагрузить компьютер, поэтому я сделал жесткое завершение работы. Когда я снова включил компьютер, я получил это сообщение от Grub:

GRUB loading. Welcome to GRUB! incompatible license Aborted. Press any key to exit. 

Я нажал любую клавишу, и Граб ответил

 Operating System Not Found. 

При нажатии другой клавиши снова появляется первое сообщение. Нажатие другой клавиши после этого вызывает появление второго сообщения … и так далее.

Если я оставлю ноутбук на несколько минут, его вентилятор значительно ускорится, как если бы ноутбук работал с интенсивной программой.

Я вынул жесткий диск из ноутбука, установил его на сервер и огляделся. Я не видел ничего странного в /boot .

На ноутбуке работает Arch Linux. Привод разделен на GPT. Ноутбук отлично работает с жестким диском с другого компьютера. И другие машины не работают с жестким диском ноутбука.

Я не уверен, что проблемы с клавиатурой напрямую связаны с проблемами Grub.

Что может вызвать проблемы, которые у меня возникают? Или, что я должен сделать, чтобы выяснить или сузить список потенциальных причин?

На всякий случай это актуально, здесь (удален) находится tarball с /boot и /etc/grub.d и вот моя конфигурация Grub:

 # # DO NOT EDIT THIS FILE # # It is automatically generated by grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### insmod part_gpt insmod part_msdos if [ -s $prefix/grubenv ]; then load_env fi set default="0" if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" else menuentry_id_option="" fi export menuentry_id_option if [ "${prev_saved_entry}" ]; then set saved_entry="${prev_saved_entry}" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true fi function savedefault { if [ -z "${boot_once}" ]; then saved_entry="${chosen}" save_env saved_entry fi } function load_video { if [ x$feature_all_video_module = xy ]; then insmod all_video else insmod efi_gop insmod efi_uga insmod ieee1275_fb insmod vbe insmod vga insmod video_bochs insmod video_cirrus fi } if [ x$feature_default_font_path = xy ] ; then font=unicode else insmod part_gpt insmod ext2 set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 d44f2a2f-c369-456b-81f1-efa13f9caae2 else search --no-floppy --fs-uuid --set=root d44f2a2f-c369-456b-81f1-efa13f9caae2 fi font="/usr/share/grub/unicode.pf2" fi if loadfont $font ; then set gfxmode=auto load_video insmod gfxterm set locale_dir=$prefix/locale set lang=en_US insmod gettext fi terminal_input console terminal_output gfxterm set timeout=5 ### END /etc/grub.d/00_header ### ### BEGIN /etc/grub.d/10_linux ### menuentry 'Arch GNU/Linux, with Linux PARA kernel' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-PARA kernel-true-d44f2a2f-c369-456b-81f1-efa13f9caae2' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd1,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 b4fbf4f8-303c-49bd-a52f-6049e1623a26 else search --no-floppy --fs-uuid --set=root b4fbf4f8-303c-49bd-a52f-6049e1623a26 fi echo 'Loading Linux PARA kernel ...' linux /boot/vmlinuz-linux-PARA root=UUID=d44f2a2f-c369-456b-81f1-efa13f9caae2 ro quiet echo 'Loading initial ramdisk ...' initrd /boot/initramfs-linux-PARA.img } menuentry 'Arch GNU/Linux, with Linux core repo kernel' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-true-d44f2a2f-c369-456b-81f1-efa13f9caae2' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd1,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 b4fbf4f8-303c-49bd-a52f-6049e1623a26 else search --no-floppy --fs-uuid --set=root b4fbf4f8-303c-49bd-a52f-6049e1623a26 fi echo 'Loading Linux core repo kernel ...' linux /boot/vmlinuz-linux root=UUID=d44f2a2f-c369-456b-81f1-efa13f9caae2 ro quiet echo 'Loading initial ramdisk ...' initrd /boot/initramfs-linux.img } menuentry 'Arch GNU/Linux, with Linux core repo kernel (Fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-fallback-d44f2a2f-c369-456b-81f1-efa13f9caae2' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd1,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 b4fbf4f8-303c-49bd-a52f-6049e1623a26 else search --no-floppy --fs-uuid --set=root b4fbf4f8-303c-49bd-a52f-6049e1623a26 fi echo 'Loading Linux core repo kernel ...' linux /boot/vmlinuz-linux root=UUID=d44f2a2f-c369-456b-81f1-efa13f9caae2 ro quiet echo 'Loading initial ramdisk ...' initrd /boot/initramfs-linux-fallback.img } ### END /etc/grub.d/10_linux ### ### BEGIN /etc/grub.d/20_linux_xen ### ### END /etc/grub.d/20_linux_xen ### ### BEGIN /etc/grub.d/20_memtest86+ ### menuentry "Memory test (memtest86+)" --class memtest86 --class gnu --class tool { insmod part_gpt insmod ext2 set root='hd1,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 b4fbf4f8-303c-49bd-a52f-6049e1623a26 else search --no-floppy --fs-uuid --set=root b4fbf4f8-303c-49bd-a52f-6049e1623a26 fi linux16 ($root)/boot/memtest86+/memtest.bin } ### END /etc/grub.d/20_memtest86+ ### ### BEGIN /etc/grub.d/30_os-prober ### ### END /etc/grub.d/30_os-prober ### ### BEGIN /etc/grub.d/40_custom ### # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. ### END /etc/grub.d/40_custom ### ### BEGIN /etc/grub.d/41_custom ### if [ -f ${config_directory}/custom.cfg ]; then source ${config_directory}/custom.cfg elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then source $prefix/custom.cfg; fi ### END /etc/grub.d/41_custom ### 

Обновить

После установки LILO прошлой ночью, компьютер загрузился просто отлично хотя бы один раз. Когда утром я загрузил компьютер, я столкнулся с паникой ядра:

 Initramfs unpacking failed: junk in compressed archive Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1) Pid: 1, comm: swapper/0 Not tainted 3.8.7-1-ARCH #1 Call Trace: ... 

Вот картина паники ядра.

Обновление 2

Я переустановил LILO и больше не получаю панику ядра при загрузке.

  • Проблема с GRUB для установки с двойной загрузкой LMDE 2 (и Windows) на зашифрованном luks-lvm (truecrypt)
  • Поддерживает ли GRUB2 / загружается LVM на MD-рейде?
  • grub не загружает новое ядро
  • Невозможно установить любую версию Linux
  • Arch GRUB запрашивает /run/lvm/lvmetad.socket на диске без lvm
  • Grub2 в Ubuntu 12.04 не добавляет «тихий всплеск» к ядру Fedora
  • Как я могу загрузить прямое DVD-ISO-изображение PC-BSD прямо через GRUB2?
  • Определите, какая программа находится в моем MBR-коде
  • 2 Solutions collect form web for “Ошибка Grub 'несовместимая лицензия'”

    Update2:

    Забыл, что вы отправили мяч. Очень жаль. Во всяком случае, .mod ваши файлы .mod , используя приведенный ниже код и:

     ./grum_lic_test32 evan_teitelman/boot/grub/i386-pc/*.mod 

    что дало следующую ошибку:

     ... bufio.mod License: LICENSE=GPLv3+ OK cacheinfo.mod License: LICENSE=NONE_FOUND ERR cat.mod License: LICENSE=GPLv3+ OK chain.mod License: LICENSE=GPLv3+ OK ... 

    но этот файл идентичен файлу Archlinux, поэтому он не должен быть проблемой. Другими словами, это не было причиной.

    Также, прежде всего, обратите внимание, что вы установили LILO, – и предположите, что корпус закрыт. Если нет, всегда возникает вопрос о проблемах с GPT и BIOS +. Вы установили его в первый раз? Может быть, при первой установке была какая-то настройка, которая не устанавливала переустановку GRUB.


    Обновление1: ОК. Исправлена. Должен работать как для 32, так и для 64-битных ELF .


    Когда GRUB на фазу загрузки модулей, он проверяет лицензию, встроенную в файл ELF для каждого модуля. Если недействительно найдено, модуль игнорируется – и печатается конкретная ошибка. Может быть поврежден один или несколько модулей.

    Если это важный модуль, все будет плохо. Скажем, например, part_gpt.mod или part_msdos.mod .

    Принятые лицензии – GPLv2+ , GPLv3 и GPLv3+ .

    Разумеется, это могут быть другие причины; но одним из многих может быть поврежден модуль (ы).

    Похоже, что модули являются действительными файлами ELF поскольку они проверяются как таковые до испытания лицензии. Как и в случае: если тест проверки лицензии на тест ELF не выполняется.

    Если бы у вас была другая проблема с модулями, где мне нужно было проверять разные, извлекли части этого кода и превратили их в быстрый тестер лицензии. Вы можете протестировать каждый файл *.mod в /boot/grub/* чтобы узнать, какие из них повреждены.

    Этот код не подтверждает ELF или что-то еще. Попробуйте найти строку лицензии и проверьте это. Далее он тестируется только под i386 / 32-бит. Исходный код, в котором он извлекается из обработанного для x86-64, а также – но здесь много разделяется и взломано, поэтому я не уверен в результате. Если он не работает под 64-битным, скорее всего, он будет печатать только License: LICENSE=NONE_FOUND .

    (Как уже было сказано выше, я тестировал 32 и 64-разрядные версии Intel.)

    В качестве отдельного теста было бы сделать что-то вроде:

     xxd file.mod | grep -C1 LIC 

    Не самый красивый код, но как быстрая и грязная проверка.

    (Как и в, вы можете попробовать. )

    Инструкции по компиляции, например:

     gcc -o grub_lic_test32 source.c # 32-bit variant gcc -o grub_lic_test64 source.c -DELF64 # 64-bit variant 

    Бег:

     ./grub_lic_test32 /path/to/mods/*.mod 

    Распечатывает каждый файл и лицензию, например:

     ./grub_lic_test32 tar.mod gettext.mod pxe.mod tar.mod License: LICENSE=GPLv1+ BAD gettext.mod License: LICENSE=GPLv3+ OK pxe.mod License: LICENSE=GPLv3+ OK 

    Код:

     #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <errno.h> #ifdef ELF64 struct ELF_hdr { unsigned char dummy0[16]; uint32_t dummy1[6]; uint64_t sh_off; uint16_t dummy2[5]; uint16_t sh_entsize; uint16_t sh_num; uint16_t sh_strndx; }; struct ELF_sect_hdr { uint32_t sh_name; uint32_t dummy0[5]; uint64_t sh_offset; }; #else struct ELF_hdr { unsigned char dummy0[16]; uint32_t dummy1[4]; uint32_t sh_off; uint16_t dummy2[5]; uint16_t sh_entsize; uint16_t sh_num; uint16_t sh_strndx; }; struct ELF_sect_hdr { uint32_t sh_name; uint32_t dummy[3]; uint32_t sh_offset; }; #endif enum { ERR_FILE_OPEN = 1, ERR_FILE_READ, ERR_MEM, ERR_BAD_LICENSE, ERR_ELF_SECT_CORE_BREACH }; int file_size(FILE *fh, size_t *fs) { size_t cp; cp = ftell(fh); fseek(fh, 0, SEEK_END); *fs = ftell(fh); fseek(fh, cp, SEEK_SET); return 0; } static const char *valid_licenses[] = { "LICENSE=GPLv2+", "LICENSE=GPLv3", "LICENSE=GPLv3+", NULL }; int grub_check_license(struct ELF_hdr *e) { struct ELF_sect_hdr *s; const char *txt; const char *lic; unsigned i, j = 0; s = (struct ELF_sect_hdr *) ((char *) e + e->sh_off + e->sh_strndx * e->sh_entsize); txt = (char *) e + s->sh_offset; s = (struct ELF_sect_hdr *) ((char *) e + e->sh_off); for (i = 0; i < e->sh_num; ++i) { if (strcmp (txt + s->sh_name, ".module_license") == 0) { lic = (char*) e + s->sh_offset; if (j) fprintf(stdout, "%25s", ""); fprintf(stdout, "License: %-25s ", lic); for (j = 0; valid_licenses[j]; ++j) { if (!strcmp (lic, valid_licenses[j])) { fprintf(stdout, "OK\n"); return 0; } } fprintf(stdout, "BAD\n"); } s = (struct ELF_sect_hdr *) ((char *) s + e->sh_entsize); } if (!j) fprintf(stdout, "License: %-25s ERR\n", "LICENSE=NONE_FOUND"); return ERR_BAD_LICENSE; } int grub_check_module(void *buf, size_t size, int verbose) { struct ELF_hdr *e = buf; /* Make sure that every section is within the core. */ if (e->sh_off + e->sh_entsize * e->sh_num > size) { fprintf(stderr, "ERR: Sections outside core\n"); if (verbose) fprintf(stderr, " %*s: %u bytes\n" #ifdef ELF64 " %*s %u < %llu\n" " %*s: %llu\n" #else " %*s %u < %u\n" " %*s: %u\n" #endif " %*s: %u\n" " %*s: %u\n" , -25, "file-size", size, -25, "", size, e->sh_off + e->sh_entsize * e->sh_num, -25, "sector header offset", e->sh_off, -25, "sector header entry size", e->sh_entsize, -25, "sector header num", e->sh_num ); return ERR_ELF_SECT_CORE_BREACH; } return grub_check_license(e); } int grub_check_module_file(const char *fn, int verbose) { FILE *fh; void *buf; size_t fs; int eno; char *base_fn; if (!(base_fn = strrchr(fn, '/'))) base_fn = (char*)fn; else ++base_fn; fprintf(stderr, "%-25s ", base_fn); if (!(fh = fopen(fn, "rb"))) { fprintf(stderr, "ERR: Unable to open `%s'\n", fn); perror("fopen"); return ERR_FILE_OPEN; } file_size(fh, &fs); if (!(buf = malloc(fs))) { fprintf(stderr, "ERR: Memory.\n"); fclose(fh); return ERR_MEM; } if (fread(buf, 1, fs, fh) != fs) { fprintf(stderr, "ERR: Reading `%s'\n", fn); perror("fread"); free(buf); fclose(fh); return ERR_FILE_READ; } fclose(fh); eno = grub_check_module(buf, fs, verbose); free(buf); return eno; } int main(int argc, char *argv[]) { int i = 1; int eno = 0; int verbose = 0; if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'v') { verbose = 1; ++i; } if (argc - i < 1) { fprintf(stderr, "Usage: %s [-v] <FILE>[, FILE[, ...]]\n", argv[0]); return 1; } for (; i < argc; ++i) { eno |= grub_check_module_file(argv[i], verbose); if (eno == ERR_MEM) return eno; } return eno; } 

    Взгляните на эту тему на ubuntugeek.com под названием « Boot-Repair» – простой инструмент для исправления частых проблем с загрузкой . Этот инструмент может помочь восстановить неисправность вашего жесткого диска. Глядя на список функций, это выглядит как самый простой способ попробовать и восстановить свой загрузочный раздел, не заманив руки.

    ss Boot-Repair

    Linux и Unix - лучшая ОС в мире.