É possível usar uma variável na configuração da unidade de montagem do systemd?

3

É possível usar uma variável no campo what= de um arquivo de configuração de montagem systemd em vez de uma cadeia de caminho absoluto?

Por exemplo:

[Unit]
Before=local-fs.target

[Mount]
What=/dev/disk/by-partlabel/${part_variable}
Where=/mnt/optional/config/

Estou tentando encontrar uma maneira de usar um bootparam de linha de comando do kernel personalizado e montar uma partição fornecida por esse bootparam.

    
por sob 19.03.2018 / 17:34

3 respostas

3

Para o registro:

Is if possible to use a variable in the What= field of a systemd mount configuration file instead of an absolute path string?

Sim, é possível, por ex. (apenas testado com systemd v.238 ):

mnt-data.mount content:

[Unit]
Description=Mount System Backups Directory

[Mount]
What=${SOMEPATH}
Where=/mnt/data
Type=ext4
Options=defaults

se você correr

systemctl set-environment SOMEPATH=/dev/disk/by-label/DATA

e depois

systemctl start mnt-date.mount

ele montará /dev/disk/by-label/DATA a /mnt/data

ou, por meio de um arquivo env:

mnt-data.mount content:

[Unit]
Description=Mount System Backups Directory

[Mount]
EnvironmentFile=/path/to/env_file
What=${SOMEPATH}
Where=/mnt/data
Type=ext4
Options=defaults

/path/to/env_file content:

SOMEPATH=/dev/disk/by-uuid/1b5a38ca-9f0d-4f1a-8fc1-7c418e79bf07

Isso pode não ajudar você a

find a way to use a custom kernel command-line bootparam, and mount a partition provided by that bootparam.

mas é definitivamente possível usar What=${SOMEVAR} .

    
por 19.03.2018 / 21:12
1

De acordo com man systemd.mount , nenhuma substituição de variável é suportada lá.

Eu acredito que ainda é possível escrever um serviço systemd que é executado no início do processo de inicialização, que grava um arquivo .mount gerado dinamicamente.

    
por 19.03.2018 / 20:37
0

Não.

O que você descreve é exatamente para o que os geradores são, veja man systemd.generators . Compare man systemd-fstab-generator , que gera as unidades de montagem a partir de /etc/fstab , mas também lê, por exemplo, root= da linha de comando do kernel. Dito isto, se você só suporta uma opção de linha de comando do kernel, e você não tem um arquivo de configuração, você pode estar tão feliz escrevendo uma unidade de serviço de inicialização antecipada ( DefaultDependencies=no ) para isso.

    
por 19.03.2018 / 20:41

Tags