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올바른 파일 이름입니다. 백슬래시가 중요합니다!

관련 정보