Na serwerze zainstaluj git
cd /
git init
git add .
git commit -a -m "Yes, this is server"
Następnie przejdź /.git/
do dysku sieciowego (SAN, NFS, Samba cokolwiek) lub innego dysku. Użyj zadania cron co godzinę / dzień itp., Aby zaktualizować zmiany. Katalog .git zawierałby wersjonowaną kopię wszystkich plików serwera (z wyjątkiem niepotrzebnych / skomplikowanych, takich jak / proc, / dev itp.)
Dla nie-ważne serwerze rozwoju, gdzie nie chcesz kłopotów / koszty ustawienie go na odpowiednim systemie zapasowym, a gdzie kopie byłyby tylko dla wygody (IE nie potrzebują do wykonania kopii zapasowej tego serwera, ale byłoby zaoszczędzić jakiś czas, jeśli coś pójdzie nie tak), czy może to być prawidłowe rozwiązanie do tworzenia kopii zapasowych, czy może po prostu przewróci się w kupie kupy?
Odpowiedzi:
Nie jesteś głupią osobą. Używanie
git
jako mechanizmu tworzenia kopii zapasowych może być atrakcyjne i pomimo tego, co powiedzieli inni ludzie,git
działa dobrze z plikami binarnymi. Przeczytaj tę stronę z Git Book, aby uzyskać więcej informacji na ten temat. Zasadniczo, ponieważgit
nie używa mechanizmu pamięci delta, tak naprawdę nie obchodzi go, jak wyglądają twoje pliki (ale użytecznośćgit diff
jest dość niska w przypadku plików binarnych z konfiguracją standardową).Największym problemem związanym z używaniem
git
kopii zapasowej jest to, że nie zachowuje ona większości metadanych systemu plików. W szczególnościgit
nie rejestruje:Możesz rozwiązać ten problem, pisząc narzędzia do jawnego zapisywania tych informacji w repozytorium, ale może to być trudne.
Wyszukiwanie w Google metadanych kopii zapasowej git daje szereg wyników, które wydają się warte przeczytania (w tym niektóre narzędzia, które już próbują zrekompensować problemy, które tu przedstawiłem).
etckeeper został opracowany do tworzenia kopii zapasowych
/etc
i rozwiązuje wiele z tych problemów.źródło
Nie korzystałem z niego, ale możesz spojrzeć na bup, który jest narzędziem do tworzenia kopii zapasowych opartym na git.
źródło
Może to być prawidłowe rozwiązanie do tworzenia kopii zapasowych, etckeeper opiera się na tym pomyśle. Ale miej oko na
.git
uprawnienia do katalogu, w przeciwnym razie wypychanie/etc/shadow
może być odczytane w.git
katalogu.źródło
Chociaż technicznie możesz to zrobić, postawiłbym dwa zastrzeżenia:
1, Używasz źródłowego systemu kontroli wersji dla danych binarnych. Dlatego używasz go do czegoś, do czego nie został zaprojektowany.
2, martwię się o twój proces programowania, jeśli nie masz procesu (dokumentacji lub automatyzacji) do budowy nowej maszyny. Co jeśli trafisz, kup autobus, kto by wiedział, co robić i co było ważne?
Odzyskiwanie po awarii jest ważne, jednak lepiej zautomatyzować (skrypty) konfigurację nowego pudełka programistycznego niż po prostu wykonać kopię zapasową wszystkiego. Oczywiście użyj git do skryptu / dokumentacji, ale nie do każdego pliku na komputerze.
źródło
Używam git jako kopii zapasowej dla mojego systemu Windows, i było to niezwykle przydatne. W dolnej części postu pokazuję skrypty, których używam do konfiguracji w systemie Windows. Używanie git jako kopii zapasowej dla dowolnego systemu zapewnia 2 duże zalety:
Konkluzja: Kopia zapasowa git zapewnia niewiarygodne możliwości kontrolowania sposobu tworzenia kopii zapasowych.
Skonfigurowałem to w moim systemie Windows. Pierwszym krokiem jest utworzenie lokalnego repozytorium git, w którym będziesz zatwierdzać wszystkie swoje lokalne dane. Zalecam użycie lokalnego drugiego dysku twardego, ale korzystanie z tego samego dysku twardego będzie działało (ale spodziewane jest, że wciśniesz go gdzieś zdalnie lub inaczej wkręcisz się, jeśli dysk twardy umrze).
Najpierw musisz zainstalować cygwin (z rsync), a także zainstalować git dla Windows: http://git-scm.com/download/win
Następnie utwórz lokalne repozytorium git (uruchom tylko raz):
init-repo.bat:
Następnie mamy nasze opakowanie skryptu kopii zapasowej, które będzie regularnie wywoływane przez program planujący systemu Windows:
gbackup.vbs:
Następnie mamy sam skrypt kopii zapasowej wywoływany przez opakowanie:
gbackup.bat:
Mamy plik exclude-from.txt, w którym wszystkie pliki ignorujemy:
exclude-from.txt:
Musisz udać się na dowolne repozytorium i zrobić na nich „git init --bare”. Możesz przetestować skrypt, wykonując skrypt kopii zapasowej. Zakładając, że wszystko działa, przejdź do Windows Scheduler i wskaż cogodzinną kopię zapasową w kierunku pliku vbs. Następnie co godzinę będziesz mieć historię swojego komputera. Jest to niezwykle wygodne - każdy przypadkowo usuwa fragment tekstu i tęsknisz? Po prostu sprawdź swoje repozytorium git.
źródło
Nie jest to zły pomysł, ale myślę, że należy postawić 2 czerwone flagi:
... ale nadal może być dobrym wsparciem dla rzeczy związanych z korupcją. Lub tak jak powiedziałeś, jeśli folder .git / jest gdzieś indziej.
... Może więc być konieczne powiedzenie kronice dodawania tagów, a następnie upewnienie się, że zatwierdzone pliki, które nie są oznaczone, zostaną wyczyszczone.
źródło
rm -Rf /
spowodowałoby to pewne problemy. Nasz obecny system tworzenia kopii zapasowych przechowuje dane przez 2 lata lub 50 wersji (w zależności od tego, co nastąpi wcześniej), więc nasza kopia zapasowa stale się powiększa. Ale podoba mi się pomysł dodawania tagów, moglibyśmy mieć tagi „codzienne”, „cotygodniowe” itp.Nie próbowałem tego z pełnym systemem, ale używam go do tworzenia kopii zapasowych MySQL (z opcją --skip-Extended-Insert) i to naprawdę działa dobrze dla mnie.
Będziesz mieć problem z plikami danych binarnych (cała ich zawartość może i będzie się zmieniać) i możesz mieć problemy z
.git
powiększeniem się folderu. Polecam utworzenie.gitignore
pliku i tworzenie kopii zapasowych tylko plików tekstowych, których naprawdę potrzebujesz.źródło
Kiedyś opracowałem rozwiązanie do tworzenia kopii zapasowych oparte na subversion. Chociaż działał całkiem dobrze (a git powinien działać jeszcze lepiej), myślę, że są tutaj lepsze rozwiązania.
Uważam rsnapshot być jeden z lepszych - jeśli nie lepiej. Przy dobrym użyciu twardego łącza mam serwer plików o pojemności 300 GB (z pół milionem plików) z codzienną, cotygodniową i miesięczną kopią zapasową sięgającą nawet jednego roku. Całkowite wykorzystane miejsce na dysku to tylko jedna pełna kopia + przyrostowa część każdej kopii zapasowej, ale dzięki linkom twardym mam pełną „katalog” na żywo w każdej z kopii zapasowych. Innymi słowy, pliki są dostępne bezpośrednio nie tylko w dzienniku. 0 (najnowsza kopia zapasowa), ale nawet w dzienniku. 1 (wczoraj) lub co tydzień. 2 (dwa tygodnie temu) i tak dalej.
Udostępniając folder kopii zapasowej Sambie, moi użytkownicy mogą pobrać plik z kopii zapasowej, po prostu wskazując swój komputer na serwer kopii zapasowej.
Inną bardzo dobrą opcją jest rdiff-backup , ale ponieważ lubię mieć dostęp do plików zawsze po prostu kierując Explorer do \\ nazwa_serwera, rsnapshot było dla mnie lepszym rozwiązaniem.
źródło
Miałem ten sam pomysł, aby wykonać kopię zapasową za pomocą git, głównie dlatego, że pozwala on na tworzenie kopii zapasowych w wersji. Potem zobaczyłem rdiff-backup , który zapewnia tę funkcjonalność (i wiele więcej). Ma naprawdę ładny interfejs użytkownika (spójrz na opcje CLI). Jestem z tego całkiem zadowolony. To
--remove-older-than 2W
jest całkiem fajne. Pozwala tylko usunąć wersje starsze niż 2 tygodnie.rdiff-backup
przechowuje tylko różnice plików.źródło
Jestem bardzo nowy w Git, ale domyślnie nie mam lokalnych oddziałów i muszę zostać jawnie przekazany do zdalnych repozytoriów? To była nieprzyjemna i nieoczekiwana niespodzianka. W końcu, czy nie chcę, aby wszystkie moje lokalne repozytoria były „archiwizowane” na serwerze? Czytanie książki git :
Dla mnie oznaczało to, że te lokalne oddziały, podobnie jak inne pliki inne niż git na moim komputerze lokalnym, są narażone na ryzyko utraty, chyba że będą regularnie tworzone kopie zapasowe za pomocą innych niż git sposobów. I tak to robię, ale złamało to moje założenia, że git „tworzy kopię zapasową wszystkiego” w moim repozytorium. Chciałbym wyjaśnić na ten temat!
źródło
Uważam, że jest to dobra metodologia dla moich deweloperów. Zmienia je z czegoś, co wymaga kopii zapasowej, do samego punktu końcowego wdrażania.
Wszystkie manifesty konfiguracji i instalacji pakietu są przechowywane w Puppet, umożliwiając łatwe ponowne wdrożenie i aktualizacje konfiguracji. Kopia zapasowa katalogu Puppet jest wykonywana za pomocą git. Kickstart służy do pierwszego wdrożenia.
Utrzymuję również niestandardowe repozytorium YUM dla wszystkich rozwijanych pakietów. Ma to tę dodatkową zaletę, że wszystkie pakiety, z którymi pracujemy, nie są po prostu pozostawione jako nienadzorowane pliki binarne w systemie lokalnym - jeśli tak się stanie, a pliki zostaną zniszczone. Ktoś nie przestrzegał właściwej procedury.
źródło
Możesz sprawdzić bup na github, który został zaprojektowany, aby służyć do używania git do tworzenia kopii zapasowych.
źródło
Jest to podejście, które jest stosowane, ma sens.
Keepconf używa rsync i git do tego zadania, jest to opakowanie tych narzędzi, aby ułatwić sobie zadanie.
Potrzebujesz tylko centralnego serwera z kluczami ssh skonfigurowanymi do uzyskania dostępu do serwerów zapasowych i kilkoma liniami w pliku konfiguracyjnym. Na przykład jest to mój własny plik do przechowywania wszystkich / etc / i zainstalowanych pakietów debian:
Dzięki temu mam kopię zapasową rsync i git commit.
źródło
Moim osobistym zdaniem jest to w zasadzie wszystko wstecz. Wypychasz pliki do kopii zapasowej, a nie wyciągasz je.
Znacznie lepszym rozwiązaniem byłoby scentralizowanie konfiguracji serwera, a następnie ściągnięcie go w dół, używając czegoś w rodzaju marionetki.
To powiedziawszy, może działać, po prostu nie sądzę, że byłoby tak dobrze.
Spróbuj zajrzeć do backuppc - jest dość łatwy w konfiguracji i szczerze mówiąc genialny.
źródło
To by działało trochę, ale dwa zastrzeżenia.
Dodania plików nie będą pobierane automatycznie podczas zatwierdzania. Użyj --porcelean om git status, aby znaleźć nowe rzeczy do dodania przed wykonaniem zatwierdzenia.
Dlaczego kłopot ze zdalnym montażem do .ssh? To może być kruche Bd, nie będziesz wiedział, że to się nie udało. Użyj zdalnego repozytorium na drugim końcu z normalnym loginem klucza ssh. Tak długo, jak repozytorium jest puste i działa tylko z jednego źródła, gwarantuje się, że nie zostanie wykonane połączenie.
źródło