Автор Тема: Ошибка загрузки второй ОС Linux  (Прочитано 20991 раз)

Оффлайн klark973

  • Давно тут
  • **
  • Сообщений: 653
  • Неспящий саппорт
Re: Ошибка загрузки второй ОС Linux
« Ответ #15 : 05.02.2019 12:42:39 »
В SL 8.2
...
эта фича в образе:
Вы правы. Вот это бдительность! Чуть не сбил с толку... На эту граблю мы с той или другой стороны ни раз натыкались в последнее время. Здесь надо включить обе фичи: и 64bit, и metadata_csum, чтобы на неё попасть. ТУТ описана вся машинерия, и как раз с версии e2fsprogs-1.43 введена поддержка. В P8 такой нет даже в репе до сих пор. Мне удалось столкнуться с этим разок на Таволге-терминале, но эта проблема при форматировании довольно часто выплывает из-за разницы в версиях между Сизифом и P8. Однако, если при форматировании отключить 64bit, metadata_csum тоже отключается, так что можно совет выше даже не менять или использовать tune2fs -O ^metadata_csum /dev/sda2.

Насчёт LANG= или LC_ALL= не помню точно, давно это дебажил. Но помню, что как-то так я эту надпись убирал. :) Может не "C", а ru_RU? grep -i lang /boot/grub/grub.cfg у меня показывает "set lang=ru_RU". Просто по дефолту если не указать, там из окружения что-то не то приезжает, и он использует LANG=POSIX, но такого POSIX.gmo действительно нет. Это какой-то старый баг grub. Достаточно поменять в /boot/grub/grub.cfg строку set lang=POSIX, а чтобы этого не делать каждый раз после update-grub, вызывать LANG=C update-grub -- кажись, так.
« Последнее редактирование: 05.02.2019 14:28:55 от klark973 »
To moan or to solve -- that is the question!

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 733
Re: Ошибка загрузки второй ОС Linux
« Ответ #16 : 05.02.2019 21:53:26 »
Здесь надо включить обе фичи: и 64bit, и metadata_csum, чтобы на неё попасть.
Однако, если при форматировании отключить 64bit, metadata_csum тоже отключается,

Заглянул в man, почитал, посчитал.
По моему ИМХО, на десктопах, не вижу смысла в фиче 64bit. И вот почему:
Чтобы фича 64bit понадобилась в ext4, количество блоков в файловой, должно превышать 2^32
$ man ext4 | sed -n '29,39p'
                   64bit
                          Enables the file system to be larger than 2^32
                          blocks.  This feature is set automatically, as
                          needed, but it can be useful to  specify  this
                          feature  explicitly  if  the file system might
                          need to be resized larger  than  2^32  blocks,
                          even  if  it  was  smaller than that threshold
                          when it was  originally  created.   Note  that
                          some  older  kernels  and  older  versions  of
                          e2fsprogs will not support file  systems  with
                          this ext4 feature enabled.

При форматировании раздела, обычно выставляется размер блока в 4 килобайта.
Т.о., чтобы эта фича понадобилась, файловая или будущая отресайзеная файловая, должна иметь размер более чем (терабайт):
$ echo '(4096*2^32)/1000^4' | bc -l
17.59218604441600000000

Но даже если размер блока принудительно уменьшить до 512 байт, то размер файловой ext4 должен превышать (терабайт), чтобы фича 64bit понадобилась:
$ echo '(512*2^32)/1000^4' | bc -l
2.19902325555200000000

Согласен с вашим выше про обновление ядра и e2fsprogs. Но мне не понятно, под какой критерий подпадают older  kernels  and  older  versions  of e2fsprogs. В более точной формулировке по версии. В контексте этого:
Цитировать
http://ftp.altlinux.org/pub/distributions/ALTLinux/p8/images/simply/alt-simply-8.2.0-x86_64.iso.txt
/ALTLinux/RPMS.main/e2fsprogs-1.42.13-alt2.x86_64.rpm
/ALTLinux/RPMS.main/kernel-image-un-def-4.9.35-alt0.M80P.1.x86_64.rpm

