Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.UNIX.BSD
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.UNIX.BSD с датами от 18 Jan 11 22:51:00 до 04 Jul 24 04:46:01, всего сообщений: 10757
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 6400 из 10757 ===================================== RU.UNIX.BSD =
От   : Eugene Grosbein                  2:5006/1           26 Jan 18 20:03:06
Кому : Alex Korchmar                                       26 Jan 18 20:03:06
Тема : Re: ashift на древней bsd
FGHI : area://RU.UNIX.BSD?msgid=grosbein.net+c715b081
На   : area://RU.UNIX.BSD?msgid=ddt.demos.su+46c7f279
= Кодировка сообщения определена как: IBM866 =================================
Ответ: area://RU.UNIX.BSD?msgid=<1187508887@ddt.demos.su>+78f4c260
==============================================================================
23 янв. 2018, вторник, в 23:01 NOVT, Alex Korchmar написал(а):

AK>>> поправит (интересно, зачем ему вообще что-то знать о каких-то контрольных
AK>>> суммах, да еще на уровне пула, а не отдельной fs)
EG>> Для загрузчика несходимость контрольной суммы означает,
EG>> что это место надо пропустить при поиске загрузочного пула.
AK> хмм... однобитовый патч? ;-)

Hе понял реплики.

Вот имеем мы пусть даже просто загрузочный зеркальный пул.
До старта ядра у загрузчика есть только сервисы BIOS/[U]EFI,
для простоты будем называть просто BIOS. Оно загружает с одного из дисков
MBR и передаёт управление в код, который там лежит.

Этот код, как и любой код, использующий сервисы BIOS, может читать
диски, ссылаясь на них как на BIOS disk 0 (тот, с которого загружен сам),
BIOS disk 1 и т.д., в терминах фрёвого загрузчика это disk0 и disk1.

В случае BootEasy (/boot/boot0) в MBR этот код либо находит активный раздел
и читает с него первый сектор, либо читает MBR с BIOS disk 1
(в зависимости от настроек и/или выбора юзера с консоли) и передаёт
туда управление, что в случае ZFS в итоге приводит к запуску zfsboot,
которому всё так же доступны disk0, disk1.

zfsboot не знает, с которого диска и которого раздела его прочитали.
Он "обнюхивает" доступные диски и разделы в поисках сигнатур и суперблоков
ZFS и если видит что-то похожее на ZFS, но контрольная сумма данных
не сходится - разумно пропускает и ищет дальше, потому как это мог быть
и нестойко читающийся soft bad и лучше бы начать грузить zfsloader
с другого компонента.

zfsloader имеет в себе уже гораздо более богатый по возможностям код,
который тем не менее всё ещё может использовать только сервисы BIOS,
но ему уже передаются уникальные id того пула ZFS и файловой системы на нём,
с которого его прочитал zfsboot. Он тоже "обнюхивает" доступные диски
и разделы, находит на них компоненты указанного пула, выбирая нужный
пул по id и читает данные с ZFS и если контрольная сумма не сходится,
то имеет возможность попробовать другой компонент зеркального пула.

В случае с GPT вместо MBR отличие только в последовательности
запуска загрузчиков до старта zfsloader, а дальше всё то же самое.

Eugene
--
Choose no career
--- slrn/1.0.2 (FreeBSD)
* Origin: RDTC JSC (2:5006/1@fidonet)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.092225 секунды