Сохранять имена файлов в NFS между Windows/Linux
Есть ли способ настроить NFSClient или как общий ресурс монтируется в Windows или Linux, чтобы я мог сохранять имена файлов в разных системах?
В настоящее время у нас есть большое количество файлов, которые были написаны в Windows и теперь перемещены в Google Filestore (NFSv3), чтобы к ним можно было получить доступ с других серверов. Проблема в том, что многие файлы имеют шведские символы в имени (Å Ä Ö), и когда эти файлы перечислены в системе, противоположной той, в которой они были созданы, имя файла становится нечитаемым (нет проблем с содержимым файла, только имя)
В настоящее время я планирую программно переименовать все файлы, чтобы удалить недопустимые символы, но я бы предпочел не делать этого, если это возможно.
Ниже приведен пример того, как это выглядит со стороны Windows и Linux. Файл Linux создается в Linux, а файл Windows создается в Windows.
Linux
Windows
1 ответ
Этот ответ может не помочь вам решить проблему, но я подумал, что дам некоторый теоретический обзор, который может помочь вашим (и другим) исследованиям.
Вы также можете прочитать это.
В любом случае, вот и мы:
Здесь очень много всего.
- Это кодировка, используемая NTFS и любой файловой системой, которую использует Google Filestore.
- Кодировка поддерживается программами, которые вы используете для создания и просмотра этих имен файлов.
- Кодировка поддерживается используемыми вами терминальными программами.
- Есть кодировка, поддерживаемая NFSv3.
Файловые системы
В Linux для имен файлов действуют только 2 правила: они не могут содержать косую черту (/
), и они не могут содержать нулевой байт (\0
). ASCII и UTF-8 совместимы с этим правилом, и это в основном те кодировки, которые поддерживаются файловыми системами Linux.
У Windows могут быть разные идеи. Возможно, потребуется некоторая конфигурация, чтобы файловая система Windows выдавала символы в другой кодировке.
Создание и листинг файлов
В Linux имена файлов почти всегда кодируются в UTF-8. Затем,ls
и родственники обычно не думают слишком много и просто принимают указанное выше правило, которое требуется файловой системе.
Windows ' dir
очевидно, знает, как работать с кодировкой символов NTFS, но может ли он читать имена файлов Linux UTF-8? Насколько я понимаю, он поддерживает его с некоторой конфигурацией.
Терминал
Все современные терминальные программы Linux используют кодировку UTF-8, но, возможно, потребуется установить поддержку других наборов символов (например, Windows).
В Windows он, похоже, не полностью поддерживался по состоянию на прошлый год. Возможно, это изменилось, или, может быть, вам понадобится другой терминал. Приведенная выше конфигурация может помочь.
NFS
NFSv4.1 и выше имеют явную поддержку UTF-8 и явную цель взаимодействия Unix <-> Windows.
NFSv3 не имеет ничего из этого, и поддержка чего-либо, кроме ASCII, не гарантируется.
Я нашел одну реализацию, которая поддерживает UTF-8 поверх NFSv3, но в документации Google Filestore сказано только "поддерживает любой NFSv3-совместимый клиент".
Что делать
Переименуйте файлы. У совместимости есть еще больше проблем, например, разные концепции того, какие символы зарезервированы, существует так много ограничений, что лучше всего убедиться, что все имена файлов являются простыми простыми ASCII, и я бы даже избегал таких вещей, как пробелы в именах файлов, это делает жизнь намного проще.