WSL (Ubuntu 20.04) – нестабильные разрешения

Вопрос или проблема

Я новичок в WSL и пытаюсь использовать rsync для резервного копирования снимков. Все, похоже, работает как задумано… кроме того, что rsync отказывается копировать некоторые файлы, ссылаясь на ошибку разрешения с send_files.

Я попробовал изменить глобально разрешения для всех файлов и папок, чтобы сделать их все читаемыми. Снова неудача с определенными файлами. Я пошел посмотреть на эти конкретные директории и нашел следующее, например:

m17awl@M17A:/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib$ ls -lsa
total 48332
   0 drwxrwxrwx 1 m17awl m17awl     512 Янв 21  2020 .
   0 drwxrwxrwx 1 m17awl m17awl     512 Янв 21  2020 ..
  52 ---------- 1 m17awl m17awl   51141 Янв 23  2020 LuceneIndexer_3-3.0.12.jar
   4 ---------- 1 m17awl m17awl    3482 Янв 23  2020 animal-sniffer-annotations-1.14.jar
2020 ---------- 1 m17awl m17awl 2067867 Янв 23  2020 ant-1.9.13.jar

хммм… нет разрешений. Хорошо, я пытался изменить их, казалось бы, успешно:

m17awl@M17A:/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib$ sudo chmod -R +r .
[sudo] пароль для m17awl:
m17awl@M17A:/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib$ ls -lsa
total 48332
   0 drwxrwxrwx 1 m17awl m17awl     512 Янв 21  2020 .
   0 drwxrwxrwx 1 m17awl m17awl     512 Янв 21  2020 ..
  52 -r-xr-xr-x 1 m17awl m17awl   51141 Янв 23  2020 LuceneIndexer_3-3.0.12.jar
   4 -r-xr-xr-x 1 m17awl m17awl    3482 Янв 23  2020 animal-sniffer-annotations-1.14.jar
2020 -r-xr-xr-x 1 m17awl m17awl 2067867 Янв 23  2020 ant-1.9.13.jar

Я снова запускаю rsync… и получаю те же ошибки разрешений, включая эти файлы в этой конкретной директории:

m17awl@M17A:/mnt/d/My Documents$ rsync --progress --update --recursive --times --link-dest=/mnt/f/Backups/rsync/My\ Documents/snapshot2021-02-21T203900/ /mnt/d/My\ Documents/ /mnt/f/Backups/rsync/My\ Documents/snapshot2021-02-22T071700/
sending incremental file list
...
rsync: send_files failed to open "/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/bin/LuceneIndexer_3": Permission denied (13)
rsync: send_files failed to open "/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib/LuceneIndexer_3-3.0.12.jar": Permission denied (13)
rsync: send_files failed to open "/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib/animal-sniffer-annotations-1.14.jar": Permission denied (13)
rsync: send_files failed to open "/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib/ant-1.9.13.jar": Permission denied (13)

… и когда я снова смотрю на директорию, я вижу, что разрешения на эти файлы были “уничтожены” (т.е. снова установлены на ----------).

Кто-нибудь знает, что здесь происходит… есть ли решения?

Кстати, носитель источника, где, похоже, возникает проблема, это внутренний SSD, 250 ГБ, отформатированный NTFS. Носитель назначения (/mnt/f) – это внешний жесткий диск, тип со вращающимися пластинами, 750 ГБ, отформатированный NTFS.

Хотя приятно слышать, что вы решили проблему для этого случая использования, я все же рекомендую немного другое решение.

В вашем /etc/wsl.conf добавьте следующее:

[automount]
options  = "metadata,umask=22,fmask=11,uid=1000,gid=1000"

Конечно, установите uid и gid на вашего пользователя. Технически, параметры metadata, fmask и umask даже не необходимы с установленными uid/gid. По крайней мере, не для случая использования rsync. Они все равно будут полезны.

Смотрите это замечание/комментарий на GitHub для получения дополнительных сведений. Резюме таково, что “metadata” позволит WSL хранить разрешения для файлов, созданных WSL на диске drvfs, но файлы, созданные Windows, по-прежнему будут назначены root. В результате, если rsync включает эти файлы, будут все еще проблемы с разрешениями. uid/gid, с другой стороны, назначит WSL право собственности на файлы вашему пользователю, независимо от того, созданы ли они в WSL или Windows.

