Перейти к основному содержанию

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

Linux

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

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

  • аппаратный сервер Dell PowerEdge R640 в NVMe конфигурации
  • ОС Ubuntu Server 18.04.4 LTS, ядро 4.15.0-101
  • 4 диска NVMe в программном RAID10, через 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 для RAID10 массива из NVMe дисков массив рассыпается. Или при попытке накатить XFS. Или при попытке удалить LVM. Или...

В логах это выглядит так:

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
Feb 26 00:00:31 cassandra02 kernel: [568172.639664] nvme nvme2: I/O 159 QID 40 timeout, aborting
Feb 26 00:00:31 cassandra02 kernel: [568172.639669] nvme nvme2: I/O 160 QID 40 timeout, aborting
Feb 26 00:00:31 cassandra02 kernel: [568172.639676] nvme nvme2: I/O 161 QID 40 timeout, aborting
Feb 26 00:00:31 cassandra02 kernel: [568172.639678] nvme nvme2: I/O 162 QID 40 timeout, aborting

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

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

  • RAID1 массив не рассыпается, отрабатывает нормально.
  • RAID10 массив на сервере 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

Дополнение

systemctl cat fstrim.timer
# /lib/systemd/system/fstrim.timer
[Unit]
Description=Discard unused blocks once a week
Documentation=man:fstrim
ConditionVirtualization=!container

[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true

[Install]
WantedBy=timers.target
systemctl cat fstrim.service
# /lib/systemd/system/fstrim.service
[Unit]
Description=Discard unused blocks
ConditionVirtualization=!container

[Service]
Type=oneshot
ExecStart=/sbin/fstrim -av

Очистка на выбранном разделе:

fstrim -v /mnt/disk

Очистка всех смонтированных разделов:

fstrim -av

Дополнение 2

Обновил ядро на  4.15.0-213-generic, вроде перестало крашиться.

apt update
apt upgrade

Теги

 

Похожие материалы

Уменьшение виртуального диска с LVM

У нас есть виртуальная машина, на ней есть диск. Диск большой, данных мало. Наша задача - сделать диск меньшего размера. На борту Logical Volume Manager (LVM). Gparted не умеет переносить данные на LVM разделах. Будем делать всё руками.

Медиа сервер MiniDLNA на Ubuntu 18

Надоело мне перекачивать на флешки фильмы, чтобы посмотреть их на телевизоре. Кто придумал размещать USB разъёмы на телевизорах сзади? Пропихивая руку в узкую щель за телевизором и пытаясь в очередной раз воткнуть куда-нибудь на ощупь флешку, я подумал: "Зачем я всем этим занимаюсь?"

Теги