Настройка устройств хранения используя уникальный 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.

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


Оставить комментарий

avatar
1000

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

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