Параметры enabled и root из вашего ответа уже установлены на эти значения по умолчанию WSL, поэтому они действительно не должны быть необходимы.

Благодаря комментарию и ссылке Камиля Мачировского я провел несколько экспериментов, которые, похоже, привели к успеху:

1 – согласно этому ответу, создайте (или измените, если существует) файл /etc/wsl.conf:

[automount]
enabled  = true
root     = /mnt/
options  = "metadata,umask=22,fmask=11"

2 – перезагрузите машину

3 – установите свои разрешения по мере необходимости, в моем случае разрешения на чтение для исходного местоположения

4 – rsync

Примечание: некоторые другие ответы с вышеупомянутым ответом предполагают, что никаких местоположений /mnt/… (т.е. разделов Windows 10) под WSL нельзя доверять для сохранения их разрешений. ПОКА, в моем случае, это, похоже, не так. Как упоминалось, мое исходное местоположение – это внутренний SSD-диск, отформатированный NTFS, и, похоже, до сих пор все работает нормально.

Ответ или решение

Проблема с нестабильными правами доступа в WSL (Windows Subsystem for Linux) на базе Ubuntu 20.04, связанная с использованием rsync для резервного копирования, может возникнуть из-за особенностей работы с файловыми системами Windows и Linux. Рассмотрим детали, чтобы предложить решение, которое поможет устранить данную проблему.

Природа проблемы

При копировании файлов с использованием rsync, код ошибки Permission denied (13) указывает на то, что WSL не может получить доступ к некоторым файлам из-за несуществующих или неправильных прав доступа. В вашем случае, текущие права доступа к файлам отображаются как ----------, что означает, что файлы не имеют никаких разрешений для чтения или выполнения, даже если вы используете sudo для изменения их прав.

Причины

  1. Файловая система NTFS: Файлы находятся на внутреннем SSD, форматированном в NTFS. Обработка NTFS в WSL может привести к нестабильному поведению с правами доступа, так как NTFS не поддерживает такие же механизмы управления доступом, как в Linux.

  2. Отсутствие метаданных: По умолчанию WSL не хранит метаданные о правах доступа к файлам, созданным в Windows. Это означает, что даже если вы измените права доступа с помощью chmod, они могут не сохраняться, особенно если Windows вмешивается в работу файловой системы.

Решение проблемы

Чтобы исправить эту ситуацию, рекомендуется внести изменения в файл конфигурации WSL:

  1. Открытие файла конфигурации: Используйте любой текстовый редактор для открытия или создания файла /etc/wsl.conf.

  2. Добавление настроек: Вставьте следующий код:

    [automount]
    enabled  = true
    root     = /mnt/
    options  = "metadata,umask=22,fmask=11,uid=1000,gid=1000"

    Обратите внимание, что uid и gid должны быть установлены в соответствии с вашим пользователем. Значение 1000 обычно соответствует первому созданному пользователю в системе.

  3. Перезагрузка WSL: После внесения изменений перезагрузите WSL, чтобы настройки вступили в силу. Это можно сделать с помощью команды:

    wsl --shutdown
  4. Проверка прав доступа: После перезагрузки снова выполните команду chmod, чтобы убедиться, что права доступа установлены корректно на необходимые директории и файлы.

  5. Запуск rsync: Попробуйте снова запустить rsync, проверяя, сохраняются ли права на файлы и нет ли ошибок.

Заключение

Эта инструкция должна помочь вам устранить проблемы с правами доступа в WSL на базе Ubuntu 20.04 при использовании rsync. С применением правильных настроек в конфигурационном файле WSL вы сможете более эффективно управлять разрешениями файлов, минимизируя конфликты, возникающие из-за особенностей файловой системы NTFS. Если проблема продолжает возникать, рассмотрите возможность проверки настроек безопасности Windows, которые могут блокировать доступ к файлам.

Оцените материал
Добавить комментарий

Капча загружается...