Comments 78
Проблема была решена запретом синхронизации невалидных UTF-16.
А есть ли какое-то еще решение кроме исключения невалидных суррогатных пар? Я сталкиваюсь с такой проблемой при парсинге сайтов и также ничего лучше кроме исключения таких пар не придумал.
Одна и та же директория синхронизируется с вендой, у которой UTF-16, и с линуксом, у которого UTF-8. Оставлять как есть и пусть в одной из систем будут крякозяблы вместо имён файлов?
Также при обнаружения inode в другом месте проверяется контрольная сумма объекта (или какой-то процент соответствия вложенного контента, если это папка), которая отметает возможность ложного срабатывания.
в FAR или DN
C:\test>mkdir a.
C:\test>dir
Volume in drive C has no label.
Directory of C:\test
10.08.2016 15:41 <DIR> .
10.08.2016 15:41 <DIR> ..
10.08.2016 15:41 <DIR> a.
0 File(s) 0 bytes
3 Dir(s) 39 964 672 bytes free
C:\test>cd a.
C:\test\a.>
Хм… Я не припоминаю, чтобы я что-либо патчил. Попробую проверить на других системах.
F7
a.
успех
При переименовывании inode и не будет меняться. А при редактировании — может. Если данные не меняются — inode не меняется. Все зависит от того, с чем вы работаете — с directory entry или содержимым файла. У вас проблемы были только при изменении содержимого файла.
в Windows можно отключить создание короткого алиаса через реестр
В имени могут быть точки, но расширение — это отдельная структура, и с ней связаны ассоциации.
Следовательно если в конце точка есть а расширения нет, нельзя понять с чем оно ассоциируется. Поэтому файл и открыть нельзя.
А с каталогами да, забавно, но это баг именно проводника. Все остальное работает ОК.
Я вот как-то раз создал файл с пробелом в конце. Удалять nodejs-ом пришлось.
А как разруливается ситуация, когда валидное имя в одной fs синхронизируется на другую? К примеру, если на OS X юзер создал папку или файл con
, то как этот файл/папка будет синхронизироваться на Windows?
предполагаемая засада — отстутствие атомарности: создание файла в Вашем пространстве имен будет распадаться на 2+ разные транзакции в локальной fs: создание объекта и запись о нем в Вашем каталоге. но в принципе и с этим можно справиться.
Вот я слегка не доверяю облакам и дополнительно шифрую всё, что туда кладу.
Существует замечательная схема: я внутри синхронизируемого дерева разместил том encfs. Это директория, которая содержит файл .encfs6.xml и файлы/директории с зашифрованными именами и данными. Имена получаются вида "QDtj2N,ncNwY2DeP38Ug-oR4", запятые и минусы могут быть где угодно (например, минус в начале имени или две запятых в конце — легко), это просто "модифицированный base64", в котором запятая и минус используется вместо слеша и плюса. Преимущество такой схемы в том, что я меняю один файл, он один и синхронизируется, а не весь том, как это было бы в случае с TrueCrypt.
А дальше я просто монтирую это в какую-то директорию вне синхонизируемого дерева, и получаю прозрачно доступ к зашифрованным файлам.
Схема идеально работает в Dropbox, но вызвала проблемы в Cloud@Mail.ru. В какой-то момент ломается синхронизация, причём какой именно файл это вызывает — выяснить не удалось. В общем, это привело к тому, что mail.ru я теперь используют как вне-домовой бекап и работаю с ним только через веб-интерфейс.
Однако, хотелось бы работать по-нормальному!
Ну, прочитали вы не внимательно. Я же написал, что имя проблемного файла выяснить не удалось.
Я должен отметить, что это не единственная причина моего недовольства десктопным приложением. Другая, не менее важная — оно не работает без X. Мне это неудобно. Более того, оно теперь требует Qt5, что само по себе не плохо, но вот нет его на этом компьютере, так что даже просто запустить приложение не смог, а соберу потом, после отпуска. Дома собрано, попробую вечером, если не забуду.
Да, и ещё тонкость. Вот я использую Gentoo, я вполне допускаю, что вы не слышали, что кроме Debian (Ubuntu, Mint), Fedora и openSUSE конкретных версий существуют другие дистрибутивы, но у вас нет и элементарно "отвязанного от дистрибутива" файла .tar.gz (.bz2, .xz на выбор). Стыдно, даже богомерзкий Oracle выкладывает JRE и JVM в таком виде! (Ubuntu у вас тоже только древний)
нет и элементарно "отвязанного от дистрибутива" файла .tar.gz (.bz2, .xz на выбор).
Да ладно, мейнтейнеры других дистрибутивов могут использовать «привязанные к дистрибутиву» пакеты ровно как и .tar.gz
: распаковка, применение специфичных для дистрибутива изменений, и, собственно, упаковка в целевой пакет. Если нет нужды во втором этапе, то есть конвертеры вроде debtap.
Почему это? Это логично только для Windows. Для Линукс файл после удаления не виден, но удаляется только после того, как его закроет последняя открывшая/создавшая его программа. Использовал активно для работы с временными файлами. Очень удобно. Даже если крешится программа, то все временные файлы уже при создании удалены и не засоряют систему
Файл жив, пока на него есть хотя бы одна ссылка, а в Linux имя файла — это именно ссылка на конкретный inode.
При открытии файла, на него создается очередная ссылка среди прочих открытых дескрипторов где-то в /proc/PID/fd — она и держит файл от удаления.
Поэтому в Linux могут быть полноправные несколько имен на тот же файл, и открытый в каком-то процессе файл — такая же ссылка, включая то, что у нее есть обычный файловый путь.
Эта философия, например, позволяет сделать автоапдейт программы, не создавая отдельный «апдейтер», а заменяя файл прямо там где он есть, да и вообще много забавных вещей.
Альясы всегда в высоком регистре, содержат знак "~", за которым идет цифра, увеличивающаяся, если такой альяс уже занят (Например: «C:\PROGRA~1\»)Не совсем верно. Не знаю, как сейчас в 8-ках и прочих, но в 95, 98, ХР тильду можно отключить через реестр, что я и делал. Из эстетических соображений и из практических. Иногда проще искать файл, если имя чуть длиннее (в куче файлов с похожими именами). Сейчас уже не актуально, но тем не менее.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"NtfsDisable8dot3NameCreation"=dword:00000001
Либо через групповые политики (Конфигурация компьютера → Административные шаблоны → Система → Файловая система → NTFS → Параметры создания коротких имён).
Всегда первым делом отключаю короткие имена. За 10 лет встретилась лишь одна программа, установщик которой из-за этого вываливался с ошибкой — какая-то древняя версия CSE HTML Validator.
Мы учимся работать с тем, что есть.
del.
Используете ли при блочную синхронизацию или синхронизация на уровне файлов? Какие хэши для файлов используете, попадались ли коллизии?
Под macOS на FAT создаются новые файлы (не папки) с inode номер 9999…
inode и FAT????
например на NTFS портированный stat из git работает, в смысле пытается выдавать информацию, и номер inode и даже количество линков, правда на всех каталогах там только один линк, то есть что оно выдает — неясно. Владельца, размеры и timestamps выдает верно
1) Создает временный файл, куда сохраняет новую версию
2) Удаляет предыдущий файл (до редактирования)
3) Переименовывает темповый
При синхронизации на это либо надо ставить специальный хак именно на doc&docx (и ещё некоторые), либо синхронизировать полностью, даже если поменялся один символ. Сам сталкивался с этой проблемой, хотелось бы узнать как у вас её решили.
Особенности файловых систем, с которыми мы столкнулись при разработке механизма синхронизации Облака Mail.Ru