Обновив версию zpool можно потерять GRUB

Для тех кто любит обновляться до последней версии будет полезно иметь в виду, что сделав только zpool upgrade, при последующей перезагрузке, а точнее при включении компа, вместо рабочего GRUB получите лишь его prompt. Например, я прошел путь OpenSolaris: 86, 96, 97 и теперь 98. Между билдами 86 и 98 версия ZFS pool сначала увеличилась с 11 до 12, а потом с 12 до 13. Я бы не обратил внимания, но к моему ноуту я периодически подключаю внешний USB диск (Lacie 250GB) для целей бекапа и смотрю, что говорит zpool status. Именно он и уговорил меня оба раза сделать zpool upgrade. И оба раза я наступал на эти грабли. Проблема в том, что при обновлении zpool upgrade необходимо обновлять и загрузчик GRUB. Бага уже принята в работу. Если Вы не сделали обновление загрузчика, то можете попытаться руками ему сказать откуда грузиться, но это не поможет:

GRUB> bootfs rpool/ROOT/opensolaris-2

GRUB> kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS

....
Error 17: cannot mount selected partition

Поэтому качаем DVD с новым релизом и с него делаем installgrub:

jack@opensolaris:~/Desktop$ su - 
Password: opensolaris
Sun Microsystems Inc. SunOS 5.11 snv_98 November 2008 
bash-3.2# zpool status
no pools available 
bash-3.2# zpool import 
 pool: rpool
 id: 1988807281359054800
 state: ONLINE
 status: The pool was last accessed by another system. 
 action: The pool can be imported using its name or numeric identifier and 
 the '-f' flag. 
 see: http://www.sun.com/msg/ZFS-8000-EY
 config: 
 rpool ONLINE 
 mirror ONLINE 
 c5t0d0s0 ONLINE 
 c3t0d0s0 ONLINE 
bash-3.2# zpool import -f rpool 
bash-3.2# installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c5t0d0s0 
 Updating master boot sector destroys existing boot managers (if any). 
 continue (y/n)? y 
 stage1 written to partition 1 sector 0 (abs 96406065) 
 stage2 written to partition 1, 267 sectors starting at 50 (abs 96406115) 
 stage1 written to master boot sector 
bash-3.2# installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c3t0d0s0 
 Updating master boot sector destroys existing boot managers (if any). 
 continue (y/n)? y 
 stage1 written to partition 0 sector 0 (abs 16065) 
 stage2 written to partition 0, 267 sectors starting at 50 (abs 16115) 
 stage1 written to master boot sector 
bash-3.2# zpool export rpool 
bash-3.2# init 6

 

Comments:

Great entry!
Thierry

Posted by Thierry Manfé on October 02, 2008 at 06:47 AM PDT #

Роман здравствуйте.
Ставил систему на rpool, на выделенные нулевые слайсы двух винтов. Остатки этих винтов решил отдать позже в другой пул. По всей видимости при создании этих дополнительных слайсов все пошло не так. Слайсы создавал с помощью fdisk. Смутило то, что вновь созданный слайс становился активным. Я естественно сделал активным опять нулевой. На втором диске сделал ту же операцию - создал новый слайс точно такой же и сделал активным нулевой. После этого создал новый зеркальный pool с этими новыми слайсами. Создал на нем zfs. Ничего не предвещало гибели системы, но после перезагрузки уперся в GRUB. Подскажите пожалуйста, почему перестала загружаться система?
Посоветуйте пожалуйста, как восстановить загрузку?
Спасибо.

Posted by Konstantin Mironov on June 03, 2009 at 07:44 AM PDT #

Константин, добрый день!
Из личного опыта еще со времен Solaris 8 & 10 и UFS, я никогда не делаю несколько партиций fdisk-ом на одном диске. Solaris может видеть только одну партицию каждого диска, сделанную fdisk-ом, и думаю, что вряд ли что-то изменилось с тех пор.
Соответственно, чтобы исправить дело, надо загрузиться с DVD, убить вторые партиции, сделать первые активными, возможно еще раз перезагрузиться с DVD, запустить installgrub на первые партиции каждого диска. После этого rpool должен вернуться к жизни.
(Если на второй ZFS есть важные данные, то придется разбивать зеркала - убивая вторую партиции на первом диске и первую на втором)
После всего я бы перестроил зеркало так, чтобы каждая его половина заняла диск целиком: http://blogs.sun.com/vineeth/entry/transfering_root_image_of_opensolaris

Posted by Roman Ivanov on June 03, 2009 at 05:53 PM PDT #

