Отключение автоактивации swap-раздела под systemd
Настраивая шифрование swap-раздела на новом ноуте, столкнулся с проблемой:
попытка замапить swap-раздел /dev/sda4 на /dev/mapper/swap при помощи cryptsetup
отваливается с ошибкой Device or resource busy
. Кто занял раздел? Что делать?
Пошел разбираться. Обнаружил, что /dev/sda4 уже активирован обычным способом (без шифрования),
о чем недвусмысленно сообщает вывод команды cat /proc/swaps
. При этом вручную я его
не активировал, в fstab не прописывал. Но каждый раз после перезагрузки swap-раздел
магическим образом оказывается активированным.
Виновником оказался systemd-gpt-auto-generator, который при загрузке сканирует таблицу разделов диска, опознает некоторые стандартные типы разделов, в том числе swap, и создает для них systemd units, которые тут же и стартуют. По задумке, этот генератор позволяет в простых случаях вообще не заполнять fstab, все нужные разделы найдутся и подмонтируются автоматически. Однако для настройки зашифрованного swap-раздела это скорее помеха, чем помощь.
Итак, как же отключить автоматическую активацию swap-раздела? На разнообразных форумах и багтрекерах, где проблема уже обсуждалась, предлагают три решения:
-
выпилить systemd-gpt-auto-generator к чертям
-
замаскировать создаваемый генератором unit-файл (
systemctl mask dev-sda4.swap
) -
сменить тип swap-раздела с 8200 на какой-нибудь другой
Недостаток первого решения — выпиливание придется повторять каждый раз при обновлении systemd. Недостаток второго — манипуляцию придется повторять после переустановки ОС или изменения нумерации разделов. Третье решение таких недостатков не имеет, но все же слишком похоже на костыль.
К счастью, покопавшись в исходниках systemd-gpt-auto-generator, удалось найти еще один вариант, который меня полностью устроил. Оказывается, помимо типа, у каждого раздела в GPT есть набор флагов, один из которых называется «do not automount». И генератор смотрит на этот флаг, пропуская помеченные им разделы.
Флаг можно установить при помощи gdisk. В меню gdisk выбираем
x extra functionality (experts only)
Далее
a set attributes
Вводим номер раздела и номер устанавливаемого бита в поле флагов — 63:
Partition number (1-7): 4 Known attributes are: 0: system partition 1: hide from EFI 2: legacy BIOS bootable 60: read-only 62: hidden 63: do not automount Attribute value is 0000000000000000. Set fields are: No fields set Toggle which attribute field (0-63, 64 or <Enter> to exit): 63
После этого сохраняем таблицу разделов
w write table to disk and exit
и, перезагрузившись, убеждаемся, что swap-раздел больше не активируется.
Дополнение от 2015-04-08. В systemd 219 появилась возможность отключать
генераторы, создав пустой файл с именем генератора в директории
/etc/systemd/system-generators
.
mkdir /etc/systemd/system-generators ln -s /dev/null /etc/systemd/system-generators/systemd-gpt-auto-generator
Ссылки: багрепорт, обсуждение на форуме ArchLinux.