استفاده از udev برای ASM

در سیستم‌های لینوکسی نام دستگاه‌هایی مثل sdb و dm‑1 ممکن است پس از ریبوت تغییر کند و باعث شود دیسک‌های ASM شناخته نشوند. برای جلوگیری از این مشکل باید از شناسه‌های پایدار استفاده کرد و با udev یک نام ثابت برای پارتیشن ایجاد کرد. مستندات اوراکل و مقالات تخصصی روی استفاده از شناسه یکتای دیسک یا پارتیشن تاکید دارند؛ این شناسه‌ها پس از هر ریبوت بدون تغییر باقی می‌مانند و در udev به‌عنوان کلید استفاده می‌شوندdbi-services.com. همچنین توصیه شده است به جای استفاده از کلید NAME از ویژگی SYMLINK برای ایجاد نام ثابت بهره بگیریم، زیرا در نسخه‌های جدید Oracle Linux کلید NAME کار نمی‌کندfritshoogland.wordpress.com.

۱ – بررسی وضعیت دیسک‌ها و ایجاد پارتیشن

  1. ابتدا با دستور lsblk دیسک‌ و پارتیشن‌ها را بررسی کنید؛ در نمونه زیر دیسک سیستم (sda) دارای پارتیشن‌های سیستم و LVM است و نباید برای ASM استفاده شود. دیسک دوم (sdb) ظرفیت ۲۰ گیگابایت دارد و خالی است که برای ASM مناسب است.

[root@vahiddb ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk
├─sda1   8:1    0    1G  0 part /boot/efi
├─sda2   8:2    0   40G  0 part /u01
├─sda3   8:3    0   20G  0 part /
├─sda4   8:4    0   15G  0 part /var
├─sda5   8:5    0    5G  0 part /home
├─sda6   8:6    0    4G  0 part [SWAP]
└─sda7   8:7    0   15G  0 part /tmp
sdb      8:16   0   20G  0 disk
sr0     11:0    1 13.2G  0 rom

2. ایجاد پارتیشن بر روی دیسک

در صورتی که دیسک مورد نظر پارتیشن نشده باشد، با استفاده از fdisk یا parted یک پارتیشن جدید ایجاد کنید.

[root@vahiddb ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

Device does not contain a recognized partition table.

Created a new DOS disklabel with disk identifier 0xcf143bac.

Command (m for help): n

Partition type

   p   primary (0 primary, 0 extended, 4 free)

   e   extended (container for logical partitions)

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-41943039, default 2048):

Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039):

Created a new partition 1 of type 'Linux' and of size 20 GiB.

Command (m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

 

۲ – به دست آوردن شناسهٔ پایدار پارتیشن

برای پایدار کردن نام دیسک در udev باید از شناسهٔ یکتای پارتیشن استفاده کنیم. سایت‌های تخصصی تأکید می‌کنند که در udev بهتر است از UUID پارتیشن به‌جای UUID فایل سیستم یا نام گره‌ استفاده شودalexzy.blogspot.com؛ این شناسه در خروجی udevadm با عنوان ID_PART_ENTRY_UUID نمایش داده می‌شود.

  1. با دستور زیر شناسهٔ پارتیشن را بیابید (در اینجا برای پارتیشن sdb1):

 

[root@dc2 ~]# udevadm info --query=all --name=/dev/sdb1 | egrep 'ID_PART_ENTRY_UUID|ID_PART_TABLE_TYPE'
E: ID_PART_TABLE_TYPE=dos
E: ID_PART_ENTRY_UUID=26772855-01

  • مقدار ID_PART_ENTRY_UUID برای پارتیشن شما متفاوت خواهد بود. پارتیشن‌هایی که جدول MBR (dos) دارند معمولاً شناسهٔ UUID شامل شماره پارتیشن (-01) هستند. در صورت استفاده از GPT معمولاً یک شناسهٔ کامل نشان داده می‌شود.

  • در صورت نیاز می‌توانید از blkid برای مشاهدهٔ همان مقدار استفاده کنید:

blkid /dev/sdb1
/dev/sdb1: PARTUUID="26772855-01"

۳ – ایجاد قانون UDEV با شناسه پارتیشن

برای ایجاد نام ثابت لازم است یک فایل قوانین udev در مسیر /etc/udev/rules.d بسازید. منابع مختلف بیان می‌کنند که قوانین udev باید در فایلی با شمارهٔ ابتدایی مثل 99- ذخیره شوند تا ترتیب اجرا مشخص باشدfritshoogland.wordpress.com. همچنین پیشنهاد می‌شود به جای کلید NAME از SYMLINK استفاده کنید تا یک لینك ثابت در /dev ایجاد گرددfritshoogland.wordpress.com.

  1. فایل /etc/udev/rules.d/99-oracle-disk.rules را با ویرایشگر متن ایجاد کنید و محتوای زیر را وارد نمایید (مقدار UUID و نام symlink را متناسب با پارتیشن خود تغییر دهید):

ACTION=="add|change", KERNEL=="sd*", \
ENV{ID_PART_ENTRY_UUID}=="26772855-01", \
SYMLINK+="data01", OWNER="oracle", GROUP="asmadmin", MODE="0660"

    • ACTION: در این مثال رویدادهای add و change را پوشش می‌دهیم تا در زمان اضافه شدن یا تغییر دیسک، تنظیمات اعمال شود.

    • KERNEL: همهٔ دستگاه‌های نوع sd* را فیلتر می‌کند.

    • ENV{ID_PART_ENTRY_UUID}: UUID پارتیشن هدف؛ با این کلید پارتیشن به‌طور منحصربه‌فرد شناسایی می‌شودasanga-pradeep.blogspot.com.

    • SYMLINK: نامی که می‌خواهید برای پارتیشن ایجاد شود؛ در این مثال /dev/data01 ساخته می‌شود. استفاده از SYMLINK در Oracle Linux 7/8 به‌جای NAME توصیه شده استfritshoogland.wordpress.com.

    • OWNER/GROUP/MODE: مالکیت و سطح دسترسی را برای کاربر oracle و گروه asmadmin تنظیم می‌کند.

  • برای اعمال قوانین جدید، udev را دوباره بارگذاری و اجرا کنید:

udevadm control --reload-rules
udevadm trigger

۴ – بررسی نتیجه و استفاده در ASM

پس از اجرای دستورات بالا، باید لینك جدید در /dev ایجاد شده باشد:

[root@dc2 ~]# ls -l /dev/data01
lrwxrwxrwx. 1 root root 4 Nov 19 06:24 /dev/data01 -> sdb1