Как создать symlink или ярлык в windows с помощью python в смонтированной папке

Есть Убунту, у которой есть смонтированный диск /mnt/disk. Этот disk - находится в среде windows и смонтирован с использованием протокола SMB.
Нужно делать ярлыки на папки с помощью скрипта, который запускается на Убунту таким образом, что бы они в windows нормально работали. Пробовал так: os.symlink(src, dst). Но получаю ошибку: [Errno 95] Operation not supported Если бы можно было ссылку (ярлык) создать как текстовый файл, то проблемы бы небыло.


Ответы (2 шт):

Автор решения: Pak Uula

У вас диск смонтирован как drvfs, я полагаю. Драйвер drvfs не умеет создавать символические ссылки на SMB дисках.

Вам нужно монтировать диск как cifs с опцией mfsymlinks:

sudo mount -t cifs -o 'username=user,password=pwd,uid=1000,gid=1000,mfsymlinks' '//server/share' /mnt/disk

Здесь username и password - это логин и пароль пользователя на машине server

Ссылка создаётся как файл в формате Minshall+French

Формат - это техническая подробность. Для программ, работающих в WSL, MF-ссылки работают в точности как символические ссылки в Linux/Unix - их можно создавать, можно делать stat, можно разыменовывать.

В частности, os.symlink успешно создаёт ссылки.

Пример. Я смонтировал удалённую шару как cifs в каталог /mnt/w/

Создаю ссылку в python

python -c 'import os; os.symlink("/mnt/w/wget-log", "/mnt/w/zzz/some.txt")'

Проверяю ссылку ls -l /mnt/w/zzz/some.txt

lrwxrwxrwx 1 user user 15 Nov 15 18:49 /mnt/w/zzz/some.txt -> /mnt/w/wget-log

Печатаю содержимое файла по ссылке cat /mnt/w/zzz/some.txt

--2023-09-28 19:00:58--  https://...
bla-bla-bla

Ограничение: ссылка работает только в пределах шары. То есть внутри /mnt/w работает ссылка на /mnt/w/some_stuff, но не работает ссылка на /mnt/c/some_stuff

→ Ссылка
Автор решения: Gaiduk AV

нормально в винде работают симлинки на соседний сервер с linux/samba mklink /D c:\path\to\symlink_name \server\share\path\to\dir

только про это не забывайте: fsutil behavior query SymlinkEvaluation

→ Ссылка