Найти в Дзене

Ubuntu 18, fstrim, NVMe, mdadm raid 10 — краш массива

Поймали очень неприятный баг, приводящий к рассыпанию mdadm массива. Проблема проявилась сразу на двух серверах два раза подряд.

Проблемная конфигурация:

  • аппаратный сервер Dell PowerEdge R640 в NVMe конфигурации
  • ОС Ubuntu Server 18.04.4 LTS, ядро 4.15.0-101
  • 4 диска NVMe в программном RAID 10, через mdadm
  • mdadm 4.1~rc1-3~ubuntu18.04.4

Раз в неделю с воскресенья на понедельник в 00:00 запускается таймер fstrim.timer, который активирует службу fstrim.service, которая выполняет fstrim на всех смонтированных файловых системах на устройствах, поддерживающих операцию discard. По сути это запуск команды TRIM, которая сообщает контроллеру SSD дисков, какие блоки в файловой системе свободны.

Так вот, если NVMe диски собраны в программный массив с помощью mdadm, то просто так запускать TRIM на таких дисках нельзя, однако, операционная система совместно с mdadm умеет выполнять TRIM для таких массивов. Фигово умеет.

В общем, после команды fstrim для RAID 10 массива из NVMe дисков массив рассыпается, в логах это выглядит так:

Feb 26 00:00:01 cassandra02 systemd[1]: Starting Discard unused blocks...
Feb 26 00:00:31 cassandra02 kernel: [568172.639465] nvme nvme3: I/O 744 QID 40 timeout, aborting
Feb 26 00:00:31 cassandra02 kernel: [568172.639472] nvme nvme3: I/O 745 QID 40 timeout, aborting
Feb 26 00:00:31 cassandra02 kernel: [568172.639475] nvme nvme3: I/O 746 QID 40 timeout, aborting
Feb 26 00:00:31 cassandra02 kernel: [568172.639476] nvme nvme3: I/O 747 QID 40 timeout, aborting

Из массива вылетает один или два диска, массив или деградирует или ещё какое-то время работает только на чтение, если вылетел только один диск. После перезагрузки массив восстанавливается, синхронизируется, но файловая система может быть повреждена, могут быть потери в данных.

При этом замечено:

  • RAID 1 массив не рассыпается, отрабатывает нормально.
  • RAID 10 массив на сервере HPE Proliant DL360 Gen10 с ядром 4.15.0-175 не падает (пока)

Явно проблема не аппаратная. Вероятно, лечится обновлением ядра. Я попытался найти такую же проблему в Интернете, но нашёл только похожие.

https://www.spinics.net/lists/kernel/msg3765302.html

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1907262

https://bugzilla.kernel.org/show_bug.cgi?id=202665

https://unix.stackexchange.com/questions/456628/nvme-fstrim-causing-crash-on-linux-disabling-with-systemctl-doesnt-help

Как временное решение: остановка таймера:

systemctl stop fstrim.timer
systemctl disable fstrim.timer

Источник:

Ubuntu 18, fstrim, NVMe, mdadm raid 10 — краш массива | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.