Для работы SVM обязательным требованием является наличие одной копии базы
структуры SVM. В этой базе хранится информация обо всех логических устройствах и их
конфигурациях, созданных SVM. Пока эта база не будет сформирована, данный продукт
функционировать не будет.
Для повышения надежности работы данной технологии, рекомендуется создавать
несколько копий данной базы – реплик. Если SVM не сможет прочитать информацию из
базы, то вся дисковая структура будет безвозвратно потеряна. Оптимальным решением
для данного вопроса является создание 3-5 реплик на каждом дисковом носителе, которыеиспользуются в SVM.
В случае если в логические тома объединяются пять и выше дисковых носителей, то количество реплик можно свести по одной на диск. Таким образом, вы создаете необходимую избыточность данных, и в случае потери информации на одном из носителей необходимая конфигурация будет прочитана с «рабочих» копий.
В целях повышения надежности работы, SVM не будет стартовать до тех пор, пока
количество «рабочих» реплик не превысит количество поврежденных. Если количество
поврежденных реплик достигнет половины в момент работы системы, то SVM будет продолжать свое функционирование, а система будет постоянно сообщать о критической ситуации (system panic).
Реплики обязательно создаются на выделенных частях (slices) диска и по объему
занимают приблизительно 4-5Мб на каждую реплику. Эти дисковые части не должны
использоваться другими задачами.
Система установлена на диск c0t0d0:
его разбивка выглядит так:
Для этого системного диска мы хотим создать зеркало.
1. Копируем таблицу партиций с основного диска, на диск который будет зеркалом.
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2
2. Создаем по три реплики на каждом диске.
# metadb -a -c 3 -f /dev/dsk/c0t0d0s3 /dev/dsk/c0t1d0s3
Description of metadb flags:
-a -- adding
-f -- force (needed the first time creating databases)
-c 3 -- create 3 databases in each slice
3. Mirror the root slice.
# metainit -f d10 1 1 c0t0d0s0
# metainit -f d20 1 1 c0t1d0s0
# metainit d0 -m d10
# metaroot d0 (Use this command only on the root slice!)
4. Mirror the swap slice.
# metainit -f d11 1 1 c0t0d0s1
# metainit -f d21 1 1 c0t1d0s1
# metainit d1 -m d11
5. Mirror the var slice.
# metainit -f d14 1 1 c0t0d0s4
# metainit -f d24 1 1 c0t1d0s4
# metainit d4 -m d14
6. Mirror the usr slice.
# metainit -f d15 1 1 c0t0d0s5
# metainit -f d25 1 1 c0t1d0s5
# metainit d5 -m d15
7. Mirror the opt slice.
# metainit -f d16 1 1 c0t0d0s6
# metainit -f d26 1 1 c0t1d0s6
# metainit d6 -m d16
8. Mirror the home slice.
# metainit -f d17 1 1 c0t0d0s7
# metainit -f d27 1 1 c0t1d0s7
# metainit d7 -m d17
Run metastat metadevice for information on a metadevice. If you wish to delete a metadevice, run metaclear metadevice.
9. Update /etc/vfstab to mount the mirrors after boot.
/etc/vfstab before changes:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c0t0d0s1 - - swap - no -
/dev/md/dsk/d30 /dev/md/rdsk/d30 / ufs 1 no logging
/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /usr ufs 1 no ro,logging
/dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no nosuid,logging
/dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /home ufs 2 yes nosuid,logging
/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /opt ufs 2 yes nosuid,logging
swap - /tmp tmpfs - yes -
/etc/vfstab after changes:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/md/dsk/d1 - - swap - no -
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no logging
/dev/md/dsk/d5 /dev/md/rdsk/d5 /usr ufs 1 no ro,logging
/dev/md/dsk/d4 /dev/md/rdsk/d4 /var ufs 1 no nosuid,logging
/dev/md/dsk/d7 /dev/md/rdsk/d7 /home ufs 2 yes nosuid,logging
/dev/md/dsk/d6 /dev/md/rdsk/d6 /opt ufs 2 yes nosuid,logging
swap - /tmp tmpfs - yes -
10. Reboot the system.
# lockfs -fa
# init 6
11. Attach the second submirror to the mirror. This will cause the data from the boot disk to be synchronized with the mirrored drive.
# metattach d0 d20
# metattach d1 d21
# metattach d4 d24
# metattach d5 d25
# metattach d6 d26
# metattach d7 d27
You can run metastat to track the mirroring progress.
12. Change the crash dump device to the DiskSuite swap metadevice (Solaris 7 and later).
# dumpadm -d `swap -l | tail -1 | awk '{print $1}'`
13. Determine the physical device path of the mirror disk.
$ ls -l /dev/dsk/c0t1d0s0
lrwxrwxrwx 1 root root 50 Jan 16 10:20 /dev/rdsk/c0t1d0s0 -> ../../devices/pci@1f,0/pci@1,1/ide@3/dad@1,0:a
Replace the major name (e.g. dad) in the physical device path with disk when creating the device alias below.
14. Create a mirror device alias for the mirror disk:
# eeprom "nvramrc=devalias mirror /pci@1f,0/pci@1,1/ide@3/disk@1,0:a"
# eeprom "use-nvramrc?=true"
You can also configure the device alias from the Open Boot (ok) prompt:
nvalias mirror /pci@1f,0/pci@1,1/ide@3/disk@1,0:a
You may want to add the mirror device alias to the boot-device Open Boot parameter in case of a problem with the standard boot device.
Example:
# eeprom boot-device
boot-device=disk net
In case of a problem with the disk device alias, the system will attempt to boot from the mirror device alias and then the network with the following change.
# eeprom "boot-device=disk mirror net"
From the Open Boot prompt, type boot mirror to boot from the mirror disk.
15. If you only have two internal disks (i.e. the boot disk and mirror disk), consider adding the following parameter to /etc/system to bypass the SVM/DiskSuite "quorum" rule.
set md:mirrored_root_flag = 1
set md_mirror:md_resync_bufsz=2048
Without this parameter, the system will not boot in multiuser mode if half or fewer of its state database replicas are available.
DUMP LOCAL BLOCKER/HOLDER: block level 5 res [0x14ba72e9][0x436aa562],[LB][ext 0x0,0x0]
*** 2017-03-24 11:47:15.459
----------resource 0x351040f98----------------------
resname : [0x14ba72e9][0x436aa562],[LB][ext 0x0,0x0]
hash mask : x3
Local inst : 1
dir_inst : 1
master_inst : 1
hv idx : 23
hv last r.inc : 10
current inc : 10
hv status : 0
hv master : 0
open options : dd
grant_bits : KJUSERNL KJUSERPR
grant mode : KJUSERNL KJUSERCR KJUSERCW KJUSERPR KJUSERPW KJUSEREX
count : 1 0 0 1 0 0
val_state : KJUSERVS_NOVALUE
valblk : 0x10b753c6eb2a00006800000000000000 .S*h
access_inst : 1
vbreq_state : 0
state : x0
resp : 0x351040f98
On Scan_q? : N
Total accesses: 820977
Imm. accesses: 754608
Granted_locks : 1
Cvting_locks : 1
value_block: 10 b7 53 c6 eb 2a 00 00 68 00 00 00 00 00 00 00
GRANTED_Q :
lp 0x34e1b5320 gl KJUSERPR rp 0x351040f98 [0x14ba72e9][0x436aa562],[LB][ext 0x0,0x0]
master 1 gl owner 0x3543c99a0 possible pid 26596 xid 90000-0001-00263033 bast 0 rseq 54296 mseq 0 history 0x14951495
open opt KJUSERDEADLOCK
CONVERT_Q:
lp 0x34f42dd10 gl KJUSERNL rl KJUSEREX rp 0x351040f98 [0x14ba72e9][0x436aa562],[LB][ext 0x0,0x0]
master 1 gl owner 0x3549b1b20 possible pid 30192 xid 6A000-0001-0049C4E3 bast 0 rseq 54296 mseq 0 history 0x1495149a
convert opt
----------enqueue 0x34e1b5320------------------------
lock version : 1522539
Owner inst : 1
grant_level : KJUSERPR
req_level : KJUSERPR
bast_level : KJUSERNL
notify_func : (nil)
resp : 0x351040f98
procp : 0x350907f40
pid : 26596
proc version : 15066
oprocp : (nil)
opid : 26596
group lock owner : 0x3543c99a0
possible pid : 26596
xid : 90000-0001-00263033
dd_time : 0.0 secs
dd_count : 0
timeout : 0.0 secs
On_timer_q? : N
On_dd_q? : N
lock_state : GRANTED
ast_flag : 0x0
Open Options : KJUSERDEADLOCK
Convert options :
History : 0x14951495
Msg_Seq : 0x0
res_seq : 54296
valblk : 0x0000000000000000804270b9ff7f0000 .Bp
user session for deadlock lock 0x34e1b5320
sid: 25 ser: 57139 audsid: 30497917 user: 173/APPS
flags: (0x10041) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
flags2: (0x48008) -/DDLT2
pid: 144 O/S info: user: oracle, term: UNKNOWN, ospid: 26596
image: oracle@msk-02-oebsdb01-test.tsretail.ru (J000)
client details:
O/S info: user: oracle, term: UNKNOWN, ospid: 26596
machine: msk-02-oebsdb01-test.tsretail.ru program: oracle@msk-02-oebsdb01-test.tsretail.ru (J000)
application name: DBMS_SCHEDULER, hash value=2478762354
action name: XX_DA_CERTIFICATE_EXP_DATE, hash value=1250029947
current SQL:
DUMP LOCAL BLOCKER: initiate state dump for TIMEOUT
possible owner[144.26596] on resource LB-14BA72E9-436AA562
*** 2017-03-24 11:47:15.459
Submitting asynchronized dump request [28]. summary=[ges process stack dump (kjdglblkrdm1)].
структуры SVM. В этой базе хранится информация обо всех логических устройствах и их
конфигурациях, созданных SVM. Пока эта база не будет сформирована, данный продукт
функционировать не будет.
Для повышения надежности работы данной технологии, рекомендуется создавать
несколько копий данной базы – реплик. Если SVM не сможет прочитать информацию из
базы, то вся дисковая структура будет безвозвратно потеряна. Оптимальным решением
для данного вопроса является создание 3-5 реплик на каждом дисковом носителе, которыеиспользуются в SVM.
В случае если в логические тома объединяются пять и выше дисковых носителей, то количество реплик можно свести по одной на диск. Таким образом, вы создаете необходимую избыточность данных, и в случае потери информации на одном из носителей необходимая конфигурация будет прочитана с «рабочих» копий.
В целях повышения надежности работы, SVM не будет стартовать до тех пор, пока
количество «рабочих» реплик не превысит количество поврежденных. Если количество
поврежденных реплик достигнет половины в момент работы системы, то SVM будет продолжать свое функционирование, а система будет постоянно сообщать о критической ситуации (system panic).
Реплики обязательно создаются на выделенных частях (slices) диска и по объему
занимают приблизительно 4-5Мб на каждую реплику. Эти дисковые части не должны
использоваться другими задачами.
Система установлена на диск c0t0d0:
его разбивка выглядит так:
Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 812 400.15MB (813/0/0) 819504 1 swap wu 813 - 1333 256.43MB (521/0/0) 525168 2 backup wm 0 - 17659 8.49GB (17660/0/0) 17801280 3 unassigned wm 1334 - 1354 12.34MB (21/0/0) 21168 4 var wm 1355 - 8522 3.45GB (7168/0/0) 7225344 5 usr wm 8523 - 14764 3.00GB (6242/0/0) 6291936 6 unassigned wm 14765 - 16845 1.00GB (2081/0/0) 2097648 7 home wm 16846 - 17658 400.15MB (813/0/0) 819504
Для этого системного диска мы хотим создать зеркало.
1. Копируем таблицу партиций с основного диска, на диск который будет зеркалом.
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2
2. Создаем по три реплики на каждом диске.
# metadb -a -c 3 -f /dev/dsk/c0t0d0s3 /dev/dsk/c0t1d0s3
Description of metadb flags:
-a -- adding
-f -- force (needed the first time creating databases)
-c 3 -- create 3 databases in each slice
3. Mirror the root slice.
# metainit -f d10 1 1 c0t0d0s0
# metainit -f d20 1 1 c0t1d0s0
# metainit d0 -m d10
# metaroot d0 (Use this command only on the root slice!)
4. Mirror the swap slice.
# metainit -f d11 1 1 c0t0d0s1
# metainit -f d21 1 1 c0t1d0s1
# metainit d1 -m d11
5. Mirror the var slice.
# metainit -f d14 1 1 c0t0d0s4
# metainit -f d24 1 1 c0t1d0s4
# metainit d4 -m d14
6. Mirror the usr slice.
# metainit -f d15 1 1 c0t0d0s5
# metainit -f d25 1 1 c0t1d0s5
# metainit d5 -m d15
7. Mirror the opt slice.
# metainit -f d16 1 1 c0t0d0s6
# metainit -f d26 1 1 c0t1d0s6
# metainit d6 -m d16
8. Mirror the home slice.
# metainit -f d17 1 1 c0t0d0s7
# metainit -f d27 1 1 c0t1d0s7
# metainit d7 -m d17
Run metastat metadevice for information on a metadevice. If you wish to delete a metadevice, run metaclear metadevice.
9. Update /etc/vfstab to mount the mirrors after boot.
/etc/vfstab before changes:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c0t0d0s1 - - swap - no -
/dev/md/dsk/d30 /dev/md/rdsk/d30 / ufs 1 no logging
/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /usr ufs 1 no ro,logging
/dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no nosuid,logging
/dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /home ufs 2 yes nosuid,logging
/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /opt ufs 2 yes nosuid,logging
swap - /tmp tmpfs - yes -
/etc/vfstab after changes:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/md/dsk/d1 - - swap - no -
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no logging
/dev/md/dsk/d5 /dev/md/rdsk/d5 /usr ufs 1 no ro,logging
/dev/md/dsk/d4 /dev/md/rdsk/d4 /var ufs 1 no nosuid,logging
/dev/md/dsk/d7 /dev/md/rdsk/d7 /home ufs 2 yes nosuid,logging
/dev/md/dsk/d6 /dev/md/rdsk/d6 /opt ufs 2 yes nosuid,logging
swap - /tmp tmpfs - yes -
10. Reboot the system.
# lockfs -fa
# init 6
11. Attach the second submirror to the mirror. This will cause the data from the boot disk to be synchronized with the mirrored drive.
# metattach d0 d20
# metattach d1 d21
# metattach d4 d24
# metattach d5 d25
# metattach d6 d26
# metattach d7 d27
You can run metastat to track the mirroring progress.
12. Change the crash dump device to the DiskSuite swap metadevice (Solaris 7 and later).
# dumpadm -d `swap -l | tail -1 | awk '{print $1}'`
13. Determine the physical device path of the mirror disk.
$ ls -l /dev/dsk/c0t1d0s0
lrwxrwxrwx 1 root root 50 Jan 16 10:20 /dev/rdsk/c0t1d0s0 -> ../../devices/pci@1f,0/pci@1,1/ide@3/dad@1,0:a
Replace the major name (e.g. dad) in the physical device path with disk when creating the device alias below.
14. Create a mirror device alias for the mirror disk:
# eeprom "nvramrc=devalias mirror /pci@1f,0/pci@1,1/ide@3/disk@1,0:a"
# eeprom "use-nvramrc?=true"
You can also configure the device alias from the Open Boot (ok) prompt:
nvalias mirror /pci@1f,0/pci@1,1/ide@3/disk@1,0:a
You may want to add the mirror device alias to the boot-device Open Boot parameter in case of a problem with the standard boot device.
Example:
# eeprom boot-device
boot-device=disk net
In case of a problem with the disk device alias, the system will attempt to boot from the mirror device alias and then the network with the following change.
# eeprom "boot-device=disk mirror net"
From the Open Boot prompt, type boot mirror to boot from the mirror disk.
15. If you only have two internal disks (i.e. the boot disk and mirror disk), consider adding the following parameter to /etc/system to bypass the SVM/DiskSuite "quorum" rule.
set md:mirrored_root_flag = 1
set md_mirror:md_resync_bufsz=2048
Without this parameter, the system will not boot in multiuser mode if half or fewer of its state database replicas are available.
DUMP LOCAL BLOCKER/HOLDER: block level 5 res [0x14ba72e9][0x436aa562],[LB][ext 0x0,0x0]
*** 2017-03-24 11:47:15.459
----------resource 0x351040f98----------------------
resname : [0x14ba72e9][0x436aa562],[LB][ext 0x0,0x0]
hash mask : x3
Local inst : 1
dir_inst : 1
master_inst : 1
hv idx : 23
hv last r.inc : 10
current inc : 10
hv status : 0
hv master : 0
open options : dd
grant_bits : KJUSERNL KJUSERPR
grant mode : KJUSERNL KJUSERCR KJUSERCW KJUSERPR KJUSERPW KJUSEREX
count : 1 0 0 1 0 0
val_state : KJUSERVS_NOVALUE
valblk : 0x10b753c6eb2a00006800000000000000 .S*h
access_inst : 1
vbreq_state : 0
state : x0
resp : 0x351040f98
On Scan_q? : N
Total accesses: 820977
Imm. accesses: 754608
Granted_locks : 1
Cvting_locks : 1
value_block: 10 b7 53 c6 eb 2a 00 00 68 00 00 00 00 00 00 00
GRANTED_Q :
lp 0x34e1b5320 gl KJUSERPR rp 0x351040f98 [0x14ba72e9][0x436aa562],[LB][ext 0x0,0x0]
master 1 gl owner 0x3543c99a0 possible pid 26596 xid 90000-0001-00263033 bast 0 rseq 54296 mseq 0 history 0x14951495
open opt KJUSERDEADLOCK
CONVERT_Q:
lp 0x34f42dd10 gl KJUSERNL rl KJUSEREX rp 0x351040f98 [0x14ba72e9][0x436aa562],[LB][ext 0x0,0x0]
master 1 gl owner 0x3549b1b20 possible pid 30192 xid 6A000-0001-0049C4E3 bast 0 rseq 54296 mseq 0 history 0x1495149a
convert opt
----------enqueue 0x34e1b5320------------------------
lock version : 1522539
Owner inst : 1
grant_level : KJUSERPR
req_level : KJUSERPR
bast_level : KJUSERNL
notify_func : (nil)
resp : 0x351040f98
procp : 0x350907f40
pid : 26596
proc version : 15066
oprocp : (nil)
opid : 26596
group lock owner : 0x3543c99a0
possible pid : 26596
xid : 90000-0001-00263033
dd_time : 0.0 secs
dd_count : 0
timeout : 0.0 secs
On_timer_q? : N
On_dd_q? : N
lock_state : GRANTED
ast_flag : 0x0
Open Options : KJUSERDEADLOCK
Convert options :
History : 0x14951495
Msg_Seq : 0x0
res_seq : 54296
valblk : 0x0000000000000000804270b9ff7f0000 .Bp
user session for deadlock lock 0x34e1b5320
sid: 25 ser: 57139 audsid: 30497917 user: 173/APPS
flags: (0x10041) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
flags2: (0x48008) -/DDLT2
pid: 144 O/S info: user: oracle, term: UNKNOWN, ospid: 26596
image: oracle@msk-02-oebsdb01-test.tsretail.ru (J000)
client details:
O/S info: user: oracle, term: UNKNOWN, ospid: 26596
machine: msk-02-oebsdb01-test.tsretail.ru program: oracle@msk-02-oebsdb01-test.tsretail.ru (J000)
application name: DBMS_SCHEDULER, hash value=2478762354
action name: XX_DA_CERTIFICATE_EXP_DATE, hash value=1250029947
current SQL:
DUMP LOCAL BLOCKER: initiate state dump for TIMEOUT
possible owner[144.26596] on resource LB-14BA72E9-436AA562
*** 2017-03-24 11:47:15.459
Submitting asynchronized dump request [28]. summary=[ges process stack dump (kjdglblkrdm1)].