December 1st, 2013

nyaload

Велосипедный бэкап

При написании своего велосипедного питоньего бэкапа под windows я наткнулся на такие грабли.

* Файл заблокирован работающим процессом (реестр windows, sqlite-база данных файрфокс). Как решать эту проблему - не знаю. Не выключать же браузер на время бэкапа.

* Странные права на файл - сам себе запретил его читать. Могу вернуть права обратно, но скрипт бэкапа считает файл недоступным. Почему у меня такое постоянно происходит - не знаю.

* Антивирус выдергивает из-под скрипта бэкапа то, что ему показалось подозрительным. В т.ч. скомпилированные мною свои собственные exe-файлы ("файл редкий"), или административные/сетевые утилиты.

* Файл просто странный - например, имя файла созданное через NTFS-интерфейс, недоступное через Win32-API. Обычно на такие можно забить. Но вот русские буквы, иероглифы и пробелы - это не обсуждается, это штатная ситуация (для коллекции музыки и торрентов, например)

* Вообще, надо быть готовым "при копировании файла произойдет непредвиденная хрень".

* Если делаете "список файлов/директорий которые не надо копировать" - не забудьте про правильную нормализацию Upper/lower case (и прочего) при сравнении путей, и warning на exclude-правила, которые не были применены.

* Возможно, кто-то наткнется на грабли с ссылками на файлы (hardlinks, softlinks, junctions), когда один и тот же файл - доступен разными путями. Мне тьфу-тьфу не актуально.

* При оптимизации "не копировать скопированое" - timestamps естественно надо сравнивать на равенство, а не на больше-меньше (rename-move не обновляет mod time, что очень хорошо, но ломает логику "файл по этому пути менялся позже чем").

* При удалении файлов - строго необходимо писать код изменения прав на файл, полно файлов с "защитой от записи/удаления", неясного происхождения (самое понятное - .svn-папки).