Вопрос или проблема
Я новичок в 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
для изменения их прав.
Причины
-
Файловая система NTFS: Файлы находятся на внутреннем SSD, форматированном в NTFS. Обработка NTFS в WSL может привести к нестабильному поведению с правами доступа, так как NTFS не поддерживает такие же механизмы управления доступом, как в Linux.
-
Отсутствие метаданных: По умолчанию WSL не хранит метаданные о правах доступа к файлам, созданным в Windows. Это означает, что даже если вы измените права доступа с помощью
chmod
, они могут не сохраняться, особенно если Windows вмешивается в работу файловой системы.
Решение проблемы
Чтобы исправить эту ситуацию, рекомендуется внести изменения в файл конфигурации WSL:
-
Открытие файла конфигурации: Используйте любой текстовый редактор для открытия или создания файла
/etc/wsl.conf
. -
Добавление настроек: Вставьте следующий код:
[automount] enabled = true root = /mnt/ options = "metadata,umask=22,fmask=11,uid=1000,gid=1000"
Обратите внимание, что
uid
иgid
должны быть установлены в соответствии с вашим пользователем. Значение1000
обычно соответствует первому созданному пользователю в системе. -
Перезагрузка WSL: После внесения изменений перезагрузите WSL, чтобы настройки вступили в силу. Это можно сделать с помощью команды:
wsl --shutdown
-
Проверка прав доступа: После перезагрузки снова выполните команду
chmod
, чтобы убедиться, что права доступа установлены корректно на необходимые директории и файлы. -
Запуск
rsync
: Попробуйте снова запуститьrsync
, проверяя, сохраняются ли права на файлы и нет ли ошибок.
Заключение
Эта инструкция должна помочь вам устранить проблемы с правами доступа в WSL на базе Ubuntu 20.04 при использовании rsync
. С применением правильных настроек в конфигурационном файле WSL вы сможете более эффективно управлять разрешениями файлов, минимизируя конфликты, возникающие из-за особенностей файловой системы NTFS. Если проблема продолжает возникать, рассмотрите возможность проверки настроек безопасности Windows, которые могут блокировать доступ к файлам.