LINUX.ORG.RU

systemd unit и русские буквы в имени каталога

 ,


0

2

Надо создать systemd mount юнит, монтирующий диск в каталог, в имени которого есть русские буквы. Типа /home/maksim/Видео.

С каталогом типа /home/maksim/video проблем нет, создается юнит с именем home-maksim-video.mount и соответствующим содержимым,

# systemctl enable home-maksim-video.mount
# systemctl start home-maksim-video.mount

и вуаля...

А вот русских букв systemd не понимает. Теоретически должно помочь

systemd-escape -p --suffix=mount /home/maksim/Видео

которое выдает

home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount

Даем юниту имя, сгенерированное выше, а дальше начинается фигня:

# systemctl start home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount
Failed to start home-maksim-xd0x92xd0xb8xd0xb4xd0xb5xd0xbe.mount: Unit home-maksim-xd0x92xd0xb8xd0xb4xd0xb5xd0xbe.mount is not loaded properly: Invalid argument.

при этом sytemctl status выдает следующее:

# systemctl status home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount


● home-maksim-xd0x92xd0xb8xd0xb4xd0xb5xd0xbe.mount - 
   Loaded: error (Reason: Invalid argument)
   Active: inactive (dead)
    Where: /home/maksim/\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe
     What: /dev/sdb1

systemd[1]: home-maksim-xd0x92xd0xb8xd0xb4xd0xb5xd0xbe.mount: Where= setting doesn't match unit name. Refusing.
 

причем независимо от содержимого Where:, либо как выше, либо /home/maskim/Видео.

Есть какой-то способ это победить ? Гугл не помог....


вообще рекомендуемый способ монтирования в systemd - это прописать все что нужно в fstab. Оно его распарсит и создаст нужные юниты автоматически, юникод поддерживается

anonymous
()

А «имя, сгенерированное выше» ты как юниту давал-то? Те обратные косые, их надо или повторить в шелле, или имя в одинарные кавычки брать. Судя по «Failed to start home-maksim-xd0x92xd0xb8xd0xb4xd0xb5xd0xbe.mount» у тебя они в имя-то и не попали вовсе.

TeopeTuK ★★★★
()

Твои обратные слеши съедаются оболочкой. Либо экранируй их, либо бери строку в одинарные кавычки.

intelfx ★★★★★
()
Ответ на: комментарий от anonymous

прописать все что нужно в fstab

Да, это я знаю, но столкнулся с проблемой. Всё свелось к тому, что при монтировании через fstab иконка диска на рабочем столе есть, а при монтировании вручную - нет. Вот и ищу способ монтирования НЕ через fstab, но автоматически :)

Вообще, пытаюсь понять разницу между монтированием через fstab и mount...

McSeam
() автор топика

Что такое русские буквы? Это безграмотно. Не существует никаких русских букв.

Bruce_Lee ★★
()
Ответ на: комментарий от TeopeTuK

А «имя, сгенерированное выше» ты как юниту давал-то?

Это не я давал, а специальная приблуда под названием systemd-escape. Предназначенная для генерации имен юнитов из путей с пробелами и другими «левыми» символами.

McSeam
() автор топика
Ответ на: комментарий от intelfx

бери строку в одинарные кавычки

По идее этот юнит должен выполняться автоматически, запускать его должен не я через systemctl start bla-bla-bla, а systemd при загрузке системы...

McSeam
() автор топика
Ответ на: бери строку в одинарные кавычки от McSeam

Понимаешь ли. Чтобы systemd запускал его при загрузке, тебе нужно его туда добавить. А вообще, пользуйся fstab.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

тебе нужно его туда добавить

Осталось понять - как. С латиницей проблем нет, с кириллицей - косяк...

А вообще, пользуйся fstab.

См. выше. Через fstab не получается. Раньше работало, теперь нет. Что-то поломали...

McSeam
() автор топика

тебе уже ответили в чём проблема, вот такое у тебя название юнита:
home-maksim-xd0x92xd0xb8xd0xb4xd0xb5xd0xbe.mount
а должно быть
home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount
видишь разницу?

systemctl start home-[нажми тут tab и systemd тут автоматом проставит \\xd0\\x92 и тд]

bass ★★★★★
()
Ответ на: комментарий от bass

видишь разницу?

Да, спасибо, разницу я вижу. Собственно, уже в предыдущих сообщениях есть правильное направление - экранирование. Было непонятно, как это сделать, но вроде победил. Не уверен, что это правильно, но всё работает. Опишу коротко, может кому-то пригодится:

1.

# systemd-escape -p --suffix=mount /home/maksim/Видео
home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount
# touch 'home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount'

Без кавычек всё дальнейшее не работает (название будет как ниже у файла файл с расширением .automount, без слешей).

# ls -l
-rw-r--r-- 1 root   root      149 мар 31 02:15  home-maksim-xd0x92xd0xb8xd0xb4xd0xb5xd0xbe.automount
-rw-r--r-- 1 root   root      130 мар 31 03:23 'home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount'

2. Дальше всё просто, по букварю.

# cat /etc/systemd/system/home-maksim-\\xd0\\x92\\xd0\\xb8\\xd0\\xb4\\xd0\\xb5\\xd0\\xbe.mount 
[Unit]
Description=VideoDisk

[Mount]
What=/dev/disk/by-uuid/988aa2cd-8d44-4f50-bab8-a76a8ad103b7 
Where=/home/maksim/Видео
Type=ext4
Options=defaults,nouser,nofail

[Install]
WantedBy=multi-user.target

3. и запуск....

# systemctl enable home-maksim-\\xd0\\x92\\xd0\\xb8\\xd0\\xb4\\xd0\\xb5\\xd0\\xbe.mount 
Created symlink /etc/systemd/system/multi-user.target.wants/home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount → /etc/systemd/system/home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount.

# systemctl status home-maksim-\\xd0\\x92\\xd0\\xb8\\xd0\\xb4\\xd0\\xb5\\xd0\\xbe.mount 
● home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount - VideoDisk
   Loaded: loaded (/etc/systemd/system/home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount; enabled; vendor pres
   Active: active (mounted) since Sat 2018-03-31 12:59:49 MSK; 2h 59min ago
    Where: /home/maksim/Видео
     What: /dev/sdb1
    Tasks: 0 (limit: 4648)
   Memory: 336.0K
   CGroup: /system.slice/home-maksim-\xd0\x92\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe.mount

мар 31 12:59:49 systemd[1]: Mounting VideoDisk...
мар 31 12:59:49 systemd[1]: Mounted VideoDisk.

Всё дело в волшебных кавычках ?

McSeam
() автор топика
Ответ на: комментарий от Deleted

fstab ненужен и все надо писать в юнитах

По состоянию на systemd версии 238 в его документации сказано: In general, configuring mount points through /etc/fstab is the preferred approach.

Для не владеющих языком потенциального противника наших партнёров: В общем случае конфигурирование точек монтирования через /etc/fstab является предпочтительным подходом.

https://www.freedesktop.org/software/systemd/man/systemd.mount.html

McSeam
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.