Тем более что man E2fsprogs version 1.42.13 был написан в May 2015, а Longterm ядро 4.9 отрелизилось 2016-12-11:
https://www.kernel.org/category/releases.html

Считать ли ядро un-def-4.9.35 старым, по отношению к тому, о чём говорит man e2fsprogs последним предложением в секции 64bit? Учитывая что ядро 4.9 появилось на полтора года позже, чем был написан man e2fsprogs версии 1.42.13.

Оффлайн klark973

  • Давно тут
  • **
  • Сообщений: 653
  • Неспящий саппорт
Re: Ошибка загрузки второй ОС Linux
« Ответ #17 : 06.02.2019 00:38:13 »
По моему ИМХО, на десктопах, не вижу смысла в фиче 64bit.
Оно может и так, вот только Теодор Тцу вкорячил иные дефолты в /etc/mke2fs.conf :)

мне не понятно, под какой критерий подпадают older  kernels  and  older  versions  of e2fsprogs
Ядра 3.6+ поддерживают обе фичи. Но поддержка д.б. и в юзерспейсе. На сейчас она есть только в Сизифе. В P8 её де-факто нет, поскольку требуется e2fsprogs-1.43 и выше.

Считать ли ядро un-def-4.9.35 старым, по отношению к тому, о чём говорит man e2fsprogs последним предложением в секции 64bit?
Исходя из вышесказанного, версия ядра здесь не играет роли, равно как и фича 64bit. Но Теодор Тцу в более новых версиях ядер подсуропил из-за тех же фич: чтобы контрольные суммы метаданных считались быстрее, желательна поддержка со стороны CPU алгоритма CRC32C. Соответствующий модуль должен быть загружен ДО загрузки модуля ext4, но ведь не Intel'ом едины. Архитектура в прошлом году поменялась, и фичу сделали опциональной, к тому же виртуально зависимой на сабж, образно выражаясь. Теперь модуль ext4 явно зависит от модуля crc16 (к делу никакого отношения не имеет). Чтобы работали контрольные суммы метаданных, теперь надо грузить явно libcrc32c или просто crc32c, который вытягивает модуль crc32c-intel. ldv@ отправлял патч на этот счёт в апстрим, я бэкпортировал изменения legion@ make-initrd-2.x из Сизифа в p8, но проблема всё равно вылазит в p8, если руками установить более свежее ядро в p8, не трогая юзерспейса. Например, rpm -ivh kernel-image-un-def-*.rpm -- получаем сходу не загружаемую систему, поскольку ext4, хоть и попадает в initrd, корень на ext4 он больше найти не может без этих изменений, учитывающих неявные зависимости внутри ядра. Ситуация редкая, но умудриться на неё нарваться можно очень просто: новый сервер, сетевуха ядром не распознаётся, сети нет вообще рядом никакой, обновить систему возможности нет. Тащим на флэшке новое ядро, обновлем, ребутаемся и получаем совсем не загружаемую систему, хотя старый make-initrd отработал и модуль ext4 в initrd сложил. Решается добавлением в /etc/initrd.mk строк типа FEATURES += add_modules и MODULES_ADD += crc32c. Вроде ошибка о другом, но на самом деле источник проблемы один -- фича metadata_csum. :)
« Последнее редактирование: 06.02.2019 01:55:10 от klark973 »
To moan or to solve -- that is the question!

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 733
Re: Ошибка загрузки второй ОС Linux
« Ответ #18 : 06.02.2019 03:22:17 »
Ядра 3.6+ поддерживают обе фичи. Но поддержка д.б. и в юзерспейсе. На сейчас она есть только в Сизифе. В P8 её де-факто нет, поскольку требуется e2fsprogs-1.43 и выше.
на самом деле источник проблемы один -- фича metadata_csum. :)

