Простой скрипт для резервного копирования
Все знают, что данные резервировать - вещь плезная и нужная, вот только мало кто всерьёз озадачивается этой проблемой до тех пор пока сохранность данных не оказывается под угрозой, но, вот только, как правило бекапить оказывается уже нечего.
На рынке, сейчас огромное количество решений для резервного копирования, но при небольшом количестве данных, вполне можно обойтись, тем софтом, который есть в любом linux дистрибутиве.
Вот типовая задача резервного копирования. Резервировать нужно компьютеры под управлением Windows и Linux. Бекап должен делаться ежеденевно на жёсткий диск одной из рабочих станций. При этом, сперва должен делаться полный бекап, потом, в течении, скажем, двух недель, каждый день, должен делаться инкрементальный бекап. Все файлы должны сохраняться в папку для бекапов. Через определённый временной интервал файлы нужно заливать на DVD-R болванки и класть в долгий ящик. При этом, файлы должны зиповаться, чтобы занимать меньше места и чтобы можно было восстанавливать файлы не пользуясь сторонним софтом. Софт должен быть с открытым исходным кодом и работать на всех вышеназванных платформах.
В качестве возможного софта я рассматривал несколько вариантов. Bacula. Первоначально это то, что я планировал использовать - мощная и гибкая система. Единственное, что меня смущало, это формат хранения данных. Индекс храниться в MySQL базе данных и если что случится с сервером то нужно будет сначала восстанавливать базу данных а потом бекапы. Другое свойство этой программы, которое мне совершенно не понравилось - это хранение резервных копий в файлах фиксированного размера. Изначально, Bacula заточена под магнитную ленту но, что хорошо для ленты то дико неудобно для файлов. Кроме этого, восстановление файлов оказалось делом довольно долгим так как делалось через специальную консольную программу с неудобным синтаксисом. Как вытащить файл из архива в случае если сервера под рукой нет для меня так и осталось загадкой.
Backuppc наверно, замечательная штука, но мне так и не удалось его корректно настроить, так как, для его работы нужен был определенный модуль perl, который мне так и не удалось поставить на один из копьютеров, поэтому от использования также пришлось отказаться.
Хотелось, что-то простого, что не требует монструозной настройки. Оказалось, что для решения данной задачи подойдет обычный rsync в сочетании с tar.
Основным вопросом при этом было как организовать инкрементный бекап. Rsync прекрасно прекрасно умеет создавать дифференциальные бекапы - т.е. разницу между двумя полными бекапами, но про инкрементальные бекапы в интернете я почти ничего не нашёл.
Но решение оказалось оказалось очень простым, ведь инкрементный бекап - это не что иное, как дифференциальный бекап относительно последнего бекапа. Поэтому, чтобы сделать архив содержащий изменные файлы после последнего полного или дифференциального бекапа достаточно просто сделать полный бекап а затем сравнить два последних бекапа и разница как раз и будет инкрементным бекапом. Но хранить полные бекапы за каждый день очень накладно, ведь каждая копия будет занимать много места. К счастью, хранить копии отдельно не обязательно - ведь rsync умеет использовать жесткие ссылки на одинаковые файлы. В том случе если файл не изменен то будет использована не копия а ссылка на файл, таким образом архив из n полных копий размером m будет в случае неизменных файлов будет занимать не n*m а всего лишь 1*m.
В результате получился вот такой скрипт.
Скрипт запускается через cron каждый день в определенноё время, когда компьютер простаивает, копирует данные в папку для резервного копирования и зипует её в именем кодирующим текущую дату и тип архива - полный или дифференциальный. Rsync умеет делать копии с нескольких серверов по ssh, что очень удобно. При этом для востановления достаточно распаковать сначала полный архив, затем последовательно накотить поверх все дифференциальные бекапы.
Скрипт не умеет отлеживать удаленные файлы, но задача резервного копирования, прежде всего, это - недопустить пропажи информации, поэтому задачи отслеживать удаление файлов у меня не стояло.
Таким образом, в системе сохраняется полная резервная копия за последние n дней, при этом места эти копии, благодаря использованию жёстких ссылок, занимают как одна копия. На компьютере с windows rsync, также, легко запускается для этого нужно поставить cygwin.
Софт для чтения книжек под Android
Очень люблю читать, но к сожалению, времени на это катастрофически не хватает, к тому же, если я начинаю читать какую нибудь книжку, особенно, если та окажется интересной, то, пока её не прочитаю от корки до корки, делать ничего не могу. Очень часто выручают аудиокниги - с ними можно одновременно и читать и делать что нибудь еще, если это что-то не требует значительной концентрации внимания, но аудиокниги есть под рукой не всегда.
Поэтому, чтобы превратить книгу в аудиокнигу долгое время я использовал старую добрую "Говорилку" - программку, которая умеет начитывать текст используя языковой движек от Microsoft. И хотя Microsoft уже давно не развивает свой Speach API а сайт "Говорилки" уже давно в оффлайне, как ни странно - ничего лучше этого решения я до последнего времени не встречал. Так что, говорилка оставалась для меня единственным вариантом для превращения текстовых книг в аудиокниги многие годы.
Но вот последнее время голосовые технологии неплохо продвинулись вперед и захотелось, чего-нибудь более удобного и более качественного. Есть, например, сервис от Google - но он пока не позволяет начитывать целые книги, разве что отдельные слова.
Интересным представлялся вариант синтеза речи под Андроид. К сожалению бесплатных русских голосов под Андроид я не нашёл, поэтому прикупил голос Katja от SVOX, который оказался вполне качественным, стоит он $3, что вполне терпимо. Оставалось только найти программу для чтения.
Как ни странно, нормальных программ для чтения голосом найти оказалось непросто. Большинство выглядели так, как будто их писали студенты двоечники, впрочем в большинстве случаев так оно и было. Еще несколько месяцев назад чтение голосом прекрасно выполнял Cool Reader, но, почему то, его новая версия читает только текущую страницу и когда доходит до конца начинает читать ту же страницу снова. Возможно, это какой-то баг, который будет когда-либо исправлен, не знаю.
В конце концов, для чтения книг голосом идеальным вариантом, по крайней мере для меня, оказался FBReader с плагином FBReader TTS+ - почему то родной плагин TTS у меня так не заработал, зато этот работает отлично.
Как включить Bluetooth на Ubuntu
Купил для ноутбука мышку - надоело пользоваться одним тачпадом. Так как в моём старом добром acer aspire 4810T есть модуль bluetooth то решил купить именно bluetooth мышку. Проводную брать как то не хотелось, с радиомодулем, втыкаемом в usb - тоже - лишние детали совершенно ни к чему, поэтому, мышка с bluetooth показалась мне идеальным вариантом. Сначала были сомненья, будет ли она работать с ubuntu - но как ни странно, мыша сразу подключилась и сразу отлично заработала.
Но вот вчера, после того как я выключил компьютер и снова его включил, bluetooth адаптер у него не включился. При этом, иконка bluetooth в верхней части экрана его вроде включает, но элементы управления на форме остаются неактивными. Такое впечатление, что модуль bluetooth отключился и не хочет включаться, хотя еще совсем недавно работал замечательно.
Примечательно, что клавиша Fn-F3 которая включает bluetooth в Windows, в Ubuntu не работает. Погуглив выяснил, что в большинстве случаев помогает если загрузиться в Windows и включить bluetooth там, вот только Windows я недавно подчистую снес чтобы поэкспериментировать с осью от Apple.
Включить bluetooth снова помогла команда:
> sudo hciconfig hci0 up
Нужны Java программисты для работы в Питере
Как то, в начале своей творческой карьеры, отослал резюме в одну крупную московскую фирму. С тех пор, примерно раз в год, они со мной связываются и предлагают работу, мол, давай, приезжай, сделаем хорошую зарплату, поселим, семью всем обеспечим, только соглашайся. Недавно связались ещё раз. На этот раз предложили переехать в Питер, причём, условия очень даже неплохие, зарплата тоже должна быть не плохой, хотя и не колятся какая, а ведь могли бы из вежливости озвучить диапазон, раз уж сами предлагают вакансию.
Но так как сейчас я при деле, да и планов куда-либо перезжать у меня нет, то вот, решил спросить, не надо ли кому? Сразу скажу, вы должны быть реально неплохим Java-программистом уровня Senior Java Developer или Senior j2EEWeb developer, ибо требования довольно серьёзные, но и условия не плохие. Если кому нужно - пишите мне в форму обратной связи на странице контакт.