Мой юниксвейный mnt. Часть 1: Системный диск, имена и группы.

Присказка.

Давным-давно, когда дисковых устройств было мало, а их имена были незыблемы, был fstab, всё было в нём, и этого было достаточно.

Винчестер на IDE Primary Master, скажем, был всегда железно /dev/hda, его разделы, к примеру, /dev/hda1 и /dev/hda5, CD-привод на IDE Secondary Slave был /dev/hdd, флопик /dev/fd0 – всё это писалось в простой и понятный fstab, и это было хорошо!

А потом появились флешки, для которых уже ничего нельзя прописать заранее, а со временем даже имена стационарных дисков утратили постоянство и вышли из-под контроля.

Тем временем, в линукс приходило всё больше выходцев из форточного лагеря, и проблемы стали решаться всё более форточными способами, когда снаружи как бы красивая картинка, а под ней – огромное нагромождение кода, нечитаемых конфигов и API вместо команд.

И теперь мы имеем то, что имеем: в конфиг загрузчика и fstab пишут жуткие автогенерируемые абракадабры, а съёмные носители монтируются через udisks (+polkit с псевдоавторизацией, + ещё чёрт знает что и сбоку бантик) – монструозное детище проекта freedesktop, пустившее корни гораздо ниже заявленного в названии рабочего стола, и напрочь игнорирующее юниксвей.

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

1.1. Системный диск и имена устройств

Если имена разделов диска стали непостоянными, можно использовать постоянные. Чтобы не засорять конфиги повторяющимися (или уникальными – что ещё хуже!) абракадабрами, я один раз вписываю ID диска в правило udev, а дальше использую простые симлинки вида /dev/hd на диск, /dev/hd1, hd2 и т.д. на его разделы:
/etc/udev/rules.d/61-nickname-disk.rules
KERNEL!="sd*", GOTO="nick_end"
ACTION!="add|change", GOTO="nick_end"

# Вписываем сюда нужные диски, по строчке с ID и "ником" на каждый:
ENV{ID_SERIAL}=="ST3160813AS_9YP038W1", ENV{NICK}="hd", GOTO="nick_end"

LABEL="nick_end"
/etc/udev/rules.d/62-disk-symlinks.rules
ENV{NICK}=="", GOTO="sym_end" # Всем устройствам, имеющим "ник"
SYMLINK+="$env{NICK}%n" # делаем симлинки вида hd или hd1

# Если у раздела есть метка, добавляем комбинированный симлинк:
ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="$env{NICK}_$env{ID_FS_LABEL_ENC}"
# ник и метка вместе, например /dev/hd_root , hd_home, hd_swap

LABEL="sym_end"
Если дисков больше одного, строчки с ID можно писать друг за другом, меняя в них ID, и подставляя вместо hd любые подходящие имена.

После этого можно спокойно писать в fstab имена вида /dev/hd* , в том числе и комбинированные "ник_метка", не зависящие от нумерации разделов, но с привязкой к диску.
Чтобы использовать их при загрузке в параметрах ядра root= и resume= , достаточно добавить это правило в initramfs, вписав
FILES="/etc/udev/rules.d/61-nickname-disk.rules  /etc/udev/rules.d/62-disk-symlinks.rules"
в mkinitcpio.conf (и разумеется, запустить mkinitcpio -P).

1.2. Устройства, права доступа и группы.

Незыблемость системного диска восстановлена, но что делать с флешками и прочими непостоянными девайсами?
Для начала – добавим их в группу storage. Все, что не CD, и не получили постоянных имён как системные, не разбираясь с зоопарком sd*, mspblk*, mmcblk* и т.д. – просто все остальные. Вот это правило udev:
/etc/udev/rules.d/82-storage.rules
# block devices only
SUBSYSTEM!="block", GOTO="no_storage"
# no loop
KERNEL=="loop*", GOTO="no_storage"
# no floppy
KERNEL=="fd*", GOTO="no_storage"
# no CD/DVD
KERNEL=="sr*", GOTO="no_storage"
# no selected
ENV{NICK}=="?*", GOTO="no_storage"

GROUP="storage"

LABEL="no_storage"

Теперь достаточно добавить себя в группу storage, чтобы получить под пользователем полный доступ к содержимому всех съёмных дисков и флешек стандартными утилитами fdisk, cfdisk, mkfs, fsck, и т.д., и не придумывать для всего этого дурацкие велосипедные действия, как это сделано в udisks.

Единственное, что остаётся – монтирование. О нём – в продолжении :)

Продолжение:
Часть 2: флешки, диски и прочие карточки.
Часть 3: укрощение сидишника и немного GUI.
Т.е., вместо того, чтобы написать идентификатор раздела в /etc/fstab и забыть, нужно воспользоваться шаманскими заклинаниями.

Если используется KDE/GNOME, то монтировать в конфигурационных файлах надо только то, без чего она не запустится, остальное графическая оболочка примонтирует без заклинаний в консоли.
elsonator, вы плохо прочли название блога, "шаманские заклинания" здесь абсолютно ни к чему. Это автоматическое монтирование без пложения лишних сущностей, о чем и сказано в заглавии: "юниксвэй". И заклинаний в консоли не надо, надо мозги иметь тем, кто сопровождает юдэв.
elsonator, вместо того, чтобы писать в fstab и загрузчик МНОГО идентификаторов для НЕСКОЛЬКИХ разделов, я пишу ОДИН идентификатор ДИСКА в правило udev, которое давно уже написано.

Главное – вписать идентификатор в правильное место, где он сразу определяет все разделы диска, и для fstab, и для загрузчика, и одновременно позволяет отличить системный диск ото всех остальных, которые вторым правилом автоматически попадают в группу storage, о монтировании которых речь пойдёт дальше.

И действительно, речь здесь идёт НЕ о "монтировании графической оболочкой", а как раз о монтировании БЕЗ её помощи.
как по мне, это все в наше время не имеет никакого практического смысла. а просто ностальгия о прошлом...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja, ты не мог бы уточнить, что именно подразумевал под "это все"? Udev? Или весь пригревший его systemd, так горячо тобой любимый? Апологет системдэ назвал его ностальгией о прошлом))):Р
ты не мог бы уточнить, что именно подразумевал под "это все"?
Юниксвей. В качестве "а что делать, если всякие современности навернутся или станут непригодными к использованию" годится, а так чтобы постоянно пользоваться, когда можно ткнуть иконку в фм и не думать - нет.
Я не хочу помнить, сколько у меня разделов на диске и какие у них там номера. Создал, указал точку монтирования - работает.
блин, а я консоль открываю каждый раз и монтирую))
за статью пасибо, по меньшей мере полезно в плане освоения правил удава
PGP 0x31361F01
arcanisrepo
arcanis
блин, а я консоль открываю каждый раз и монтирую))
за статью пасибо, по меньшей мере полезно в плане освоения правил удава
В Wiki есть решение на этот случай.
 
Зарегистрироваться или войдите чтобы оставить сообщение.