Завершение работы Systemd зависает на 90 секунд из-за luks/btrfs

Вопрос или проблема

С тех пор как я настроил LUKS с BTRFS RAID1 между двумя дисками NVMe на Debian 12, процесс завершения работы занимает слишком много времени, около минуты и половины.

Мне пришлось записать видео экрана завершения работы перед отключением, что привело меня к виновнику – dm/crypt не размонтирован.

Я понимаю, что наличие “/” на разблокированных файловых системах BTRFS должно усложнять процесс размонтирования во время завершения работы, но ожидание такого долгого времени не может быть единственным способом.

Мне было бы не так уж важно, как предполагают другие сообщения по этой проблеме, если бы не то, что ждать так долго перед завершением работы – это раздражает, а ожидание такого времени перед перезагрузкой – это разочаровывает.
Это также ноутбук, так что ожидание такого времени перед тем, как убрать его в сумку, является проблемой.
Думаю, это должно так происходить, я не верю, что люди с LUKS и BTRFS на самом деле ждали так долго перед перезагрузкой/завершением работы??

  1. В моей конкретной конфигурации дисков есть ли какой-либо риск, что эти устройства не будут размонтированы должным образом?
  2. Есть ли способ избежать большого задержки при завершении работы? Я попытался изменить таймер watchdog systemd на 3 секунды, но это не повлияло на время завершения работы.
  3. Почему systemd уже не обрабатывает это? В нормальной системе “/” находился бы на файловой системе EXT4, которую также необходимо было бы размонтировать при завершении работы?

lsblk

NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme0n1         259:0    0 931.5G  0 disk
├─nvme0n1p1     259:2    0   949M  0 part  /boot/efi
└─nvme0n1p2     259:3    0 930.6G  0 part
  └─crypt_nvme0 254:0    0 930.6G  0 crypt /
nvme1n1         259:1    0 931.5G  0 disk
├─nvme1n1p1     259:4    0   949M  0 part
└─nvme1n1p2     259:5    0 930.6G  0 part
  └─crypt_nvme1 254:1    0 930.6G  0 crypt

cat /etc/fstab

# MAIN
# Основной EFI раздел - вспомогательный ниже
UUID=A490-28B5                            /boot/efi             vfat    umask=0077,noexec,nodev,nosuid  0       1

# BTRFS RAID 1 (UUID применяется к обоим дискам)
UUID=15767954-1ec3-44aa-b1e3-b890ca937277 /             btrfs   defaults,subvol=@,ssd,noatime,space_cache=v2,commit=120,compress=zstd 0 0

cat /etc/crypttab

crypt_nvme0 UUID=63780057-f91e-426d-9be3-84383fd9b534 none luks
crypt_nvme1 UUID=c434a425-6552-4036-ae34-4f8c1c728d9a none luks

журналы journald перед следующей загрузкой:

Nov 17 15:35:36 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:36 debian systemd-cryptsetup[5094]: Устройство crypt_nvme0 все еще используется.
Nov 17 15:35:36 debian systemd-cryptsetup[5094]: Не удалось деактивировать: Устройство или ресурс заняты
Nov 17 15:35:36 debian systemd[1]: systemd-cryptsetup@crypt_nvme0.service: Не удалось завершить с результатом 'exit-code'.
Nov 17 15:35:36 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:37 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:37 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:37 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:37 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:37 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:38 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:38 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:38 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:38 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:38 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:39 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:39 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:39 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:39 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:39 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:40 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:40 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:40 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:40 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:40 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:41 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:41 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:41 debian systemd-cryptsetup[5080]: device-mapper: remove ioctl on crypt_nvme1  failed: Device or resource busy
Nov 17 15:35:41 debian systemd-cryptsetup[5080]: Устройство crypt_nvme1 все еще используется.
Nov 17 15:35:41 debian systemd-cryptsetup[5080]: Не удалось деактивировать: Устройство или ресурс заняты
Nov 17 15:35:41 debian systemd[1]: systemd-cryptsetup@crypt_nvme1.service: Не удалось завершить с результатом 'exit-code'.
Nov 17 15:35:41 debian kernel: watchdog: watchdog0: watchdog did not stop!

