Александр @alexkuzko
DevOps, системный администратор, архитектор, лид
Information
- Rating
- 4,849-th
- Location
- Минск, Минская обл., Беларусь
- Registered
- Activity
Specialization
DevOps, Site Reliability Engineer (SRE)
Lead
Kubernetes
Windows Azure
AWS
Google Cloud Platform
Сейчас решаю какие коммуникации заложить. Весь дом витой парой тоже не опутать. Как вы это решали для себя?
Аналогично с расширением — какое еще расширение у директории? Нет, я лучше для совместимости при отображении заменю точку, но на диске останется как красивее и корректнее.
Две основные причины:
1) Для понимания что это один из запрещенных символов и его надо подменять (тут сделаю отсылку к тому что у меня в основном шары read only, т.е. мне обратная замена не грозит, а если каким-то образом запрещенный слеш окажется в имени файла, то он не пролезет).
2) Защита от дурака.
В любом случае, я планирую сделать небольшой апдейт в статье т.к. мне помогли решить проблему с точкой в конце. Но еще не решил проблему сборки правильного vfs_catia.c (в лоб сборка вроде бы некрасиво, бинарник выкладывать — мало ли побоятся). Для себя уже тестирую. Работает корректно (но в одну сторону!). Выбираю каким символом заменить эту точку в конце.
Помню, долго бился, пытаясь заставить клавиатуру работать. А не нужно было ;) Ведь после загрузки все управление через локалку! Такой мелкий нюанс, про который почти никто не пишет.
Шум сервер издаёт только при старте, раскручивая вентиляторы до максимальных оборотов. Потом работает весьма тихо.
В общем, пока пришлось отказаться. И опять же, это все файловые вещи. Т.к. у меня есть веб-интерфейс, я смогу сделать любой сложный запрос. Но практика показала что нужно не так и много фильтров. Для Dune, например, есть каталогизаторы (не совсем совместимы с моей базой, у них все свое, на контакт не пошли — я хотел узнать можно ли подключать свою базу к их системе), тот что на флеше очень достойный и делает все что нужно и даже больше. Аналог его можно сделать скрестив веб с оболочкой. Другими словами, написав плагин. Я еще не решился на это. Балуюсь с dune_folder.txt для простых вещей. Для отображения готовых коллекций — хорошо.
По раздачам — конечно раздаю, рейтинги везде выше единицы. Но активно только в самом начале. А потом — по требованию помогаю. Все держать включенным просто очень дорого.
Напоминаю, что я говорю про Samba на Linux. Т.е. сервер работает на его стороне, а не на стороне Windows.
Если вас смущает (а вас смущает!) эта замена — то уберите ее. Тогда символ "ø" будет спокойно создаваться в обоих случаях, а слеш ни при каких (да его и так не должно быть, может только если сможете напрямую в файловой системе поковыряться).
Любые замены можно использовать некорректно. По этой причине я и использовал символы, которые с большой вероятностью не нужно использовать. "ø" один из них. Если же ваше окружение требует чтобы конкретные из этих символов были доступны и не автоподменялись, настройте свой конфиг. Он сам по себе весьма прост.
1) Директория на стороне линукс сервера:
1?1
2) Отображение данной директории на стороне клиентов (линукс и Windows):
1¿1
3) Создаем директорию 2¿2 на стороне линуксового клиента и директорию 3¿3 на стороне Windows клиента.
4) Отображение данных директорий на стороне сервера:
2?2
3?3
Цель достигнута. Мы имеем директорию с запрещенным знаком вопроса, можем создавать и копировать такие директории/файлы.
Как «сломать» поведение? Создать директорию 4?4 на стороне линуксового клиента. Тогда данная директория будет отображаться как 4?4 для него самого (за счет трансляции), на диске сервера и для Windows клиента она будет отображаться как 44 (точка посередине).
Но это не является проблемой т.к. мы знаем что за клиенты у нас есть и т.д. Это просто нужно знать. Еще и еще раз напоминаю что любые подстановки можно «сломать» используя тот же символ, который заменяем, на системе, в которой он разрешен. Это нормальное и ожидаемое поведение.
Напишите, понятно ли я сейчас объяснил и нужно ли дополнять статью данным комментарием?
P.S. Да, я это проверил из-под Windows XP / 7 и заодно из самого Linux с примонтированной шарой. Обратное преобразование сработает и ничего не сломает. Просто не создадите/скопируете такой файл/директорию.
P.P.S. Вот ведь как всем интересно что будет с запрещенным слешем :)
Во-вторых, если вы внимательно посмотрите на текст статьи и ссылку про vfs_catia, то вы поймете что данный символ "ø" переведется в "/" и хоть он и запрещен, ничего не упадет, но файл такой не будет создан (из-за того что "/", он же 0x2f, запрещен в файловой системе т.к. это разделитель каталогов [не по теме, но интересно его вообще можно как-то создать и потом удалить? Напишите, кто эксперт по данной части, интересно!]).
Специально попробовал создавать и одно и другое. Ожидаемо ничего страшного не произошло. Если смущает, эту замену можно и убрать. Она скорее для перестраховки. Создать имя со слешем у меня не получилось, создаются вложенные папки или ничего ;)
Далее два варианта:
1) Релиз просматривается через виртуальные папки (набор симлинков с названиями без лишних символов и т.п.) — тут все хорошо и так.
2) Релиз просматривается напрямую через структуру папок (зачем? Потому что быстрее, потому что знаю что именно я хочу в данный момент открыть/скопировать/посмотреть) — тут спецсимволы вылазили во всей красе. До того как я решил эту проблему.
Подмножество второго варианта: файлы с такими символами, не относящиеся к видео. Вот они такие. И опять же, проблема решается.
Напомню что исправить названия можно и руками, но если что-то можно автоматизировать и облегчить себе жизнь — это нужно делать. Заодно и опыт, и удовлетворение от решения задачи.
Позволю себе уточнение: в виртуальных папках нет спецсимволов. Но помимо обработанных, есть еще необработанные, которые лежат физически на дисках и ждут своего часа. И т.к. жизнь не черно-белая штука, по этим дискам иногда приходится «ходить». И в этот момент архиважно видеть настоящее название папки, а не кракозябры из-за совместимости с эпохой «палеолита» ;)
В базе вообще все ID это sha1 хеши (соль тут ни к чему) + артикулы (это сокращенные хеши до 8 бит, экспериментально выбрал связку первых двух бит от sha1 + полный crc32 хеш, времени математически доказать этот выбор не было, не хватает таких глубоких знаний...).
SMB сервер пытается «нормализовать», думаете я не знаю что это «документированное поведение»? Именно это поведение в горле у меня сидело многие годы (только для файлов, которые я не контролирую, там где возможно, для виртуальных списков, я просто заменял эти символы в процессе генерации, не трогая исходники), и насколько я был рад когда обошел его через vfs (тоже ведь документированные модули, правда для другого, но их надо было найти и применить). Своей радостью я и решил поделиться, т.к. на эту тему не нашел ничего на хабре. Справедливости ради, я давно пользуюсь своим решением и оно меня полностью устраивает, просто написал только сейчас.
Каждый релиз обрабатывается спец.скриптом, который собирает мини-базу по релизу (названия, годы, форматы, плейлисты, размеры и прочее) и создает локальный db файл. Также есть отдельные процессы, которые делают «слепок» с диска (на случай потери информации), копируют эти db файлы и, главное, добавляют в базу по диску.
Финальным аккордом является другой процесс, который собирает информацию со всех дисков, сортирует, обрабатывает (например, вытягивает обновления с кинопоиска и imdb), и… складывает в SQL базу (на данный момент MySQL, но ничто не мешает перейти на PostgreSQL или что либо еще). Параллельно есть доп.процессы, которые генерируют списки для плееров, в Excel формате (через phpexcel) и т.п.
Есть веб-сайт (для личного использования), через который я могу поискать все что мне нужно в своей же базе — фильмы, актеров, жанры, связи (очень приятно найти пропущенный при просмотре фильм или отсылку к другому).
Для друзей и знакомых написан скрипт по копированию нужно по артикулу релиза (генерируется автоматически).
В целом это такой большой велосипед, хотя архитектурно не самый худший. Все масштабируется (есть шероховатости с class/type/format — новые сущности требуют изменения более чем одного файла, хотя следующий этап будет для 4K, что само по себе будет увлекательным) кроме обработчика всех баз данных по дискам — он всю информацию вбирает в себя целиком и только потом генерирует базу данных. Но я для себя решил что пока что не стоит заниматься map/reduce (хотя как сказано выше, все распараллелено еще на уровне дисков и их баз), т.к. имеется десятикратный запас по количеству релизов. Сейчас их около 4 тысяч и занимают они более 100 Тб, упрусь же в потолок по памяти я на петабайте, что даже финансово уже слишком для хобби. И меньшей из проблем будет увеличение оперативной памяти до 32 или 64 Гб с сегодняшних 16-ти.
Параллельно с разработкой софта улучшаю и железо — причем краеугольным камнем является философия оффлайнового хранения. Диски НЕ должны работать т.к. они нужны только считанные недели в году. Это также весьма занимательно и когда-нибудь я напишу большую статью о тех разных подходах, которые я проходил, принимал, отказывался и принимал снова, но уже на новом уровне (SATA PM, SAS, SAS Expander, DAS/iSCSI и т.п.).
2015 — Терминатор÷ Генезис — Terminator Genisys
А на Linux сервере (с самбой) он транслируется в такой:
2015 — Терминатор: Генезис — Terminator Genisys
Причем это происходит на лету! В чем и есть особая прелесть.
Насчет непосредственно создания файла с двоеточием. Да, на Windows системе надо создавать файл с ÷ вместо двоеточия (если вам действительно нужно получить двоеточие в названии файла на диске Linux сервера).
Само собой, что никакая замена не позволит научить летать, тех кто рожден ползать/ходить/подставить по вкусу. Но зато данный способ позволяет удобно (без приведения названий к маске 8.3) работать с любыми файлами из-под обеих систем. Для Windows ничего не изменится, как нельзя было использовать спец.символы, так и не будет можно. Это фундаментальное ограничение. Однако, его можно обойти заменой, как я показал выше.
Надеюсь, объяснил доходчиво. Если будут еще вопросы — спрашивайте!