Создание коротких имен файлов должно быть отключено
В качестве примера используется Windows Server 2012 R2 (2016, 2019). Инструкция разбита на несколько шагов и представляет из себя полный цикл настройки файлового хранилища для использования в малых и средних компаниях.
Пространства имен
В api-интерфейсах Windows используются две основные категории соглашений о пространстве имен, которые обычно называются пространствами имен NT и пространствами имен Win32. Пространство имен NT было разработано для самого низкого уровня пространства имен, в котором могут существовать другие подсистемы и пространства имен, включая подсистему Win32 и, по расширению, пространства имен Win32. POSIX — это еще один пример подсистемы в Windows, построенной на основе пространства имен NT. Ранние версии Windows также определили несколько предопределенных или зарезервированных имен для определенных специальных устройств, таких как последовательные и параллельные порты, и консоль отображения по умолчанию в рамках того, что теперь называется пространством имен устройств NT, и по-прежнему поддерживаются в текущих версиях Windows для обратной совместимости.
Как в Windows 10 отключить ограничение на длину пути в 260 символов через политику
Чем примечателен данный метод, так это тем, что неподготовленных пользователей он не вынуждает выполнять команды или производить правку реестра, тут все в графическом виде. Так же если у вас есть домен Active Directory и вы хотите массово убрать ошибки "Слишком длинный целевой путь" или "Слишком длинный конечный путь" в приложениях и запретить им проверять MAX_PATH и использовать длинные пути без префикса \\?\, то групповые политики вам это помогут.
Еще раз напоминаю, что данный метод подойдет и для серверных версий, даже самых современных Windows Server 2019
Покажу для начала, как делать через локальную политику, открываете окно "Выполнить" в котором пишите gpedit.msc.
Хочу отметить, что для Windows 10 Home данный метод работать не будет, там просто нет редактора локальных политик, там придется лезть в реестр Windows
Далее идем по пути:
Конфигурация компьютера - Административные шаблоны - Система - Файловая система (Computer configuration - Administrative templates - System - Filesystem)
Найдите тут параметр "Включить длинные пути Win32 (Enable Win32 long paths)", по умолчанию он отключен, и я честно не понимаю почему. Активируйте его.
То же самое вы можете сделать централизовано для массового управления через групповые политики, все ветки те же самые.
Как я писал выше, в проводнике это не даст ни каких эффектов, поэтому вы все так же будите получать ошибку при копировании, создании, удалении "Слишком длинный целевой путь" или "Слишком длинный конечный путь". Ниже я покажу, что делать если нужно что-то там удалить или изменить. Данное ограничение в длине пути теперь не подхватиться на лету всеми приложениями, потребуется перезагрузка.
Полные и относительные пути
Для функций API Windows, которые управляют файлами, имена файлов часто могут быть относительными к текущему каталогу, а некоторые API требуют полного пути. Имя файла относительно текущего каталога, если оно не начинается со следующего:
- UNC-имя любого формата, которое всегда начинается с двух символов обратной косой черты ("\\"). Дополнительные сведения см. в следующем разделе.
- Конструктор дисков с обратной косой чертой, например "C:\" или "d:\".
- Одна обратная косая черта, например "\directory" или "\file.txt". Это также называется абсолютным путем.
Если имя файла начинается только с конструктора дисков, но не обратной косой черты после двоеточия, он интерпретируется как относительный путь к текущему каталогу на диске с указанной буквой. Обратите внимание, что текущий каталог может быть корневым каталогом в зависимости от того, что он был установлен во время последней операции изменения каталога на этом диске. Ниже приведены примеры этого формата:
- "C:tmp.txt" ссылается на файл с именем "tmp.txt" в текущем каталоге на диске C.
- "C:tempdir\tmp.txt" относится к файлу в подкаталоге к текущему каталогу на диске C.
Путь также считается относительным, если он содержит "двойные точки"; то есть два периода вместе в одном компоненте пути. Этот специальный описатель используется для обозначения каталога над текущим каталогом, который иначе называется родительским каталогом. Ниже приведены примеры этого формата:
- ".. \tmp.txt" указывает файл с именем tmp.txt, расположенный в родительском каталоге текущего каталога.
- ".. \.. \tmp.txt" указывает файл, который является двумя каталогами над текущим каталогом.
- ".. \tempdir\tmp.txt" указывает файл с именем tmp.txt, расположенный в каталоге с именем tempdir, который является одноранговым каталогом текущего каталога.
Относительные пути могут объединять оба примера типов, например "C. \tmp.txt". Это полезно, так как система отслеживает текущий диск вместе с текущим каталогом этого диска, он также отслеживает текущие каталоги в каждой из разных букв дисков (если в вашей системе несколько), независимо от того, какой диктор диска установлен в качестве текущего диска.
Шаг 5. Настройка средств обслуживания
Ни одна инфраструктура не может полноценно существовать без мониторинга и резервного копирования. Предупредить о возможной проблеме, узнать о последней раньше пользователей или иметь возможность восстановить данные — показатели высокой ответственности и профессионализма системного администратора.
Как в Windows 10 отключить ограничение на длину пути в 260 символов через PowerShell
Не все люди готовы копаться в редакторах и реестрах, им нужно быстрое решение, одним из таких является PowerShell. В оболочке выполните команду для активации параметра "Включить длинные пути Win32 (LongPathEnabled)". Не забываем перезагрузить систему.
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name LongPathsEnabled -Value 1
1. Подготовка системы
Для контроллера домена необходимо заранее задать имя компьютера и настроить статический IP-адрес. Это важно, так как смена этих настроек на рабочем активном каталоге может привести к потери работоспособности системы.
Проверяем настройку системного времени и часового пояса. Данный параметр также важен для устанавливаемой роли.
Проверка корректности работы AD
После выполнения всех процедур по настройке сервера, ждем около 15 минут. После открываем командную строку от администратора и вводим:
Данная команда выполнит диагностику работы контроллера домена и отобразит все замечания. Если такие будут, необходимо самостоятельно найти решение в сети.
Все файловые системы, поддерживаемые Windows, используют концепцию файлов и каталогов для доступа к данным, хранящимся на диске или устройстве. Windows разработчики, работающие с API-интерфейсами Windows для операций ввода-вывода файлов и устройств, должны понимать различные правила, соглашения и ограничения имен файлов и каталогов.
Доступ к данным можно получить с дисков, устройств и сетевых ресурсов с помощью API-интерфейсов ввода-вывода файлов. Файлы и каталоги, наряду с пространствами имен, являются частью концепции пути, который представляет собой строковое представление места для получения данных независимо от того, находится ли он с диска или устройства или сетевого подключения для определенной операции.
Некоторые файловые системы, такие как NTFS, поддерживают связанные файлы и каталоги, которые также соответствуют соглашениям об именовании файлов и правилам так же, как обычный файл или каталог. Дополнительные сведения см. в разделе "Жесткие ссылки" и "Соединения" , " Точки повторного анализа" и "Операции с файлами".
Дополнительные сведения см. в следующих подразделах:
Дополнительные сведения о настройке Windows 10 для поддержки длинных путей к файлам см. в разделе "Ограничение максимальной длины пути".
Настройка шары (общей папки)
Создаем первую папку, которую хотим предоставить в общее использование. Затем кликаем по ней правой кнопкой мыши и нажимаем Свойства:
В открывшемся окне переходим на вкладку Доступ и нажимаем Расширенная настройка:
Ставим галочку Открыть общий доступ к этой папке и нажимаем кнопку Разрешения:
Предоставляем полный доступ всем пользователям:
* конечно же, мы не будем давать доступ всем пользователям, но для этого есть вкладка безопасность (см. ниже).
Нажимаем OK и еще раз OK.
Теперь переходим на вкладку Безопасность и нажимаем Дополнительно:
В открывшемся окне нажимаем Отключение наследования и Преобразовать унаследованные разрешения в явные разрешения этого объекта.
Выставляем необходимые права на папку, например:
Совет: старайтесь управлять правами на ресурсы только при помощи групп. Даже если доступ необходимо предоставить только одному человеку!
Теперь нажимаем OK два раза. Папка настроена для общего использования и в нашем примере доступна по сетевому пути \\fs1\Общая папка.
Синтаксис
Ограничение максимальной длины пути
В выпусках Windows до Windows 10 версии 1607 максимальная длина пути равна MAX_PATH, которая определяется как 260 символов. В более поздних версиях Windows изменение раздела реестра или использование средства групповая политика требуется для удаления ограничения. Полные сведения см. в разделе об ограничении максимальной длины пути .
Нюансы длинных путей в приложениях
Есть один нюанс. Этот новый параметр (имеется ввиду та политика и ключ реестра) не обязательно будет работать со всеми существующими приложениями, но он будет работать с большинством. В частности, любые современные приложения должны работать нормально, как и все 64-битные приложения. Старые 32-разрядные приложения должны быть применимы для работы, что на самом деле просто означает, что разработчик указал в файле манифеста приложения, что приложение поддерживает более длинные пути. Большинство популярных 32-битных приложений не должно вызывать проблем. Тем не менее, вы ничем не рискуете, пробуя настройку. Если приложение не работает, единственное, что произойдет, это то, что оно не сможет открывать или сохранять файлы, сохраненные в местах, где полный путь превышает 260 символов.
Если вы разработчик, то чтобы ваше приложение имело возможность работать с длинными путями Windows, в манифесте обязательно указывайте следующие настройки:
Теневые копии
Позволят вернуться к предыдущим версиям файлов. Это очень полезная функция позволит не только восстановить некорректно отредактированный документ, но и вернуть случайно удаленный файл или папку.
Как настроить и пользоваться данной возможностью, читайте подробнее в инструкции Как включить и настроить теневые копии.
Шаг 1. Выбор оборудования и подготовка сервера
В качестве сервера, желательно, выбрать профессиональное оборудование. Системные требования для файлового сервера не высокие:
- Процессор может быть самый простой;
- Оперативная память также не сильно используется;
- Дисковая система — самый основной компонент. Ее объем зависит от специфики бизнеса. Примерная формула — не менее 15 Гб на пользователя и не менее 1 Тб на сервер. До 50 пользователей можно рассматривать диски SATA, после — SAS или SSD.
Например, для компании в 300 пользователей подойдет сервер с процессором Xeon E3, 8 Гб ОЗУ и 5 Тб дискового пространства на дисках SAS 10K.
Имена файлов и каталогов
Все файловые системы соответствуют одинаковым общим соглашениям об именовании для отдельного файла: базовому имени файла и необязательному расширению, разделенному точкой. Однако каждая файловая система, например NTFS, CDFS, exFAT, UDFS, FAT и FAT32, может иметь определенные и различные правила формирования отдельных компонентов в пути к каталогу или файлу. Обратите внимание, что каталог — это просто файл с особым атрибутом, назначающим его в качестве каталога, но в противном случае должен соответствовать всем тем же правилам именования, что и обычный файл. Так как каталог терминов просто относится к специальному типу файла, насколько это касается файловой системы, некоторые справочные материалы будут использовать общий файл терминов для охвата как концепций каталогов, так и файлов данных. Из-за этого, если не указано иное, любые правила именования или использования или примеры для файла также должны применяться к каталогу. Путь к термину относится к одному или нескольким каталогам, обратным косикам и, возможно, имени тома. Дополнительные сведения см. в разделе "Пути ".
Ограничения количества символов могут отличаться и могут отличаться в зависимости от используемого формата префикса имени файловой системы и пути. Это еще больше усложняется поддержкой механизмов обратной совместимости. Например, более старая файловая система MS-DOS FAT поддерживает не более 8 символов для имени базового файла и 3 символа для расширения в общей сложности 12 символов, включая разделитель точек. Это обычно называется именем файла 8.3. Windows файловых систем FAT и NTFS не ограничиваются именами файлов 8.3, так как они поддерживают длинные имена файлов, но по-прежнему поддерживают версию 8.3 длинных имен файлов.
Пространства имен NT
Существуют также API, которые позволяют использовать соглашение о пространстве имен NT, но диспетчер объектов Windows делает это ненужным в большинстве случаев. Чтобы проиллюстрировать, полезно просмотреть пространства имен Windows в браузере системных объектов с помощью средства winObj Windows Sysinternals. При запуске этого средства отображается пространство имен NT, начинающееся с корневого каталога, или "\". Вложенная папка с именем "Global??" — это место расположения пространства имен Win32. Именованные объекты устройства находятся в пространстве имен NT в подкаталоге Device. Здесь также можно найти Serial0 и Serial1, объекты устройства, представляющие первые два COM-порта, если они присутствуют в системе. Объект устройства, представляющий том, будет примерно таким, как HarddiskVolume1, хотя числовой суффикс может отличаться. Имя DR0 в подкаталоге "Harddisk0" является примером объекта устройства, представляющего диск и т. д.
Чтобы сделать эти объекты устройств доступными Windows приложениями, драйверы устройств создают символьную ссылку (символьную ссылку) в пространстве имен Win32 "Global??", к соответствующим объектам устройства. Например, COM0 и COM1 в подкаталоге "Global??" — это просто символьные ссылки на Serial0 и Serial1, "C:" — это символьная ссылка на HarddiskVolume1, "Physicaldrive0" — это символьная ссылка на DR0 и т. д. Без символьного канала указанное устройство Xxx не будет доступно ни одному приложению Windows с помощью соглашений о пространстве имен Win32, как описано выше. Однако дескриптор можно открыть на этом устройстве с помощью любых API, поддерживающих абсолютный путь к пространству имен NT формата \Device\Xxx.
Благодаря добавлению поддержки нескольких пользователей через службы терминалов и виртуальные машины стало еще больше необходимо виртуализировать корневое устройство на уровне системы в пространстве имен Win32. Для этого добавьте символьную ссылку с именем GLOBALROOT в пространство имен Win32, которое можно увидеть в подкаталоге "Global??" средства браузера WinObj, описанного ранее, и сможете получить доступ через путь "\\?\GLOBALROOT". Этот префикс гарантирует, что следующий путь выглядит в истинном корневом пути диспетчера системных объектов, а не в зависимом от сеанса пути.
Использование утилит Far или Total Commander
После включения параметра "Включить длинные пути Win32" данные утилиты в 100% случаев помог вам произвести любые действия с папками или файлами на любом длинном пути в системе Windows. Откройте Total Commander и создайте для примера папку в каталоге с длинным путем, напоминаю для этого нужно нажать F7.
Как видите все прекрасно создается, удаляется или копируется при желании.
Параметры
Параметр | Описание |
---|---|
Запроса [] | Запрашивает файловую систему для состояния поведения создания короткого имени 8dot3. |
-
Если задано значение по умолчанию , для раздела реестра HKLM\System\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreationNtfsDisable8dot3NameCreationNtfsDisable8dot3NameCreation устанавливается значение по умолчанию.
- 0. Включает создание имени 8dot3 для всех томов в системе.
- 1. Отключает создание имени 8dot3 для всех томов в системе.
- 2. Задает создание имени 8dot3 для каждого тома.
- 3. Отключает создание имени 8dot3 для всех томов, кроме системного тома.
Включение поддержки длинных путей через реестр
Данный метод ни чуть не сложнее предыдущего и делает все то же самое, включает поддержку длинных путей свыше 256 символов для приложений Windows. Когда вы что-то меняете через редактор политик, по сути меняются настройки в реестре, это нужно помнить и знать. Сейчас я вам покажу какой ключ меняется. Откройте редактор реестра Windows. Перейдите в раздел:
тут вам необходимо найти параметр LongPathEnabled, которому для активации поддержки длинных путей и изменения ограничений в MAX_PATH, нужно задать значение "1". Тут потребуется перезагрузка.
Все что вам нужно, это распаковать zip-архив и запустить нужный файл активации, потом так же перезагрузиться, так как у вас будет создан нужный ключ реестра, без необходимости лезть в реестр самостоятельно.
Еще вы можете сделать такую поддержку и для конкретного пользователя по пути:
Если там нет ключа LongPathsEnabled, то создайте его, тип DWORD (32 бита) и значение 1.
Как еще обойти проблему с длинными путями Windows
Запросы или изменение параметров для короткого имени (имя 8dot3), которое включает в себя:
Запрос текущего параметра для поведения с коротким именем.
Сканирование указанного пути к каталогу для разделов реестра, которые могут быть затронуты, если короткие имена были удалены из указанного пути к каталогу.
Изменение параметра, определяющего поведение короткого имени. Этот параметр можно применить к указанному тому или к параметру тома по умолчанию.
Удаление коротких имен для всех файлов в каталоге.
Окончательное удаление имен файлов 8dot3 и не изменение разделов реестра, указывающих на имена файлов 8dot3, может привести к непредвиденным сбоям приложений, включая неспособность удалить приложение. Перед попыткой удалить имена файлов 8dot3 рекомендуется сначала создать резервную копию каталога или тома.
Аудит
Аудит позволит вести протокол доступа к данным — понять, кто и когда удалил важные данные или внес в них изменения.
О том, как настроить данную возможность читайте статью Как включить аудит доступа к файлам Windows.
Настройка системы
- Проверяем правильность настройки времени и часового пояса;
- Задаем понятное имя для сервера и, при необходимости, вводим его в домен;
- Если сервер не подключен напрямую к сети Интернет, стоит отключить брандмауэр;
- Для удаленного администрирования, включаем удаленный рабочий стол;
- Устанавливаем все обновления системы.
Синхронизация времени
На контроллере домена с ролью PDC Emulator необходимо настроить источник синхронизации времени. Для этого открываем командную строку от администратора и вводим команду:
w32tm /config /manualpeerlist:"time.nist.gov,0x8 time.windows.com,0x8" /syncfromflags:manual /reliable:yes /update
Шаг 2. Установка Windows и настройка системы
Примеры
Чтобы запросить поведение отключения имени 8dot3 для тома диска, указанного с идентификатором GUID, введите :
Вы также можете запросить поведение имени 8dot3 с помощью подкоманда поведения .
Чтобы удалить имена файлов 8dot3 в каталоге D:\MyData и всех подкаталогах, при записи данных в файл журнала, указанный как mylogfile.log, введите:
Что такое Active Directory простыми словами.
Установка системы
На этом шаге все стандартно, за исключением одного нюанса: разбивая во время установки Windows жесткий диск, стараемся выделить небольшую часть (70 - 120 Гб) для системы и все остальное под данные. Если выделить много дискового пространства для системного раздела, увеличится время его обслуживания и фрагментация, что негативно скажется на производительности и надежности системы в целом.
Дополнительные требования
- Для обеспечения сохранности информации при выходе из строя жесткого диска, необходим RAID-контроллер. Настройка последнего выполняется из специального встроенного программного обеспечения, которое запускается при загрузке сервера;
- Сервер должен быть подключен к источнику бесперебойного питания;
- Необходимо предусмотреть резервное копирование. Для этого нужен дисковый накопитель (внешний жесткий диск) или другой сервер.
Подробнее о выборе оборудования читайте статью Как выбрать сервер.
Как обойти ограничение длинных путей через символьную ссылку
Такой трюк мы с вами уже проделывали, когда нужно было переносить IMAP профиль у Outlook. Смысл в том, что создается файл в нужном вам месте, и этот файл это просто ярлык ссылающийся на нужный вам файл или папку, после этого путь сокращается и вы можете удалять или создавать все что вам нужно. Откройте командную строку, далее вам нужно иметь два составляющих:
- Путь где будет лежать файл символической ссылки - в моем примере C:\короткий путь
- Длинный путь - C:\Share\WINDOW~1\C73D~1\C6BF~1 \D915~1\5C04~1\B4E5~1\260MIC~1
Нам поможет команда mklink, где ключ /D создает ссылку на каталог
Символическая ссылка успешно создана, можно проверять.
Откройте каталог с укороченным путем и попробуйте создать просто папку, в итоге она будет создана именно по тому длинному пути, как видите легко можно обходить ограничение в 260 символов.
Анализатор соответствия рекомендациям
В диспетчер управления серверами Windows встроен инструмент для проверки конфигурации сервера — анализатор соответствия рекомендациям. Чтобы им воспользоваться переходим в диспетчере в Локальный сервер:
Находим раздел «Анализатор соответствия рекомендациям» и справа кликаем по ЗАДАЧИ - Начать проверку BPA:
Рассмотрим решения некоторых рекомендаций.
1. Для XXX должно быть задано рекомендованное значение.
Это набор однотипных рекомендаций, для выполнения которых нужно обратить внимание на описание и задать значение параметро, которое в нем указано. Например, для CachedOpenLimit в описании проблемы есть описание решения — «Задайте для CachedOpenLimit рекомендуемое значение 5». Чтобы это сделать, открываем Powershell от администратора и вводим команду:
Set-SmbServerConfiguration -CachedOpenLimit 5
* мы задаем параметру CachedOpenLimit значение 5, как это и рекомендовано анализатором.
На запрос, уверены ли мы, что хотим выполнить команду, отвечаем утвердительно.
Остальные параметры задаем аналогичными действиями.
2. Файл Srv.sys должен быть настроен на запуск по требованию.
В командной строке от имени администратора вводим:
sc config srv start= demand
3. Создание коротких имен файлов должно быть отключено.
В командной строке от имени администратора вводим:
fsutil 8dot3name set 1
3. Повышение сервера до контроллера домена
После завершения установки роли не торопимся закрывать окно. Кликаем по пункту меню Повысить роль этого сервера до уровня контроллера домена:
* если мы перезагрузим сервер, повысить роль можно вернувшись в диспетчер серверов.
В открывшемся окне выбираем операцию развертывания. Если разворачивается первый контроллер домена в сети, оставляем выбор на Добавить новый лес, вводим имя домена и нажимаем Далее:
В следующем окне оставляем все как есть и вводим надежный пароль для режима восстановления:
В окне Параметры DNS нажимаем Далее.
В окне Дополнительные параметры автоматически будет подобрано имя NetBIOS. Его менять не обязательно — просто нажимаем Далее:
В окне Пути стоит оставить все, как есть. Нажимаем Далее. В окне Просмотреть параметры проверяем правильность введенных данных и нажимаем Далее.
Начнется проверка системы на соответствие требованиям. Если ошибок не будет, активируется кнопка Установить. Прочитайте все предупреждения, нажмите на данную кнопку и дождитесь окончания повышения сервера до контроллера домена. Сервер будет перезагружен, а после перезагрузки станет контроллером.
Шаг 3. Базовые настройки файлового сервера
Это стандартные действия, которые выполняются при настройке обычного файлового сервера.
Настройка DNS
Как правило, на один сервер с ролью контроллера домена устанавливается DNS. В этом случае необходимо выполнить ряд действий.
1. Настройка перенаправления.
Если наш сервер DNS не может ответить на запрос, он должен передавать его на внешний сервер. Для настройки перенаправления открываем консоль управления сервером имен и кликаем правой кнопкой по названию сервера - выбираем Свойства:
Переходим на вкладку Сервер пересылки:
Кликаем по кнопке Изменить:
Вводим адреса серверов, на которые хотим переводить запросы:
* это могут быть любые DNS, например, глобальные от Google или Яндекса, а также серверы от Интернет-провайдера.
2. Удаление корневых ссылок
Если наш сервер не работает по Ipv6, стоит удалить корневые ссылки, которые работают по этой адресации. Для этого заходим в свойства нашего сервера DNS:
Переходим во вкладку Корневые ссылки:
Мы увидим список серверов имен — удаляем все с адресами IPv6.
3. Включение очистки
Чтобы в DNS не хранилось много ненужных записей, настраиваем автоматическую читску. Для этого открываем настройки сервера имен:
Переходим на вкладку Дополнительно:
Ставим галочку Разрешить автоматическое удаление устаревших записей и ставим количество дней, по прошествию которых считать запись устаревшей:
Как в Windows 10 отключить ограничение на длину пути в 260 символов через командную строку
Запустите командную строку в режиме администратора и введите:
Пространства имен файлов Win32
Префикс пространства имен Win32 и соглашения приведены в этом разделе и в следующем разделе с описанием их использования. Обратите внимание, что эти примеры предназначены для использования с функциями API Windows и не все обязательно работают с приложениями оболочки Windows, такими как Windows Explorer. По этой причине существует более широкий спектр возможных путей, чем обычно доступны в приложениях оболочки Windows, и Windows приложения, которые используют преимущества этого, можно разработать с помощью этих соглашений о пространстве имен.
Так как он отключает автоматическое расширение строки пути, префикс "\\?\" также позволяет использовать ".." и "." в именах путей, которые могут быть полезны при попытке выполнить операции с файлом с этими зарезервированными относительными описателями пути в рамках полного пути.
Многие, но не все API-интерфейсы ввода-вывода файлов поддерживают "\\?\"; Необходимо ознакомиться со справочной темой для каждого API, чтобы убедиться.
Обратите внимание, что API Юникода должны использоваться для проверки того, что префикс "\?\" позволяет превысить MAX_PATH
Описание проблемы длинных путей
Раньше имена файлов в Windows ограничивались форматом 8.3 - всего восемь символов для имени файла и три для расширения. С появлением Windows 95 Microsoft сняла этот предел и позволила использовать гораздо более длинные имена.
Тем не менее, файловая система Windows по-прежнему накладывает некоторые ограничения, например, какие символы могут использоваться в именах файлов и общую длину путей. Некоторое время максимальная длина пути составляла 260 символов, но с появлением Windows 10, часть ограничений начала потихоньку уходить, например для приложений и появилась возможность отключить проверку MAX_PATH и использовать длинные пути без префикса \\?\.
Что интересно, значение в 260 символов обусловлено значением MAX_PATH Win32 API. У файловой системы NTFS максимальная длина пути ″немного″ больше и составляет 32767 символа. Для обхода ограничений Win32 API некоторые приложения используют формат UNC, указывая абсолютный путь с префиксом \\?\, например так:
Хочу отметить, что на период ноября 2020 года и последней версий Windows 10 1909, в ПРОВОДНИКЕ Windows до сих пор есть ограничения в 260 символов, и мы все слышим обещания, что их исправят
Большинство людей может и не столкнуться с ней, а вот почти каждый системный администратор обязательно это увидит. Тут все дело в том, что в большинстве организаций есть свои сетевые файловые ресурсы, через которые пользователи производят обмен и работу с документами. В какой-то момент люди могут создать такой путь, который будет 258 или 260 символов, попытаются туда скопировать файл, а им выдастся ошибка:
Слишком длинный целевой путь: Имена файлов слишком длинны для помещения в эту целевую папку. Попробуйте использовать более короткое имя имя файла или расположение с более коротким путем
Тоже самое при копировании в папку, так же выскакивает "Слишком длинный целевой путь".
Вот ошибка при извлечении архива в сетевую папку:
Не удается завершить извлечение. Слишком длинный конечный путь. Переименуйте сжатую ZIP-папку и повторите попытку
Соответствие рекомендациям Best Practice
1. Создание коротких имен файлов должно быть отключено
Ранее в DOS все файлы называли в формате 8.3 — 8 символов под имя, 3 для расширения. Необходимость такого подхода сильно устарело, однако по умолчанию для обеспечения совместимости может быть включено.
В командной строке от имени администратора вводим:
fsutil 8dot3name set 1
Готово — поддержка создания коротких имен отключено.
2. Файл Srv.sys должен быть настроен на запуск по требованию.
В обычной командной строке от имени администратора вводим:
sc config srv start= demand
3. Некоторые сетевые адаптеры поддерживают RSS, но эта возможность отключена.
Необходимо для сетевого адаптера, который используется для подключения к сети, включить RSS.
Вводим команду в Powershell:
4. Некоторые сетевые адаптеры поддерживают IPsec TOv2, но эта возможность отключена.
Вводим команду в Powershell:
Настройка после развертывания сервиса
После развертывания контроллера домера, выполняем следующие действия.
Пространства имен устройств Win32
Префикс "\\.\" будет обращаться к пространству имен устройства Win32 вместо пространства имен файлов Win32. Таким образом, доступ к физическим дискам и томам осуществляется напрямую без прохождения файловой системы, если API поддерживает этот тип доступа. Таким образом можно получить доступ к нескольким устройствам, кроме дисков (например, с помощью функций CreateFile и DefineDosDevice ).
Например, если вы хотите открыть последовательный порт связи системы 1, можно использовать com1 в вызове функции CreateFile . Это работает потому, что COM1–COM9 является частью зарезервированных имен в пространстве имен NT, хотя при использовании префикса "\\.\" также будут работать с этими именами устройств. Для сравнения, если установлена 100-последовательная плата расширения портов и вы хотите открыть COM56, ее нельзя открыть с помощью COM56, так как для COM56 нет предопределенного пространства имен NT. Его необходимо открыть с помощью "\\.\COM56", так как "\\\.\" переходит непосредственно в пространство имен устройства, не пытаясь найти предопределенный псевдоним.
Еще одним примером использования пространства имен устройства Win32 является использование функции CreateFile с "\\.\PhysicalDriveX" (где X является допустимым целым числом) или "\\.\CdRomX". Это позволяет обращаться к этим устройствам напрямую, обходя файловую систему. Это работает потому, что эти имена устройств создаются системой по мере перечисления этих устройств, а некоторые драйверы также создают другие псевдонимы в системе. Например, драйвер устройства, реализующий имя C:\. имеет собственное пространство имен, которое также может быть файловой системой.
ИНТЕРФЕЙСы API, которые проходят через функцию CreateFile , обычно работают с префиксом "\\.\", так как CreateFile — это функция, используемая для открытия файлов и устройств в зависимости от используемых параметров.
При работе с функциями API Windows следует использовать префикс "\\.\" для доступа только к устройствам, а не к файлам.
Большинство API не поддерживают "\\.\"; Распознаются только те, которые предназначены для работы с пространством имен устройства. Всегда проверяйте справочный раздел для каждого API, чтобы убедиться.
Шаг 4. Тюнинг файлового сервера или профессиональные советы
Данные настройки, по сути, представляют секреты того, как сделать файловый сервер лучше, надежнее и безопаснее. Применяя их, администраторы создают более правильную и профессиональную среду ИТ.
С самого начала стоит создавать общие папки в пространстве имен DFS. На это есть две основные причины:
- При наличии или появлении нескольких файловых серверов пользователям будет удобнее находить общие папки в одном месте.
- Администратор легко сможет создать отказоустойчивую систему при необходимости.
Установка роли и вспомогательных компонентов
Как правило, данная роль устанавливается вместе с Windows. Остается только это проверить и доустановить компоненты, которые нужны для полноценной эксплуатации сервиса.
Открываем Диспетчер серверов. Он может быть запущен из панели быстрого запуска.
Нажимаем Управление - Добавить роли и компоненты.
В открывшемся окне оставляем Установка ролей и компонентов и нажимаем Далее.
В следующем окне выбираем нужный сервер (выбран по умолчанию, если работаем на сервере, а не через удаленную консоль) и нажимаем Далее.
Среди ролей находим Файловые службы и службы хранилища, раскрываем ее и проверяем, что установлены галочки напротив следующих компонентов:
Если данные службы не установлены, выбираем их и нажимаем Далее.
В окне Выбор компонентов просто нажимаем Далее.
Откроется окно Подтверждение установки компонентов. Нажимаем Установить и после окончания процесса перезагружаем сервер.
2. Установка роли AD DS
Открываем Диспетчер серверов
Нажимаем Управление - Добавить роли и компоненты:
Если откроется окно с приветствием, просто нажимаем Далее. В следующем окне оставляем Установка ролей и компонентов и нажимаем Далее:
Выбираем сервер, на который будет установлена роль контроллера домена (по умолчанию выбран локальный сервер) и нажимаем Далее:
Среди всех ролей выбираем следующие:
- DHCP-сервер
- DNS-сервер
- Доменные службы Active Directory
* на самом деле, для работы роли контроллера домена не обязательна установка первых двух. Они могут быть настроены на других серверах.
В следующем окне Выбор компонентов просто нажимаем Далее.
Досчелкиваем Далее до конца и нажимаем Установить:
Те же действия можно выполнить командой Powershell:
Install-WindowsFeature -Name DNS, DHCP, AD-Domain-Services -IncludeManagementTools
Обход ограничений длинных путей через 7zFM
Откройте 7zFM.exe и перейдите в нем в конечную папку вашего пути.
Для создания новой папки нажмите клавишу F7.
Задайте необходимое вам имя, в моем примере это будет "БОльше 260 Microsot".
В результате у нас создалась новая папка и заметьте 7zFM не ругнулся на наличие длинных путей, он их игнорирует просто и все.
Проверяем, что директория доступна через проводник Windows.
Все прекрасно отображается. Теперь я думаю вы легко сможете переносить, копировать, удалять файлы через 7zFM, когда вам проводник Windows ругается на наличие длинных путей.
Как обойти ограничение длинных путей через сопоставление subst
subst - простая команда позволяющая связать нужный путь к каталогу с буквой диска. Так же откройте командную строку в режиме администратора и сопоставьте ваш длинный путь с буквой W.
У вас в проводнике Windows должен появиться диск с данной буквой, если его нет, то прочитайте статью "Не появляется диск после команды subst" или просто в проводнике вбейте W:\ и нажмите Enter.
Как удалять, копировать, переносить файлы и папки при ошибке с длинными путями
Разобравшись с тем, как отключить проверку MAX_PATH в приложениях, давайте теперь поймем и научимся решать проблему длинных путей на файловых шарах и просто в проводнике. Классическая ситуация, когда пользователь попытался перенести свой файл или удалить его, создать папку и так далее, и он получает ошибку с пресловутыми длинными путями. Он просит разобраться вас и тут начинаются танцы с бубнами, вы просите его либо переименовать часть пути, или попросить его произвести действия в другом расположении, или просто забить, сказав, что виновата Windows со своими ограничениями, но мы же с вами профессионалы и инженеры, поэтому должны уметь выходить из таких ситуаций.
Резервное копирование
Для файлового сервера все просто — необходимо резервировать все рабочие папки и файлы. Лучшим решением будет ежедневное копирование новых данных, и с определенной периодичностью (например, раз в месяц), создавать полный архив.
Как обойти ограничение длинных путей через монтирование сетевого диска
В командной строке используйте команду net use, далее буква диска, которую мы присваиваем и в самом конце путь:
net use Z: "\\DESKTOP-OJ0SCOE\Share\WINDOW~1\ C73D~1\C6BF~1\D915~1\5C04~1\B4E5~1\260MIC~1" /persistent:yes
Как видим все прекрасно отработало и диск появился.
Соглашения об именах
Следующие фундаментальные правила позволяют приложениям создавать и обрабатывать допустимые имена файлов и каталогов независимо от файловой системы:
Используйте точку, чтобы отделить имя базового файла от расширения в имени каталога или файла.
Используйте обратную косую черту (\) для разделения компонентовпути. Обратная косая черта делит имя файла на путь к нему и одно имя каталога из другого имени каталога в пути. Обратную косую черту нельзя использовать в имени фактического файла или каталога, так как это зарезервированный символ, разделяющий имена на компоненты.
Используйте обратную косую черту в качестве части имен томов, например "C:\". в папке "C:\path\file" или "\\server\share" в "\server\share\path\file" для имен UNC. Дополнительные сведения об именах UNC см. в разделе ограничения максимальной длины пути .
Не предполагайте конфиденциальность регистра. Например, рассмотрим имена ОСКАРа, Оскара и оскара, хотя некоторые файловые системы (например, файловая система, совместимая с POSIX), могут рассматривать их как разные. Обратите внимание, что NTFS поддерживает семантику POSIX для учета регистра, но это не поведение по умолчанию. Дополнительные сведения см. в разделе CreateFile.
Конструкторы томов (буквы диска) точно так же не учитывают регистр. Например, "D:\" и "d:\" ссылаться на тот же том.
Используйте любой символ в текущей кодовой странице для имени, включая символы и символы Юникода в расширенном наборе символов (128–255), за исключением следующих:
Следующие зарезервированные символы:
- < (меньше чем);
- > (больше чем);
- : (двоеточие)
- " (двойная кавычка)
- / (косая черта)
- \ (обратная косая черта)
- | (вертикальная полоса или канал)
- ? (вопросительный знак)
- * (звездочка)
Целочисленное значение ноль, иногда называемое символом NUL ASCII.
Символы, целочисленные представления которых находятся в диапазоне от 1 до 31, за исключением альтернативных потоков данных, в которых разрешены эти символы. Дополнительные сведения о потоках файлов см. в разделе "Файл Потоки".
Любой другой символ, который не допускает целевая файловая система.
Используйте точку в качестве компонента каталога в пути для представления текущего каталога, например ".\temp.txt". Дополнительные сведения см. в разделе "Пути".
Используйте два последовательных периода (.).) в качестве компонента каталога в пути для представления родительского элемента текущего каталога, например ".. \temp.txt". Дополнительные сведения см. в разделе "Пути".
Не используйте следующие зарезервированные имена для имени файла:
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9. Кроме того, избегайте этих имен, за которым следует немедленное расширение; Например, NUL.txt не рекомендуется. Дополнительные сведения см. в разделе Пространства имен.
Не заканчивайте имя файла или каталога пробелом или точкой. Хотя базовая файловая система может поддерживать такие имена, оболочка Windows и пользовательский интерфейс не поддерживаются. Однако можно указать точку в качестве первого символа имени. Например, ".temp".
Методы снимающие ограничения на длину пути в Windows
- Через групповую или локальную политику Windows (Применимо только к Windows 10 и Windows Server 2016 и выше)
- Через реестр Windows (Применимо только к Windows 10 и Windows Server 2016 и выше)
- Через сторонние утилиты 7-Zip, Far, TotalCommander (Применимо ко всем версиям Windows)
- Использование силинков (символических ссылок) (Применимо ко всем версиям Windows)
- Через сетевой диск, для укорачивания пути
- Утилиты xcopy, robocopy
Короткие и длинные имена
Длинное имя файла считается любым именем файла, превышающим короткое соглашение об именовании стилей MS-DOS (также называемое 8.3). При создании длинного имени файла Windows также может создать короткую форму имени 8.3, которая называется псевдонимом 8.3 или коротким именем, а также хранить его на диске. Этот псевдоним версии 8.3 можно отключить по соображениям производительности по всей системе или для указанного тома в зависимости от конкретной файловой системы.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: псевдоним 8.3 нельзя отключить для указанных томов до Windows 7 и Windows Server 2008 R2.
Во многих файловых системах имя файла будет содержать тильду (~) в каждом компоненте имени, которое слишком долго соответствует правилам именования 8.3.
Не все файловые системы соответствуют соглашению о замене тильды, и системы можно настроить для отключения создания псевдонима 8.3, даже если они обычно поддерживают его. Поэтому не следует предполагать, что псевдоним 8.3 уже существует на диске.
Чтобы запросить имена файлов 8.3, длинные имена файлов или полный путь к файлу из системы, рассмотрите следующие параметры:
- Чтобы получить форму 8.3 длинного имени файла, используйте функцию GetShortPathName .
- Чтобы получить длинную версию имени файла короткого имени, используйте функцию GetLongPathName .
- Чтобы получить полный путь к файлу, используйте функцию GetFullPathName .
В более новых файловых системах, таких как NTFS, exFAT, UDFS и FAT32, Windows сохраняет длинные имена файлов на диске в Юникоде, что означает, что исходное длинное имя файла всегда сохраняется. Это верно, даже если длинное имя файла содержит расширенные символы, независимо от кодовой страницы, активной во время операции чтения или записи диска.
Файлы с длинными именами файлов можно копировать между секциями файловой системы NTFS и Windows секциями файловой системы FAT, не теряя никаких сведений об имени файла. Это может быть не так для старых файловых систем MS-DOS FAT и некоторых типов CDFS (CD-ROM) в зависимости от фактического имени файла. В этом случае короткое имя файла будет заменено, если это возможно.
Путь к указанному файлу состоит из одного или нескольких компонентов, разделенных специальным символом (обратная косая черта), при этом каждый компонент обычно является именем каталога или именем файла, но с некоторыми заметными исключениями, рассмотренными ниже. Зачастую крайне важно интерпретировать системой путь, как выглядит начало или префикс пути. Этот префикс определяет пространство имен , используемое путем, а также специальные символы, используемые в какой позиции в пути, включая последний символ.
Если компонент пути является именем файла, он должен быть последним компонентом.
Каждый компонент пути также будет ограничен максимальной длиной, указанной для конкретной файловой системы. Как правило, эти правила делятся на две категории: короткие и длинные. Обратите внимание, что имена каталогов хранятся файловой системой как особый тип файла, но правила именования файлов также применяются к именам каталогов. Чтобы подвести итог, путь — это просто строковое представление иерархии между всеми каталогами, которые существуют для определенного файла или имени каталога.
Читайте также: