пятница, 19 июня 2009 г.

Легко ли угробить систему на ZFS root pool?

В предыдущей статье встал вопрос, что как-то страшновато зачищать zpool.cache при наличии ZFS root pool в системе, и, по логике, надо лечить систему с полетевшим ZFS-пулом полной брутальной переустановкой, как развлекаются окошечники (у них много свободного времени, хи-хи ;)).

Развлекаться так развлекаться. Игрища и блудницы в нашем полном распоряжении, повеселимся, дык!

Проведем эксперимент экспериментов и попробуем шаловливыми ручонками ушатать систему на ZFS root pool и с еще одним пулом ZFS на втором диске до полной гибели. ;)

(На самом деле просто посмотрим, что произойдет при выносе кэш-файла при наличии в системе корневого и некорневого пула. Пытаться убить ZFS-пул на исправном железе -занятие неблагодарное).

Обстряпаем мы это так.

1. Установим систему с двумя пулами на двух дисках.
2. Вынесем на живой системе с двумя пулами zpool.cache полностью. Не будем убивать пулы - просто имитируем ситуацию отказа некорневого пула, когда нужно удалять кэш-файл.
3. Перезагрузимся.
4. Посмотрим, что произойдет.

Итак, начали!

server4# cd /etc/zfs
server4# ls -al
total 24
drwxr-xr-x 2 root sys 3 Oct 27 04:28 .
drwxr-xr-x 89 root sys 246 Oct 27 04:28 ..
-rw-r--r-- 1 root root 1040 Oct 27 04:28 zpool.cache
server4# zpool status
pool: rpool
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c0t1d0s0 ONLINE 0 0 0

errors: No known data errors
server4# zpool create -f data c0t0d0s0
server4# zpool status
pool: data
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
c0t0d0s0 ONLINE 0 0 0

errors: No known data errors

pool: rpool
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c0t1d0s0 ONLINE 0 0 0

errors: No known data errors

Мы на исходной позиции. Система стоит на ZFS-руте полностью, на втором диске у нас пул DATA, который в онлайне и смонтирован. Кэш-файл содержит, соответственно, ссылки на оба пула.

Производим вынос тела:

server4# cd /etc/zfs
server4# ls -al
total 26
drwxr-xr-x 2 root sys 3 Oct 27 04:36 .
drwxr-xr-x 89 root sys 246 Oct 27 04:28 ..
-rw-r--r-- 1 root root 2052 Oct 27 04:36 zpool.cache
server4# rm *
server4# ls -al
total 20
drwxr-xr-x 2 root sys 2 Oct 27 04:37 .
drwxr-xr-x 89 root sys 246 Oct 27 04:28 ..
server4# init 6

После непродолжительной гражданской панихиды тело было предано земле:

server4# svc.startd: The system is coming down. Please wait.
svc.startd: 90 system services are now being stopped.
svc.startd: The system is down.
syncing file systems... done
rebooting...

SC Alert: Host System has Reset
Probing system devices
Probing memory
Probing I/O buses
screen not found.
keyboard not found.
Keyboard not present. Using ttya for input and output.
Probing system devices
Probing memory
Probing I/O buses


Sun Fire V215, No Keyboard
Copyright 2008 Sun Microsystems, Inc. All rights reserved.
OpenBoot 4.30.0.a, 1024 MB memory installed, Serial #78457024.
Ethernet address 0:14:4f:ad:28:c0, Host ID: 84ad28c0.



Rebooting with command: boot
Boot device: /pci@1e,600000/pci@0/pci@a/pci@0/pci@8/scsi@1/disk@1,0:a File and args:
SunOS Release 5.10 Version Generic_137137-09 64-bit
Copyright 1983-2008 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Hardware watchdog enabled
Hostname: server4
Reading ZFS config: done.
Mounting ZFS filesystems: (3/3)

server4 console login: root
Password:
Last login: Fri Oct 27 04:32:36 on console
Oct 27 04:39:59 server4 login: ROOT LOGIN /dev/console
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
Welcome to SA300-S10_B.2 on server4
server4# zpool status
pool: rpool
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c0t1d0s0 ONLINE 0 0 0

errors: No known data errors

"Дык, ети ж твою за ногу!" - сказали мужики. Корневой пул жив, мало того, он исправен и сам вернул себя взад! А второго пула нет. Окей, вернем его обратно?

server4# zpool import data
server4# zpool status
pool: data
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
c0t0d0s0 ONLINE 0 0 0

errors: No known data errors

pool: rpool
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c0t1d0s0 ONLINE 0 0 0

errors: No known data errors
server4#

Ха. "Он завелся!"*

Don't panic, мальчики и девочки. Убить систему, стоящую на корневом пуле ZFS не трудно - а очень трудно.
____________________________________
* Крик молодого Анакина Скайуокера в фильме "Звездные Войны I эпизод: Скрытая угроза", когда он смог-таки завести двигатели своего кара.