Спасибо за разъяснение.
Не знал о metadata_csum, принудительно выставил на посмотреть из лайва regular-xfce-latest-x86_64 и на загрузке системы p8 получил:
Checking root filesystem
/dev/sda11 has unsupported feature(s): metadata_csum
e2fsck: Get newer version of e2fsck

тут логин root
(ROOTFS Repair) 1 #

Но стоило снять с файловой фичу metadata_csum, как загрузка системы пошла.

Оффлайн klark973

  • Давно тут
  • **
  • Сообщений: 653
  • Неспящий саппорт
Re: Ошибка загрузки второй ОС Linux
« Ответ #19 : 06.02.2019 03:26:24 »
Наверное, запутал вас. Есть более правильный пример для понимания. Допустим, мы где-то на железе или в виртуалке настроили систему 8СП (или Рабочую станцию 8, не важно). Допустим, у нас там даже свежее ядро un-def (4.14+), где все фичи есть. Сняли с неё образы разделов и хотим развернуть это на другом железе. Берём рескьюшку (внимание: Сизиф), грузимся в rescue, разбиваем диск, форматируем и монтируем разделы, развёртываем на них тарболы, чрутимся в новый корень, запускаем make-initrd -k <с нужным ядром>, запускаем grub-install <чего-то-там> и получаем такую же ругань, как на screen1 от grub-probe, который отказывается видеть наш корневой раздел ext4! Старый юзерспейс видит новые фичи:

dumpe2fs -h /dev/sda2 2>/dev/null | grep metadata_csum
Но работать с таким разделом отказывается. Можно сделать grub-install снаружи чрута, в результате в /boot/grub попадут файлы из Сизифа, да и меню станет текстовым чёрно-белым. А можно изначально форматировать разделы так: mkfs.ext4 -j -q -O ^metadata_csum /dev/sda2, и тогда этой проблемы удастся избежать. Вот здесь ещё можно почитать про технику переноса новых образов под старые ядра.

Короче, отключайте обе фичи или хотя бы одну из них. Потому что при запуске mkfs.ext4, начиная с версии ef2sprogs-1.43, если этого не указать явно, обе фичи будут включены и старый юзерспейс с таким разделом может не заработать. В ситуации с двумя системами где в обеих grub, кроме того, следует отключить авто-обновление grub в той системе, что старее.

P.S.: Вижу, пока писал, Вы уже и сами разобрались! :)
To moan or to solve -- that is the question!

Оффлайн AlexR2D2

  • Завсегдатай
  • *
  • Сообщений: 7
Re: Ошибка загрузки второй ОС Linux
« Ответ #20 : 06.02.2019 12:44:25 »
Избавиться от "error: file '/boot/grub/locale/POSIX.gmo' not found" помогло:
Достаточно поменять в /boot/grub/grub.cfg строку set lang=POSIX, а чтобы этого не делать каждый раз после update-grub, вызывать LANG=C update-grub -- кажись, так.

Спасибо!

Сегодня попробую:
А можно изначально форматировать разделы так: mkfs.ext4 -j -q -O ^metadata_csum /dev/sda2
Т.е. выполнить форматирование раздела sda2, а затем установить MX linux?
Для форматирования можно любой Rescue использовать?
Во время установки MX происходит форматирование корневого раздела (без возможности отказаться). Может ли это привести к тому, что "mkfs.ext4 -j -q -O ^metadata_csum" будет исправлено форматированием с новыми опциями?

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 733
Re: Ошибка загрузки второй ОС Linux
« Ответ #21 : 06.02.2019 13:16:10 »
А можно изначально форматировать разделы так: mkfs.ext4 -j -q -O ^metadata_csum /dev/sda2
Т.е. выполнить форматирование раздела sda2, а затем установить MX linux?
Для форматирования можно любой Rescue использовать?
Во время установки MX происходит форматирование корневого раздела (без возможности отказаться). Может ли это привести к тому, что "mkfs.ext4 -j -q -O ^metadata_csum" будет исправлено форматированием с новыми опциями?

