Настройка устройств хранения используя уникальный WWID

Имена устройств не всегда гарантированно присоединяются к одним и тем же физическим дискам после перезагрузки. В некоторых случаях имена дисков по умолчанию могут быть переупорядочены, так что /dev/sdX и /dev/sdY могут указывать на разные дисковые устройства после перезагрузки. Изменение порядка дисков может произойти, если на вашем сервере установлено более одного контроллера дисков SATA, SCSI или IDE. Порядок, в котором добавляются соответствующие узлы устройств, произвольный. Существует четыре различных схемы постоянного именования дисков: by-label, by-uuid, by-id (WWID) и by-path.

В этой статье я расскажу как написать правило UDEV для смены типа I/O планировщика на основе привязки к WWID диска.

Исходные данные: ОС Oracle Linux 7;
Задача: Активация i/o планировщика mq-deadline для определенных дисков на основе WWID

WWID (World Wide Identifier) — это уникальный идентификатор устройства и он никогда не меняется в отличии от пути блочного устройства (/dev/sdX или /dev/sdY).

Определить WWID можно достаточно легко с помощью команды ls

# ls -al /dev/disk/by-id/
total 0
drwxr-xr-x 2 root root 400 Dec 17 18:58 .
drwxr-xr-x 8 root root 160 Dec 17 18:58 ..
lrwxrwxrwx 1 root root   9 Dec 22 21:59 scsi-3600062b205512f8027668785bc704b31 -> ../../sda
lrwxrwxrwx 1 root root  10 Dec 22 21:59 scsi-3600062b205512f8027668785bc704b31-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Dec 22 21:59 scsi-3600062b205512f8027668785bc704b31-part2 -> ../../sda2
lrwxrwxrwx 1 root root  10 Dec 22 21:59 scsi-3600062b205512f8027668785bc704b31-part3 -> ../../sda3
lrwxrwxrwx 1 root root   9 Dec 22 21:59 scsi-3600062b205512f80276687bf11fc0cc9 -> ../../sdb
lrwxrwxrwx 1 root root  10 Dec 22 21:59 scsi-3600062b205512f80276687bf11fc0cc9-part1 -> ../../sdb1
lrwxrwxrwx 1 root root   9 Dec 22 21:59 wwn-0x600062b205512f8027668785bc704b31 -> ../../sda
lrwxrwxrwx 1 root root  10 Dec 22 21:59 wwn-0x600062b205512f8027668785bc704b31-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Dec 22 21:59 wwn-0x600062b205512f8027668785bc704b31-part2 -> ../../sda2
lrwxrwxrwx 1 root root  10 Dec 22 21:59 wwn-0x600062b205512f8027668785bc704b31-part3 -> ../../sda3
lrwxrwxrwx 1 root root   9 Dec 22 21:59 wwn-0x600062b205512f80276687bf11fc0cc9 -> ../../sdb
lrwxrwxrwx 1 root root  10 Dec 22 21:59 wwn-0x600062b205512f80276687bf11fc0cc9-part1 -> ../../sdb1

Здесь мы видим, что на сервере есть 2 диска: /dev/sda и /dev/sdb
Я точно знаю, что диск /dev/sda — это SAS диск т.к. на нем находятся 3 раздела с ОС, а диск /dev/sdb — это SSD диск для базы данных.
Но проблема в том, что иногда имена устройств меняются и /dev/sda становится SSD диском, а /dev/sdb — SAS.

Мне необходимо настроить определенные параметры для каждого диска, в частности queue/scheduler, queue/rotational и read_ahead_kb для SSD диска.

В статье Установка нового ядра UEK на Oracle Linux 7.6 и активация I/O Scheduler mq-deadline или kyber я описывал как создать правило UDEV, то там шла привязка к имени устройства.

Чтобы узнать WWID для /dev/sda выполните:

udevadm info --attribute-walk --name=/dev/sda | grep wwid

Результат:

    ATTRS{wwid}=="naa.600062b205512f8027668785bc704b31"

Чтобы узнать WWID для /dev/sdb выполните:

udevadm info --attribute-walk --name=/dev/sdb | grep wwid

Результат:

    ATTRS{wwid}=="naa.600062b205512f80276687bf11fc0cc9"

Далее мы пропишем в файле /etc/udev/rules.d/60-schedulers.rules правила для UDEV с привязкой к WWID (не копируйте мои правило не поняв что в нем меняется!):

ACTION=="add|change", SUBSYSTEM=="block", ATTRS{wwid}=="naa.600062b205512f8027668785bc704b31", ATTR{queue/rotational}="1", ATTR{queue/scheduler}="mq-deadline"
ACTION=="add|change", SUBSYSTEM=="block", ATTRS{wwid}=="naa.600062b205512f80276687bf11fc0cc9", ATTR{bdi/read_ahead_kb}="16384", ATTR{queue/rotational}="0", ATTR{queue/scheduler}="mq-deadline"

У нас 2 правила: в первой строке мы меняем 2 параметра для /dev/sda — это queue/rotational и queue/scheduler, во второй строке мы меняем 3 параметра для /dev/sdb — это read_ahead_kb, queue/rotational и queue/scheduler.

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

udevadm control --reload-rules
udevadm trigger --type=devices --action=change

Теперь проверим установленные параметры:

# cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
# cat /sys/block/sda/queue/rotational
1
# cat /sys/block/sda/queue/read_ahead_kb
128

# cat /sys/block/sdb/queue/scheduler
[mq-deadline] kyber bfq none
# cat /sys/block/sdb/queue/rotational
0
# cat /sys/block/sdb/queue/read_ahead_kb
16384

Как мы видим, нужные параметры применились к нужным дискам по их WWID.

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.


Подписаться
Уведомить о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x