Роман, здравствуйте.
Спасибо за развернутый ответ. Попробовал убить партиции и установить занова grub - ничего не вышло, все равно выпадаем в grub при загрузке.
Наверно придется ставить занова систему.
Роман, не могу понять, почему нельзя делать больше одной партиции на диске. Получается, грубо говоря, любой диск в zfs pool мы должны добавлять в целиком и рулить уже на уровне файловых систем из под zfs?
Просто не совсем понятно. У меня есть 4 диска по 1тб. Была идея отвести под rpool 20-30гб в составе двух небольших партиций на двух дисках в зеркале. Там бы крутилась система. Под БД хотел задействовать оставшееся место на первых двух диках (опять же в виде зеркала) + добавить в этот пул полные следующие два диска.
Что получается сейчас. Мне нужно будет либо
1. Отдать два диска под rpool (непонятно только зачем для него 1тб), а под базу взять следующие два диска в отдельный пул в зеркале.
2. Либо отводить делать rpool из зеркала из 2х дисков + добавлять еще одно зеркало из следующих двух и все держать на rpool (и систему, и базу и прочее) в различных файловый системах zfs.

Что посоветуете? Или я в корне не правильно понимаю суть проблемы?

Posted by Konstantin on June 05, 2009 at 06:31 PM PDT #

Константин, вот это руководство может ответить на многие Ваши вопросы http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide

вариант помещения двух пулов на один диск может быть такой:
1. ставим систему на 1-й диск на fdisk-партицию в 30ГБ
2. на втором диске делаем fdisk-партицию на весь диск и в нем s0 на 30+ГБ (лучше 31 - чтобы быть уверенным, что s0 не окажется меньше чем rpool на первом диске. иначе зеркало не создастся) и s1 на все оставшееся место (потом это будет часть пула для базы)
3. подключаем s0 как зеркало к rpool и ждем полной пересинхронизации
4. отключаем первый диск от rpool и разбиваем его так же как и второй диск, а затем подключаем к rpool

в итоге имеем первые два диска с одной fdisk-партицией на весь диск, на которой есть s0 для rpool + s1 для базы.

Скажу сразу, я этот вариант сам не делал, но работать так должно.

Однако самый же красивый вариант - это купить две USB флешки по 32GB и поставить на них rpool :-)

Posted by Roman Ivanov on June 07, 2009 at 05:31 PM PDT #

Спасибо, попробую такой вариант.
А что касается флешки под rpool. А как же ограничение на количество циклов записи на флеш-память? Или своп, логи и тд выносить потом на отдельные партиции?
Вы не встречали описания как солярис на флешку установить? Изначально как раз и планировали на флеш ставить, так что в наличии они есть :)

Posted by Konstantin on June 08, 2009 at 01:21 AM PDT #

Константин, пишу Вам с системы OpsenSolaris 2009.06, установленной на USB флешку размером 32GB. Установка на флешку ничем не отличается от установки на обычный диск.
Своп можно вынести на отдельный диск, а вот системных логов не так много, чтобы о них заботиться.
Обратите внимание на http://www.sun.com/storage/flash/ и особенно на http://www.sun.com/storage/flash/module.jsp
Там же есть много чего почитать http://www.sun.com/storage/flash/resources.jsp

Posted by Roman Ivanov on June 09, 2009 at 10:14 PM PDT #

Роман, здравствуйте.
Спасибо, Ваш метод помог установить rpool на часть диска.
Все бы хорошо, но шаловливые ручки привели к зависанию второго пула в каком-то неадекватном состоянии.

#zpool status tank
pool: tank
state: FAULTED
status: One or more devices are faultd in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
see: http://www.sun.com/msg/ZFS-8000-HC
scrub: resilver in progress for 0h18m, 0,37% done, 81h24m to go
config:

NAME STATE READ WRITE CKSUM
tank FAULTED 0 0 0 experienced I/O failures
c1t3d0s1 UNAVAIL 0 0 0 cannot open
mirror ONLINE 0 0 0
c1t0d0s1 ONLINE 0 0 0
c1t1d0s1 ONLINE 0 0 0
c2t0d0s1 ONLINE 0 0 0

Ничего с пулом я сделать не могу. Ресильверинг застрял на этих процентах и не двигается. Я не могу ни удалить c2t0d0s1 (который собственно и пытался добавить), ни удалить сам пул. Ценных данных на пуле нет, поэтому с радостью бы его прибил, но не как.

Посоветуйте что можно сделать в такой ситуации?

Posted by Konstantin on June 16, 2009 at 06:44 AM PDT #

попробуйте удалить с опцией -f
Константин, приглашаю присоединиться к opensolaris.org - сообщество быстрее сможет Вам помочь ;-)

Posted by Roman Ivanov on June 17, 2009 at 12:42 AM PDT #

Post a Comment:
  • HTML Syntax: NOT allowed
About

Roman (pomah) Ivanov, ISV Engineering. Tips how to run Oracle best on Sun. Performance monitoring and tuning for system administrators. OpenSolaris user experience.

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today