Последние сообщения перед отключением:

systemd-shutdown[1]: Не удалось отсоединить DM /dev/dm-1: Устройство или ресурс заняты
systemd-shutdown[1]: Не удалось отсоединить DM /dev/dm-0: Устройство или ресурс заняты
watchdog: watchdog0: watchdog did not stop!
systemd-shutdown[1]: Не удалось завершить DM устройства, игнорируем.

ls -l /dev/mapper/

total 0
crw------- 1 root root 10, 236 Nov 17 15:36 control
lrwxrwxrwx 1 root root       7 Nov 17 15:36 crypt_nvme0 -> ../dm-0
lrwxrwxrwx 1 root root       7 Nov 17 15:36 crypt_nvme1 -> ../dm-1

После перезагрузки службы шифрования systemd:

● blockdev@dev-mapper-crypt_nvme0.target - Подготовка блочного устройства для /dev/mapper/crypt_nvme0
     Loaded: loaded (/lib/systemd/system/[email protected]; static)
     Active: active since Sun 2024-11-17 15:36:35 PST; 5min ago
       Docs: man:systemd.special(7)

● systemd-cryptsetup@crypt_nvme1.service - Настройка криптографии для crypt_nvme1
     Loaded: loaded (/etc/crypttab; generated)
     Active: active (exited) since Sun 2024-11-17 15:36:35 PST; 5min ago
       Docs: man:crypttab(5)
             man:systemd-cryptsetup-generator(8)
             man:[email protected](8)
    Process: 896 ExecStart=/lib/systemd/systemd-cryptsetup attach crypt_nvme1 /dev/disk/by-uuid/c434a425-6552-4036-ae34-4f8c1c728d9a none luks (code=exited, status=0/SUCCESS)
   Main PID: 896 (code=exited, status=0/SUCCESS)
        CPU: 5ms

Nov 17 15:36:35 debian systemd-cryptsetup[896]: Объем crypt_nvme1 уже активен.

● system-systemd\x2dcryptsetup.slice - Срезы единиц криптосистемы
     Loaded: loaded (/lib/systemd/system/system-systemd\x2dcryptsetup.slice; static)
     Active: active since Sun 2024-11-17 15:36:34 PST; 5min ago
       Docs: man:[email protected](8)
      Tasks: 0
     Memory: 828.0K
        CPU: 10ms
     CGroup: /system.slice/system-systemd\x2dcryptsetup.slice

Nov 17 15:36:35 debian systemd-cryptsetup[896]: Объем crypt_nvme1 уже активен.
Nov 17 15:36:35 debian systemd-cryptsetup[895]: Объем crypt_nvme0 уже активен.
Notice: journal has been rotated since unit was started, output may be incomplete.

● systemd-cryptsetup@crypt_nvme0.service - Настройка криптографии для crypt_nvme0
     Loaded: loaded (/etc/crypttab; generated)
     Active: active (exited) since Sun 2024-11-17 15:36:35 PST; 5min ago
       Docs: man:crypttab(5)
             man:systemd-cryptsetup-generator(8)
             man:[email protected](8)
    Process: 895 ExecStart=/lib/systemd/systemd-cryptsetup attach crypt_nvme0 /dev/disk/by-uuid/63780057-f91e-426d-9be3-84383fd9b534 none luks (code=exited, status=0/SUCCESS)
   Main PID: 895 (code=exited, status=0/SUCCESS)
        CPU: 5ms

Nov 17 15:36:35 debian systemd-cryptsetup[895]: Объем crypt_nvme0 уже активен.

● cryptsetup.target - Локальные зашифрованные тома
     Loaded: loaded (/lib/systemd/system/cryptsetup.target; static)
     Active: active since Sun 2024-11-17 15:36:35 PST; 5min ago
       Docs: man:systemd.special(7)

● blockdev@dev-mapper-crypt_nvme1.target - Подготовка блочного устройства для /dev/mapper/crypt_nvme1
     Loaded: loaded (/lib/systemd/system/[email protected]; static)
     Active: active since Sun 2024-11-17 15:36:35 PST; 5min ago
       Docs: man:systemd.special(7)

ls -l /dev/disk/by-uuid/

