Как я на домашнем компьютере файлы организовывал, синхронизировал и создавал резервные копии



    Впервые я столкнулся с проблемой захламления жестких дисков на компьютере в старших классах школы. Тогда я решил проблему структурированием всех своих документов при помощи Evernote, проставив нужные теги и перенеся все документы в этот чудо-софт. Все остальные файлы как лежали в куче, так и продолжили лежать.

    В универе файлов стало еще больше, количество компьютеров дома возросло до 3 штук, я начал делать бэкапы. Пока просто, делая копии текущих папок на компьютере, не особо заморачиваясь с их структурой. Под конец обучения я задумался, стоит ли хранить огромное количество своих документов на внешних серверах. Подумав немного, решил, что лучше так не делать и решил слезть с иглы Evernote. Предварительно я продумал структуру хранения файлов на компьютере, чтобы даже без поиска легко найти нужную информацию. Каждой теме, которая меня интересовала, я создавал папку в /home/username папке. Это я называл категориями. Внутри каждой категории были подпапки-проекты, обязательной была папка misc практически в каждой папке, чтобы в файловом менеджере не видеть кучи беспорядочно наваленных неструктурированных файлов. Например, у меня были папки Bioinformatics/Aligner, Development/Projects/GameOfLife. Были четкие правила наименования файлов и папок (без нижних подчеркиваний, camelCase, папки с большой буквы, файлы с маленькой). Всё вроде было хорошо, но я ленился и не всегда красиво выкладывал файлики в нужные папки, что в конечном итоге привело к захламлению моей структуры. Я решил попробовать что-то другое…

    Я решил поднять mediawiki на локалхосте, и синхронизировать её между двумя основными компами (один дома стационарный, другой ноут, который всегда с собой). Вся синхронизация всех папок, в которых хранились нужные файлы (да и бэкапы тоже) делались при помощи rsync. Когда я приходил домой, я запускал скрипт iCameHome.sh, который заливал все изменения на домашний комп, который одновременно был и сервером бэкапов (да и сейчас он тоже им является). Когда я уходил на работу, я запускал iWentOut.sh, который заливал изменения в обратную сторону. Всё вроде было хорошо, домашняя вики легко и непринужденно синхронизировалась, как и остальные папки на компьютере, которые я включил в rsync скрипт. Но я стал замечать, что чем дальше, тем меньше заполняю свою википедию, так как чтобы найти нужную статью, требуется какое-то время, несмотря на проставленные категории у статей. И мне всё сильнее не хочется это делать. Поиск в mediawiki мне не понравился, возможно я не дочитал и не допилил его. Но в принципе вот.

    К чему я пришел. Мой план по переходу на новую систему структурирования файлов состоял из двух частей:

    • Настройка git сервака на домашнем стационарном компе
    • Виртуализация.


    Первый пункт очень прост. Берем и ставим git-core, добавляем ssh ключ ноута в список доступных, запрещаем ssh доступ по паролю и открываем ssh порт стационарного компа наружу. Особо параноидальным личностям рекомендуется настроить port knocking. После этого, для каждой папки, которую необходимо синхронизировать создаем git репозиторий и коммитим в него с обоих компов — со стационарного и ноута, в зависимости от того, когда и где сделали изменения.

    Второй пункт состоит в виртуализации рабочего пространства. Сначала я делаю типовые виртуалки: виртуалка с поднятым mysql + настроенной на меня IDE, виртуалкой для безопасного вебсерфинга, виртуалкой под какой-то определенный проект. После того, как виртуалка доводится до ума, делается полный её бэкап. Потом синхронизируются лишь папки проектов через git по способу, описанному выше. Вся работа идет в виртуалках, на хосте у меня остался Skype, Minecraft, Торрентокачалка и VLC плеер.

    Какие плюсы данного решения?

    • Минимальные требования к хосту (касательно настроек). Нужен лишь virtualbox и git. Следовательно, не важно, под какой системой работать, можно легко экспериментировать.
    • git сервак поднимается одной командой, все остальные настройки, как я расписал выше тоже очень просты
    • Можно синхронизировать как все папки (добавив git pull для нужных репозиториев), так и отдельные папки проектов, сделав pull изнутри папки. С rsync здесь сложнее, так как надо лезть в общий скрипт и копировать команду, так как она длинная и всегда помнишь все пути до файлов.
    • Если нет возможности просинхронизировать репозиторий, то можно безопасно изменять файлики, добавлять, закоммитить локально, а потом сделать мердж
    • Есть история, любое удаление файла или потеря каких-то изменений будет записана. Можно проследить изменение файлов.


    Минусы?

    • Возможно, будет сильно распухать история репозиториев, но пока ничего не могу сказать, перешел на такую систему только недавно.
    • Невозможность просинхронизировать файлы с телефонами/планшетами, но лично для меня это не нужно. Я пришел к тому, что на телефоне/планшете должны быть только те файлы, которые где-то уже есть еще на стационарном компьютере, так я обезопасил себя от потери файлов на мобильных устройствах


    Буду рад услышать в комментариях, кто как решает проблему резервного копирования и синхронизации данных между устройствами.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 33

      0
      Считайте меня ретроградом и параноиком, у меня три компа и синхронизирую я их через внешний зеркальный raid из двух 2,5" дисков. К ноуту переходник usb3-sata, а в стационарах просто салазки.
      При этом деление папок у меня по программам. Т.е. есть папка Projects, в которой есть папки типа OrCAD, Keil, Matlab и прочие. А уже внутри них конкретные папки проектов. Для всей документации отдельная папка, в которой идет деление по темам, если это актуально, и по производителю. Плюс есть папка в корне, где тоже лежат папки по проектам, но там складируется всё, что не подходит для других папок, типа счетов, диаграмм и прочего. Пользуюсь такой структурой уже больше 8 лет. Правда, это всё на винде.
        0
        Синхронизируете-то, собственно, какой программой и каким механизмом? В какой момент происходит копирование с/на 2.5" диски и как решается, что именно и куда копировать?
        • UFO just landed and posted this here
            0
            Синхронизирую при помощи GoodSync. Каков механизм синхронизации? Видимо, по дате изменения файла. Т.е. это не гит, в котором можно срастить сами файлы. У меня таких задач нету, поэтому всё устраивает.
            Копирование на 2,5" делаю по завершении рабочего дня, хоть иногда и ленюсь. Гудсинк выдает список изменений, что куда будет скопировано. И если возникли конфликты, то их нужно разрешить вручную. Самый обычный пример — файл изменен с двух сторон.
              0
              Я на самом деле с трудом представляю, как по дате изменения файла (и даже дате + самим файлам) можно решить вопрос о том, есть конфликт или нет.

              Вот есть файл со стороны A, у него timestamp t1, есть файл с стороны B, timestamp t2. В моем представлении единственное, что в таком случае можно сделать, это скопировать A->B если t1 > t2, B->A если t1 < t2 и ничего не копировать, если t1 == t2.

              Собственно, вопрос о механизме синхронизации остается ;)
                0
                Гм. Вот тут www.goodsync.com/how-it-works/key-features в разделе Sync Algorithm они пишут, как синхронизируют.
                  0
                  Боюсь, что как раз там толком ничего не пишут, кроме каких-то невнятных маркетинговых «у нас все хорошо и мы много чего умеем». В википедии про них написано чуть больше и чуть внятнее — по крайней мере становится понятно, что для того, чтобы понять, что синхронизировать, они ведут базу данных файлов.

                  Вариант с центральной (или chained) базой данных понятен, но и все его минусы в виде единого центрального слабого места в целом тоже понятны…
          +3
          Для синхронизации попробуйте git-annex. Он использует инфраструктуру git для хранения и передачи данных (можно хоть на github синхронизировать), при этом синхронизация происходит автоматически при изменении файлов.
          Ну и есть Bittorrent Sync, но у него есть серьёзные проблемы.
            +1
            Ух ты! Спасибо. Интересно, что происходит при конфликтах файлов.
              0
              Чем же вам Bittorrent Sync не угодил, какие у него серьёзные проблемы вы увидели?
              Пользуюсь им больше года, работает отлично.
                0
                — Отсутствие версионности, старую версию файла не восстановить. Есть папка для удалённых файлов, но это не совсем то.

                — Потенциальная потеря данных: если изменить файл сначала в одном месте, потом в другом и запустить процесс синхронизации, то будет сохранена только последняя версия файла, старая версия будет утеряна.

                — Отсутствие атомарности «коммитов»: если изменить содержимое папки сначала на одном компьютере и одновременно на другом, то после синхронизации получится «каша» из обеих папок, а если файлы в папке имели одинаковые названия, то они будут перезаписаны в соответствии с временем последнего изменения файла.

                Как-то так. Ну и по мелочи: закрытый протокол, закрытый код.

                По мне Bittorrent Sync — это средство не для синхронизации данных в процессе работы над ними, а для односторонней доставки, например, на сервер или на группу серверов.
              0
              Я вижу вы тоже большой любитель порядка.

              Посему вопрос: какие цели у этой системы?
              Ну и second-system effect налицо
                +2
                Наверное, вы спрашиваете про синхронизацию.

                Самая главная причина — синхронизация данных между ноутом и стационарным компом. Дома я люблю использовать именно стационарный. Но также люблю, чтобы те же файлы были и там, и там.

                Вторая причина — удобное создание резервных копий. Помимо самих бэкапов у меня добавляется история, что тоже очень приятно.

                Если про виртуалки, то привлекает удобство создания резервных копий и быстрое восстановление из них, в отличие от восстановления обычной системы.
                  0
                  Судя по целям, «обычные люди» для этого используют дропбокс. Гики rsync и свой сервер.

                  Просто в статье момент между медиавики и свой гитсервер не совсем понятен.
                    0
                    Я юзал rsync и сейчас продолжаю юзать, но сделать бэкап системных файлов, например, и его восстановить намного геморнее, чем сделать бэкап виртуалки (который я тоже делаю при помощи rsync). Вот я об этом.

                      0
                      Угу. Теперь понятно. Спасибо
                +2
                Я не большой любитель порядка, но для синхронизации нужных файлов недавно нчал использовать Bittorrent sync. Из плюсов — есть приложения для ios/android. Из минусов — иногда при отсутствии связи они залипают и не показывают скачанный ранее файл
                  +10
                  — .git скоро будет занимать места больше, чем сами файлы
                  — шифрованные файлы (trueCrypt) будут каждый раз коммитится целиком
                  — картинки и киношки будут падать в реп целиком
                  — логи будут коммитится
                  — многие проги создают временные файлы, которые тоже нужно перебрасывать между компами; phpStorm, например.

                  Сам все документы и рабочие файлы храню в дропбокс+SkyDrive, ачивку с виртуалками и .git уже получил года 2 назад)
                    0
                    — удалённые файлы гит всё равно будет хранить (если только принудительно их не вычищать, что так же создаёт дополнительные неудобства)

                    >> — логи будут коммитится
                    есть .gitignore, но таки да, его нужно настраивать
                      0
                      Настроить .gitignore вообще не проблема. А синхронизировать кино и прочие монструозные файлы незачем. Есть стационарный комп, там все фильмы, захотел, подрубился и скачал нужный фильм. Моя git система в основном для частоизменяемых файлов.

                      А системные файлы, так как большинство задач выполняются в виртуалках, легко бэкапятся при помощи rsync.
                        0
                        А, т.е. это не система бэкапа для всего и вся, а просто средство ведения своих доков/скриптов и прочей фигни?
                        Из статьи это было неочевидно, по крайней мере для меня :)
                          0
                          Да, наверное я плохо сформулировал. До этой системы я бэкапил всё и вся при помощи rsync.

                          Сейчас я делаю:
                          * бэкапы частоизменяемых и частоиспользуемых файлов (доки, код, частоиспользуемые книги ) при помощи git
                          * на стационарном компе происходят бэкапы всего и вся при помощи rsync в кроне:
                          * Раз в день делается полный бэкап (инкрементальный)
                          * Раз в неделю делается полный бэкап (инкрементальный)
                          * Раз в месяц делается архив, содержащий всё и вся.
                          * В виртуалках выполняются все задачи, связанные с работой (виртуалка для проекта), серфингом. Бэкапы виртуалок сделаны после настроек виртуалки, все рабочие файлы внутри них синхронизируются тоже гитом

                          То есть, чтобы восстановится при полном крахе системы, мне нужно быстро поднять систему (у меня arch, за полчаса подниму), поставить virtualbox + скопировать папку с виртуалками и выкачать гитом нужные репозитории.
                    +2
                    Использую NAS от Synology. Синхронизирую и бэкаплю все от компа до телефона у себя и всех родственников. Стоит не дешево, зато удобно.
                      0
                      У меня все проще, поднял VPN на дом.серваке, расшарил файлопомойку, из любой точки планеты всегда есть доступ к файлам.
                      По необходимости и бекап можно настроить.
                      Поднять веб-морду для шары, индексируем файлы, и делаем поиск, нет проблем. [дальше по желанию и вашим требованиям], лично у меня морда позволяет манипулировать файлами и директориями, просматривать фото, из соответствующей директории на весь экран + слайдшоу, проигрывать музыку, пробовал фильмы но железки не тянут HD, мониторинг состояния сервера и запуск остановка некоторых сервисов.
                        0
                        pls, поделитесь ссылкой на веб-морду и т.д…
                        +2
                        ownCloud вполне справляется с этим.
                        Если для проектов — github.
                        Для приватных проектов — bitbucket.
                        Для «супер» приватных проектов — gitlab.

                        Для бекапа всего на другой сервер — rsnapshot.

                        Что я забыл?
                          –1
                          Чем больше читаю подобные топики, тем сильнее начинаю любить Acronis и TimeMachine :)
                            0
                            Та же TimeMachine не решает проблем, поднятых в данной статье.
                              0
                              TimeMachine — это бэкапы.
                              Можно, конечно, извратиться и использовать её для синхронизации — сделать бэкап на первом компе, потом вручную восстанавить содержимое нужной папки из бэкапа на второй комп и наоборот.
                              Но merge двух папок там не сделаешь, нужно всегда последовательно копировать всю папку целиком.
                              0
                              Использую seafile для синхронизаци данных между устройствами чуть более полугода (после того как ubuntu one прикрыли), каких-либо проблем и косяков не замечено + умеет версионирование.
                                0
                                Хочу обратить внимание на эту программку. Мною писана для создания резервных копий и спецом дабы уйти от написания скриптов копирования. Фишка программы в том что в ключах можно использовать несколько масок на ключ. А сами ключи разделены на ключи для папок и для файлов. Что позволяет очень гибко одной коммандой скопировать только нужную информацию исключив все ненужное. Как уже сказал, программа позволяет в большинстве случаев отказаться от написания сложных скриптов копирования. Присутствуют и другие навороты. Если кому интересно пользуйтесь, програма халявная. Если будут интересные предложения функционал можно дальше расширить (хотя того что там уже есть, на мой взгляд, уже вполне достаточно).
                                  0
                                  К сожалению (даже к счастью), не пользуюсь ОС Windows уже 8 или 9 лет.
                                    0
                                    в свое время пробовал перейти но жизнь (в основном работа) заставляли возвращаться в окна.

                                Only users with full accounts can post comments. Log in, please.