Ошибка 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 при установке на USB-накопитель?
  • Поддерживается минимальное редактирование строк в формате BASH
  • WD Advanced Format путаница
  • загрузочный сервер, несмотря на неправильный fstab
  • Восстановление файловой системы После изменения структуры раздела
  • Grub спасет, если Ubuntu USB не подключен?
  • Меню grub не отображается в двойной загрузке Linux mint 17 и windows 10
  • Не удалось выполнить установку Grub
  • 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

    Interesting Posts

    Как заменить GnuPG стабильным с GnuPG современным?

    start-stop-daemon, сервисы, переменные среды и недоступные

    Что такое отсутствие прозрачности в systemd?

    Завершение Bash – Как получить завершение имени файла для субоптимов

    Как использовать версию пакета еще не опубликованные nixpkgs (но описаны в ветвях разработки nixpkgs)?

    Как найти, где установлен набор $ JAVA_HOME?

    хороший дистрибутив Ubuntu / Debian для разработки / кодирования VM?

    Как подсчитать частоту слова> 20

    Резервное копирование полной DO-капли на локальный Mac-диск

    Есть ли способ контролировать световую ценность логотипа Apple на MacBook?

    Отключить фестиваль от «замещающих» сокращений, отредактировав .festivalrc

    Принудительный IPv4 по IPv6 только для определенных адресов

    Как scp себя?

    Почему mutt сохраняет удаленные электронные письма, пока вы не «синхронизируете свой почтовый ящик» с помощью $?

    Как извлечь только конкретную папку из архива с zip-файлом в данный каталог?

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