ASMLib et Device Mapper Multipath

My Oracle Support (Metalink) a parfois quelques paradoxes qui font sourire; la configuration d’ASMLib avec le Device Mapper sous Linux fait parti de ceux-ci, voici quelques extraits choisis qui vous aideront à comprendre de quoi je parle:

  • 602952.1 – How To Setup ASM & ASMLIB On Native Linux Multipath Mapper disks?

Keep in mind for ASMLIB disks you will need to use the /dev/dm-* disks instead of the /dev/mapper/mpath* devices since they are present in the partition table ==)> /proc/partitions and ASMLIB will look at that file during the disk discovering phase. If you do not use the disks located at /dev/dm-* then ASM will not be able to discover them.

  • 357472.1 Configuring device-mapper for CRS/ASM

the /dev/dm-N devices are internal to device mapper and should never be used.
These devices are not persistent. Starting with Red Hat Enterprise Linux 5, these devices are no longer created by udev.

/dev/dm ou pas /dev/dm? Si l’argument de la seconde note semble imparable, celui de la première semble vraisemblable. J’ai donc vérifié dans le code source que vous pouvez récupérer sur le site d’Oracle et il apparaît en effet que le premier argument est vrai aussi ! scan-partitions.c recherche bien les partitions dans /proc/partitions.

Alors qui croire ? Et bien en fait peu importe ! ASMLib stocke le nom du device à aucun endroit. Au lieu de cela:

  • tout est stocké dans les entêtes des disques et ne font référence à aucun device,
  • les devices sont scannés au démarrage du service ASM ou lorsque vous exécutez la commande scandisk en fonction des paramètres ORACLEASM_SCANORDER et ORACLEASM_SCANEXCLUDE de /etc/sysconfig/oracleasm,
  • lorsque les devices sont trouvés, ASMLib crée un device avec le couple [major,minor] correspondant dans /dev/oracleasm/disks. Ce device a le nom du disque créé avec createdisk.

Tant et si bien que pour retrouver quel device correspond à quel un disque ASM, vous pouvez regarder le couple [major,minor] et le comparer à celui des autres devices du serveur comme ci-dessous:

ls -l /dev/oracleasm/disks

# Si vous utilisez DM:
ls -l /dev/mapper

# Si vous utilisez un device simple
ls -l /dev

Pour en savoir plus, quelques documents à lire absolument: