13 августа 2013 г.

Переподключение дисков в ASM через multipath

Проблема: диски в ASM примонтированы напрямую, не используя multipath.

Нужно отмонтировать диски а ASM с одного пути, например /dev/sdc, и примонтировать к другому, например к /dev/dm-1

Для примера:

1)
ls -al /dev/oracleasm/disks/

brw-rw---- 1 oracle oinstall 8, 16 Jul  2 15:12 DISK1
brw-rw---- 1 oracle oinstall 8, 32 Jul  2 15:12 DISK2

Видно что диски примонтированы напрямую, не через  multipath (цифра 8)

2)
Должно быть:
ls -al /dev/oracleasm/disks/

brw-rw---- 1 oracle oinstall 253, 8 May 20 14:40 DISK1
brw-rw---- 1 oracle oinstall 253, 9 May 20 14:40 DISK2

Вместо 8 стоит 253, значит  диски примонтированы правильно (через multipath )

3)
Для определения, к какому multipath относится DISK1:
multipath -ll | less

далее в этом списке ищем устройство с этими major minor номерами.
То есть 8:16. Для поиска можно просто в строке приглашения less набрать /8:16
Имеем например: 0:0:0:5  sdb  8:16   [active][ready], а принадлежит он mpath1.
Путь к нему будет: /dev/mapper/mpath1

4)
Определяем пути, к которым подключены диски:
/etc/init.d/oracleasm listdisks
DISK1
DISK2
DISK3
DISK4

ls -al /dev/oracleasm/disks/
total 0
drwxr-xr-x 1 root   root         0 Jun 25 18:47 .
drwxr-xr-x 4 root   root         0 Jun 25 18:47 ..
brw-rw---- 1 oracle oinstall 8, 48 Jul  3 16:58 DISK1
brw-rw---- 1 oracle oinstall 8, 64 Jul  3 16:58 DISK2
brw-rw---- 1 oracle oinstall 8, 80 Jul  3 16:58 DISK3
brw-rw---- 1 oracle oinstall 8, 96 Jul  3 16:58 DISK4

/etc/init.d/oracleasm querydisk -v -d DISK1
Disk "DISK1" is a valid ASM disk on device /dev/sdd[8,48]

Так смотрим по всем дискам, в итоге составляем таблицу соответствий:
------------------------------------------------------------------
| DISK1    sdd  mpath6        dm-8
| DISK2    sde  mpath3        dm-3
| DISK3    sdf   mpath4        dm-4  
| DISK4    sdg  mpath5        dm-5
------------------------------------------------------------------

5) В ASM
SQL>  select g.name "Group", d.name "Disk", d.mode_status "Status" from v$asm_disk d, v$asm_diskgroup g where d.group_number = g.group_number;

Group                          Disk                           Status
------------------------------ ------------------------------ -------
DATA                           DATA_0002                      ONLINE
FLASH                          FLASH_0000                     ONLINE
DATA                           DATA_0001                      ONLINE
DATA                           DATA_0000                      ONLINE


SQL> show parameter asm_diskstring

asm_diskstring                       string      /dev/oracleasm/disks

SQL> select GROUP_NUMBER, DISK_NUMBER, MODE_STATUS, STATE, NAME, PATH from v$asm_disk;
           1           2 ONLINE  NORMAL   DATA_0002  /dev/oracleasm/disks/DISK4

           2           0 ONLINE  NORMAL   FLASH_0000 /dev/oracleasm/disks/DISK3

           1           1 ONLINE  NORMAL   DATA_0001   /dev/oracleasm/disks/DISK2

           1           0 ONLINE  NORMAL   DATA_0000  /dev/oracleasm/disks/DISK1


6)  Удаление:

ALTER DISKGROUP FLASH DROP DISK FLASH_0000;

7) Отмонтируем:
ASMCMD> umount FLASH

DROP DISKGROUP FLASH INCLUDING CONTENTS;

8) Удаляем:
/etc/init.d/oracleasm deletedisk DISK3
Deleting Oracle ASM disk "VOL1" [ OK ]

9) Если не удаляется, то чистим заголовок диска:
-- Сохраняем заголовок диска в файл
dd if=/dev/sdf of=file_sdf bs=1024 count=100
dd if=/dev/sdf of=file_sdf3 bs=1024 count=100

-- Обнуление диска для возможности его удалить
dd if=/dev/zero of=/dev/sdf bs=1024 count=100

-- Удаляем с /etc/init.d/oracleasm deletedisk, если и сейчас не получится, то перезагружаем хост
-- Восстанавливаем заголовок диска:
dd if=file_sdf of=/dev/sdf  bs=1024 count=100

10) Создаем
/etc/init.d/oracleasm createdisk DISK3 /dev/dm-4

11) Добавляем параметр EXCLUDE в /etc/sysconfig/oracleasm
ORACLEASM_SCANEXCLUDE="sd"

12)
/etc/init.d/oracleasm scandisks