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
正しいファイル名です。バックスラッシュが重要です!