Как сказать моему ядру не размещать внешние диски перед внутренними?

Решение :

Запустите терминал (alt + ctrl + F1, если у вас установлен только gnome-terminal ), но помните, что это не навсегда, поэтому после перезагрузки вам нужно будет сделать это снова:

dbus-update-activation-environment --all

Или решить проблему навсегда (при условии, что у вас отсутствует сценарий в вашем /etc/X11/xinit/xinitrc.d ] см. объяснение для получения более подробной информации) загрузите в ~ / .xinitrc соответствующие сценарии:

if [ -d /etc/X11/xinit/xinitrc.d ] ; then
  for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

Обратите внимание, что это будет работать, только если у вас будет правильный сценарий в / etc / X11 / xinit / xinitrc.d

Объяснение :

В моем случае проблема заключалась в отсутствии переменной DISPLAY для служб сеанса D-Bus. Из-за этого я не мог запустить гном-концевой и наутилиус .

Я использую Arch Linux с Slim и несколько настроенных .xinitrc . Из-за этого я пропустил загрузку дополнительных материалов из /etc/X11/xinit/xinitrc.d/ .В случае Arch Linux существует сценарий с именем 50-systemd-user.sh , который заботится о настройке надлежащей среды для сеанса D-Bus. В моем случае это выглядит так:

#!/bin/sh

systemctl --user import-environment DISPLAY XAUTHORITY

if which dbus-update-activation-environment >/dev/null 2>&1; then
    dbus-update-activation-environment DISPLAY XAUTHORITY
fi

Насколько я понимаю, переменные DISPLAY и XAUTHORITY импортируются в блок среды systemd manager, а также в dbus-daemon - -session , которые используют эти переменные при активации сеансовых служб. Некоторые приложения (это также зависит от того, как они вызываются) выходят из строя из-за отсутствия этих переменных при запуске.

1
06.05.2018, 23:52
1 ответ

Имена /dev/sd*устройств назначаются в порядке поступления -в порядке поступления и -обслуживания по умолчанию при инициализации драйверов контроллера памяти. Если у вас есть несколько разных контроллеров памяти, вы можете управлять их порядком загрузки.

Если это невозможно, пора научиться писать правила udev. Это не так сложно.

Сначала запустите udevadm info -q all -a -n /dev/sda. В нем будут перечислены все атрибуты, которые вы можете использовать для идентификации диска /dev/sdaдля udev. Команда запустится с дискового устройства /dev/sda, а затем пойдет вверх по дереву устройств, каждый раз выводя блок атрибутов. Вы можете использовать атрибуты из первого блока и еще одного блока по вашему выбору .

Первый блок всегда является фактическим блочным устройством. У него, как правило, не слишком много полезных атрибутов, но мы можем использовать атрибут SUBSYSTEM, чтобы гарантировать, что наше правило будет срабатывать только для фактического блочного устройства. Таким образом, первым условием для нашего правила udev будет SUBSYSTEM=="block".

Второй блок для типичного диска SATA содержит информацию на уровне драйвера sd. У него есть ATTRS{model}и/или ATTRS{wwid}, которые можно использовать для уникальной идентификации этого конкретного диска. ATTRS{wwid}может быть длинной строкой с большим количеством пробелов, но она должна включать серийный номер или другой уникальный идентификатор диска -, который будет лучшим кандидатом. Если серийный номер окружен пробелами или другими неважными строками, вы можете сопоставить его следующим образом:

ATTRS{wwid}=="*<serial number>*"

Как только будет создано достаточно условий для уникальной идентификации вашего дискового устройства, вы сможете решить, что с ним делать.Лучшим решением, вероятно, будет использование SYMLINK+="custom_name"для создания ссылки, которая автоматически указывает на фактическое имя устройства, каким бы оно ни было на этот раз.

Вы также можете использовать что-то вроде NAME="sda", чтобы жестко закодировать фактическое имя устройства, но если вы это сделаете, вам лучше создать такие правила для всех ваших текущих дисков, чтобы диск, который еще не имеет пользовательского правило udev не получит перекрывающееся назначение. (Если вы сделаете это, вам также следует обновить свой /etc/fstab, чтобы он соответствовал новым именам, и знать, как загружаться с внешнего носителя, чтобы исправить ситуацию в случае опечатки. В этом отношении символические ссылки более безопасны.)

Таким образом, для диска с серийным номером S12345 и строкой модели "HyperDisk "вы можете назначить ему псевдоним /dev/dsk_sysс таким правилом, как :(примечание :, если udevadm infoсообщает, что имеет завершающие пробелы, вы должны либо включить подстановочный знак, либо включить их в строку правил точно так, как указано.)

SUBSYSTEM=="block", ATTRS{model}=="HyperDisk   ", ATTRS{wwid}="*S12345*", SYMLINK+="dsk_sys"

Поместите свои пользовательские правила, например, в. /etc/udev/rules.d/custom.rules, затем перезагрузите (или, возможно, запустите partprobe /dev/sda), и теперь у вас должна быть символическая ссылка /dev/dsk_sys, указывающая на этот диск -, и она будет продолжать указывать на этот диск, даже если имя /dev/sd*изменится.

3
27.01.2020, 23:23

Теги

Похожие вопросы