total 0
lrwxrwxrwx 1 root root 10 Nov 17 15:36 15767954-1ec3-44aa-b1e3-b890ca937277 -> ../../dm-0
lrwxrwxrwx 1 root root 15 Nov 17 15:36 63780057-f91e-426d-9be3-84383fd9b534 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 15 Nov 17 15:36 A490-28B5 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Nov 17 15:36 c434a425-6552-4036-ae34-4f8c1c728d9a -> ../../nvme1n1p2
lrwxrwxrwx 1 root root 15 Nov 17 15:36 D2D5-D83C -> ../../nvme1n1p1

mount | grep nvme

/dev/mapper/crypt_nvme0 on / тип btrfs (rw,noatime,compress=zstd:3,ssd,space_cache=v2,commit=120,subvolid=256,subvol=/@)
/dev/nvme0n1p1 на /boot/efi тип vfat (rw,nosuid,nodev,noexec,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)

Ответ или решение

Система управления инициализацией systemd сталкивается с проблемами при завершении работы на системе, использующей LUKS (Linux Unified Key Setup) и файловую систему BTRFS в режиме RAID 1. Анализируя ситуацию, можно выделить несколько ключевых аспектов, которые могут объяснить задержки при завершении работы и предложить возможные решения.

Проблема

Как вы указали, процесс завершения работы вашей системы занимает около 90 секунд из-за того, что шифрованные устройства LUKS не размонтируются корректно. Из приведенных логов видно, что systemd не удается отключить устройства криптографической файловой системы, что вызывает основную задержку.

Риски неправильного размонтирования

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

Возможные решения

  1. Настройка тайм-аутов systemd:
    Вы уже пробовали изменять тайм-аут для watchdog timer, однако, в данном контексте, необходимо удостовериться, что значения тайм-аутов для соответствующих юнитов в systemd установлены корректно.
    Вы можете изменить настройки в файле /etc/systemd/system.conf или в специфичных для устройства файлах (/etc/systemd/system/systemd-cryptsetup@crypt_nvme0.service и /etc/systemd/system/systemd-cryptsetup@crypt_nvme1.service), установив параметр TimeoutStopSec=5s или другой подходящий тайм-аут.

  2. Проверка зависимостей:
    Важно удостовериться, что трудности, с которыми сталкивается systemd, не вызваны зависимостями других активных сервисов. Используйте команду systemctl list-dependencies для проверки зависимостей. Убедитесь, что службы, использующие зашифрованные устройства, правильно настроены на завершение работы.

  3. Оптимизация файла fstab:
    Рассмотрите возможность изменения опций монтирования в вашем /etc/fstab, например, добавьте опцию nofail к строке с BTRFS. Это может помочь избежать зависаний, если BTRFS не отвечает в момент, когда systemd пытается его размонтировать.

  4. Обновление systemd и ядра:
    Периодически проверяйте наличие обновлений для вашей системы, особенно для component, таких как ядро Linux и systemd. Обновления могут содержать исправления для известных проблем.

  5. Скрипты окончания работы:
    Можно написать кастомный скрипт, который будет обрабатывать завершение работы устройств LUKS, чтобы обеспечить их корректное отключение. Поместите скрипт в /etc/systemd/system/ и свяжите его с соответствующими юнитами.

Почему systemd не решает эту проблему по умолчанию?

Система управления init, как systemd, должна учитывать широкий спектр настроек и конфигураций. Использование LUKS с BTRFS на уровне RAID 1 добавляет уровень сложности, который может не учитываться в предопределенных настройках. Поскольку различные файловые системы имеют свои уникальные особенности, systemd не всегда может предсказать поведение всех возможных конфигураций.

Таким образом, решение проблемы может потребовать тестирования и настройки, чтобы удостовериться в корректной работе при завершении работы системы.

Заключение

Обеспечение быстрого завершения работы системы с использованием LUKS и BTRFS может стать сложной задачей, особенно на устройствах с RAID 1. Настройки тайм-аутов, зависимостей служб и оптимизация конфигураций могут помочь решить эту проблему. Проведение регулярных обновлений системы также может способствовать устранению проблем в долгосрочной перспективе.

Оцените материал
Добавить комментарий

Капча загружается...