systemdマウントデバイスを介して非ASCII(キリル文字)文字を含むフォルダをマウントする方法は?

systemdマウントデバイスを介して非ASCII(キリル文字)文字を含むフォルダをマウントする方法は?

fstab次の行に対応するシステムインストールデバイスを作成したいと思います。

/dev/sdc1 /жышы ext4 defaults 1 2

そんなこと
жиши.マウント

[Unit]
Description= /dev/sdc1 to /жышы

[Mount]
What=/dev/sdc1
Where=/жышы
Type=ext4

[Install]
WantedBy=multi-user.target

systemd-escapeはい、ユニットファイル名を試しましたが、Where成功しませんでした。私のより良いアプローチは次のとおりです。
xd0xb6xd1x8bxd1x88xd1x8b.マウント

[Unit]
Description= /dev/sdc1 to /жышы

[Mount]
What=/dev/sdc1
Where='/жышы'
Type=ext4

[Install]
WantedBy=multi-user.target

このバリエーションはほとんど機能します。(ユニットファイル名にエラーはありません)しかし、インストール/dev/sdc1自動的に作成されたフォルダに/xd0xb6xd1x8bxd1x88xd1x8b変える/жиши。

この混乱を解決するのに役立ちます。

答え1

からman systemd.mount

マウントユニットの名前は、そのユニットが制御するマウントポイントディレクトリにちなんで指定する必要があります。例:マウントポイント/home/lennartは、デバイスファイルhome-lennart.mountで設定する必要があります。ファイルシステムパスをユニット名に変換するために使用されるエスケープロジックの詳細については、を参照してくださいsystemd.unit(5)

いいですね。以下からman systemd.unit

エスケープアルゴリズムは次のように動作します。文字列が与えられると、すべての「/」文字は「-」で置き換えられ、ASCII英数字、「:」、「_」、または「.」以外のすべての文字は置き換えられます。 Cスタイル"\x2d"エスケープに置き換えられました。また、「.」は、エスケープされた文字列の最初の文字として現れると、これらのCスタイルのエスケープに置き換えられます。

入力が絶対ファイルシステムパスに準拠すると、アルゴリズムはわずかに拡張されます。ルートディレクトリ「/」へのパスは、単一ダッシュ「-」でエンコードされます。さらに、変換の前に先行、末尾、または繰り返される「/」文字が文字列から削除されます。例: /foo//bar/baz/ は「foo-bar-baz」になります。

このエスケープは、エスケープされた文字列がパスであるかどうかを知る限り、完全に元に戻すことができます(エスケープ結果はパス文字列と非パス文字列に対して異なります)。このsystemd-escape(1)コマンドは、任意の文字列にエスケープを適用し、逆方向に適用するために使用できます。systemd-escape --pathパス文字列をエスケープするために使用され、それ以外の場合はsystemd-escape使用されません--path

だから我々は走る

systemd-escape --path /жышы

そして得る

\xd0\xb6\xd1\x8b\xd1\x88\xd1\x8b

したがって、\xd0\xb6\xd1\x8b\xd1\x88\xd1\x8b.mount正しいファイル名です。バックスラッシュが重要です!

関連情報