Можно загрузиться в лайв или rescue MX18 или из этого лайва:
http://nightly.altlinux.org/sisyphus/current/regular-xfce-latest-i586.iso
http://nightly.altlinux.org/sisyphus/current/regular-xfce-latest-x86_64.iso

и просто выключить фичу metadata_csum на файловой /dev/sda2 на которой находится rootMX18, выполнив команду от root:
# tune2fs -O ^metadata_csum /dev/sda2

Символ ^ выключает фичу.
Символ + добавляет фичу.
так что можно совет выше даже не менять или использовать tune2fs -O ^metadata_csum /dev/sda2.

Помните, что все операции с файловой, должны быть при отмонтированной файловой.
Внимательно читайте сообщения в терминале.
« Последнее редактирование: 06.02.2019 18:19:58 от Speccyfighter »

Оффлайн Kalt

  • Давно тут
  • **
  • Сообщений: 961
Re: Ошибка загрузки второй ОС Linux
« Ответ #22 : 07.02.2019 10:16:47 »
...Возможно в тему. Если обновить ядро не смонтировав предварительно раздел с W- 10, то загрузчик её не увидит. Хотя может так и надо?..
Intel Xeon X3440 2,53GHz, MSI H55- G43, DDR3- 4x2GB, GF GT710

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 733
Re: Ошибка загрузки второй ОС Linux
« Ответ #23 : 07.02.2019 15:23:36 »
...Возможно в тему. Если обновить ядро не смонтировав предварительно раздел с W- 10, то загрузчик её не увидит. Хотя может так и надо?..

Не может, а должно.
Такую функциональность имел GRUB 1.99:
Если корневая файловая не смонтирована, grub-mkconfig не видел эту систему и не заносил её в список загрузчика.
Но GRUB2 туп до невозможности.

Частный пример:
Если две системы по загрузке развязаны физически, т.е. основная грузится через MBR (Legacy/CSM), а другая через UEFI, GRUB2 всё равно внесёт UEFI систему в список опций загружаемых, несмотря на то, что эта система не может быть загружена физически.
Отмонтирование корневой, позволяет не заставлять пользователя править конфиги и упрощает конфигурирование.

Программист должен запомнить:
Везде где можно, нужно избегать необходимой необоснованной ручной правки конфигов. Но здесь есть тонкая грань между разумным и необходимым.
Как пример:
В частности mplayer-vc (проигрывание локальных видеофайлов через tty), это попытка свести сложное к максимальной простоте в соответствии с традициями старой школы. Это могло бы быть и правкой конфига, но это необоснованное усложнение по-сути простого требуемого функционала.

В данном случае простой требуемый функционал:
Не вносить в список загружаемых нежелательные системы (те, корень которых не смонтирован).
« Последнее редактирование: 07.02.2019 17:02:55 от Speccyfighter »

Оффлайн AlexR2D2

  • Завсегдатай
  • *
  • Сообщений: 7
Re: Ошибка загрузки второй ОС Linux
« Ответ #24 : 09.02.2019 16:02:19 »
Проблема решена (проверил пару раз).
Придерживался следующего алгоритма:
1. Установка MX Linux 18
2. Установка SimplyLinux 8.2
3. Обновление grub-alterator в Synaptic.
    В связи с этим:
    * удаляется загрузчик с GRUB 2.0-alt21
    * устанавливается GRUB 2.2-alt14
4. update-grub
    Теперь появляется возможность запуска MX Linux 18, но при запуске загрузчика появляется ошибка error: "file '/boot/grub/locale/POSIX.gmo' not found"
5. При установке загрузчика (GRUB 2.2-alt14) set lang=ru_RU меняет свое значение на POSIX, поэтому в файле grub.cfg возвратить set lang=ru_RU.

Спасибо за помощь!

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 722
  • Кто ищет, тот найдёт.
Re: Ошибка загрузки второй ОС Linux
« Ответ #25 : 10.02.2019 17:27:45 »
Проблема решена (проверил пару раз).
Хорошо бы в таком случае ещё и тему закрыть https://forum.altlinux.org/index.php?topic=1045.msg193310#msg193310