Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kopia plików przez rdiff-backup
Forum PHP.pl > Forum > Serwery WWW
!*!
Rsync miał opcje -delete która kasowała pliki na serwerze zdalnym jeśli nie było ich w źródle. Czy rdiff-backup ma podobną właściwość? Zauważyłem pewien zgrzyt i ilość plików się nie zgadza, jest ich więcej na serwerze zapasowym niż w źródle i zastanawiam się jak ugryźć temat. Robienie nowej rewizji nie za bardzo mi się uśmiecha...
Pyton_000
A może powiedz co chcesz osiągnąć? I czemu nie rsync?
!*!
Rsync nie robi kopii przyrostowych. A to jest potrzebne przy wysylaniu plikow ktore sa generowane z calego dnia, a odzyskanie musi byc mozliwe np z konkretnej godziny. Ilość plikow jest duża, 2TB.
Pyton_000
A może to wink.gif https://blog.piotrows.pl/rsync-przyrostowy-backup-v-1-1
Tylko jeśli robisz backup godzinny to musiałbyś sobie lekko zmodyfikować skrypt bo on robi backupy dzienne.
!*!
To się nie sprawdzi i nie nazwałbym tego backupem przyrostowym, nie jeśli bierzemy dużą ilość plików. Twój skrypt tworzy i wysyła zawsze pełną kopię, a nie różnicę smile.gif
Pyton_000
to źle patrzyłeś wink.gif Skrypt pobiera tylko te pliki które sie zmieniły, a te które nie zostają podlinkowane.
!*!
Tak zgadza się, ale to działa w obrębie jednego dnia. Wyślij pliki z folderu A do folderu B. Dostaniesz folder z datą 2016-11-25, teraz jednak, dnia kolejnego całość zostanie wysłana ponownie do folderu 2016-11-26, a nie tylko to co zostało zmienione i to jest ta różnica.

edycja:

Przyrost jest tutaj złudny. Raz że rsync nie ma takiej opcji, a dwa, zmiana nazwy folderu robi zawszę pełną kopię i sprawdza różnicę (odpal to z --progress). Mając 2TB danych i kopia musi być co godzinę, strzeliłbym sobie tym w kolano (samo wysyłanie pełnej kopii zajmuje więcej niż godzina), chyba że masz pożyczyć dysk taki ze 10 YB smile.gif
zegarek84
o ile masz możliwość może po testuj lokalnie z linux'owym systemem plików:
2014/03/22 Btrfs Tips: Doing Fast Incremental Backups With Btrfs Send and Receive
Incremental Backup
Pyton_000
Tak każdego dnia masz "pełny backup" i jest to przyrostowa wersja. Fakt że w prawdziwej przyrostowej wersji masz tylko zmienione pliki a tutaj masz całą zawartość.
Ale zobacz benefity tego rozwiązania.

Tworząc normalne kopie przyrostowe aby odtworzyć backum musisz wgrać pełną kopię a następnie wszystkie incrementale. Zajmuje Ci to czas.
W moim rozwiązaniu po prostu wgrywasz kopię z danego dnia/godziny i koniec. Nic więcej nie musisz robić.

Możesz mi wyjaśnić dlaczego mój skrypt Ci się nie sprawdzi? Bo uważam że jednak się sprawdzi i to znakomicie. Bo o ile pliki nie są zmienione to ich po prostu nie pobiera, a dociąga tylko nowe. Dodatkowo robiony jest hard-link na nie zmienionych plikach co za tym idzie oszczędzasz miejsce.

Defacto różnica między incrementalem a moim skryptem jest taka że tam dostajesz Tylko zmienione pliki, a u mnie masz pełną kopię.
!*!
@Pyton_000 - nie wykonujesz tym skryptem kopii przyrostowej, tylko różnicową. W jakim celu mam wysyłać każdego dnia, co godzinę całą kopię? To jest technicznie nie realne, jak również czasowo. W kopii przyrostowej pełna kopia zawsze jest na miejscu (od początku, podobnie jak w różnicowej), a pliki są dogrywane i masz wykaz różnych wersji. Wybierasz ostatnią lub z określonego dnia i czekasz aż się całość sama ogarnie, przecież z wykasowaniem listy różnic, nie kasujesz plików jakie zostały wgrane, one nadal tam są, tracisz tylko możliwość odtworzenia z danego okresu, ale "now" odtworzy i tak 1:1 od początku

Cytat
Możesz mi wyjaśnić dlaczego mój skrypt Ci się nie sprawdzi? Bo uważam że jednak się sprawdzi i to znakomicie. Bo o ile pliki nie są zmienione to ich po prostu nie pobiera, a dociąga tylko nowe. Dodatkowo robiony jest hard-link na nie zmienionych plikach co za tym idzie oszczędzasz miejsce.

Sam sobie odpowiedziałeś:
Cytat
Defacto różnica między incrementalem a moim skryptem jest taka że tam dostajesz Tylko zmienione pliki, a u mnie masz pełną kopię.


Przemyśl to jeszcze raz. Robisz kopię plików z katalogu A, który ma 2TB danych, folder z kopią nazywa się 2016-11-26, co godzinę dogrywane są nowe pliki które powstały w folderze A. I tak się dzieje przez dajmy na to tydzień. Każdy dzień zrobił pełną kopię katalogu A, co daje nam 14TB danych. Już widzisz, że to nie ma sensu? Gdzie przy kopii przyrostowej z folderu A miałbym dorzucone tylko np 700MB dziennie.

Pyton_000
No przecież Ci tłumaczę że nie będziesz miał 14TB danych, bo hard-linki załatwiają ten problem. One nie zajmują miejsca na dysku (no może poza nazwą). Przykład:

Kod
# lpiotrowski /tmp/test [15:45:04]
→ dd if=/dev/zero of=regular count=10240 bs=10240
10240+0 przeczytanych recordów
10240+0 zapisanych recordów
skopiowane 104857600 bajtów (105 MB), 0,0892433 s, 1,2 GB/s

# lpiotrowski /tmp/test [15:45:17]
→ ls -las
razem 102436
     4 drwxrwxr-x  2 lpiotrowski lpiotrowski      4096 lis 26 15:45 .
    32 drwxrwxrwt 14 root        root            32768 lis 26 15:42 ..
102400 -rw-rw-r--  1 lpiotrowski lpiotrowski 104857600 lis 26 15:45 regular

# lpiotrowski /tmp/test [15:45:24]
→ du -ksh .                                      
101M    .

# lpiotrowski /tmp/test [15:45:30]
→ ln regular hard

# lpiotrowski /tmp/test [15:45:36]
→ ls -las        
razem 204844
     4 drwxrwxr-x  2 lpiotrowski lpiotrowski      4096 lis 26 15:45 .
    32 drwxrwxrwt 14 root        root            32768 lis 26 15:42 ..
102404 -rw-rw-r--  2 lpiotrowski lpiotrowski 104857600 lis 26 15:45 hard
102404 -rw-rw-r--  2 lpiotrowski lpiotrowski 104857600 lis 26 15:45 regular

# lpiotrowski /tmp/test [15:45:38]
→ du -ksh .      
101M    .

Jak widzisz Hard-linki nie zajmują na dysku miejsca. I to jest właśnie magia tego. Masz codzienne backupy w pełni, ale zajmują miejsce tak jakbyś pobierał tylko nowe pliki.

Kolejny przykład z moich kopii z użyciem tego skryptu:
Kod
→ sudo du -chs 2016-04-08 2016-04-09
8,0G    2016-04-08
831M    2016-04-09


Jak widzisz, realnie zostało pobrane ~830MB (część tego to jest miejsce zarezerowane na nazwy plików).

Przetestuj sobie mój skrypt 2 dni i wtedy wyraź opinię wink.gif
!*!
Przykład działania Twojego skryptu:

Dzień 1:
Cytat
./kopia.sh
sending incremental file list
created directory ./b/2016-11-26
a/
a/plik1
8 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=2/4)
a/plik2
20 100% 19.53kB/s 0:00:00 (xfr#2, to-chk=1/4)
a/plik3
70 100% 68.36kB/s 0:00:00 (xfr#3, to-chk=0/4)


Dzień 2:

Cytat
./kopia.sh
Found newst backup: 2016-11-26
sending incremental file list
created directory ./b/2016-11-27
a/
a/plik1
8 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=2/4)
a/plik2
20 100% 19.53kB/s 0:00:00 (xfr#2, to-chk=1/4)
a/plik3
70 100% 68.36kB/s 0:00:00 (xfr#3, to-chk=0/4)


Dzień 3:

Cytat
./kopia.sh
Found newst backup: 2016-11-27
sending incremental file list
created directory ./b/2016-11-28
a/
a/plik1
8 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=2/4)
a/plik2
20 100% 19.53kB/s 0:00:00 (xfr#2, to-chk=1/4)
a/plik3
70 100% 68.36kB/s 0:00:00 (xfr#3, to-chk=0/4)


Teraz przechodzimy do katalogu B gdzie leżą kopie z tych dni:

Cytat
du -h *
16K 2016-11-26/a
20K 2016-11-26
16K 2016-11-27/a
20K 2016-11-27
16K 2016-11-28/a
20K 2016-11-28


Cytat
-a, --archive archive mode; same as -rlptgoD (no -H)
-H, --hard-links preserve hard links


To wyjaśnij mi skąd te dane i czemu są wysyłane przy każdym uruchomieniu, przecież istnieją i nie są zmieniane wink.gif
Pyton_000
Coś tu ściemniasz....
Kod
root@lpiotrowski:/tmp/test# ./kopia.sh
sudo rsync -av --progress --exclude=/dev --exclude=/proc --exclude=/tmp --exclude=/sys --link-dest=/tmp/test/2016-11-26 root@vpstech.ovh:/test/ /tmp/test/2016-11-27
receiving incremental file list
created directory /tmp/test/2016-11-27
./
plik4
    104,857,600 100%    3.15MB/s    0:00:31 (xfr#1, to-chk=0/5)

sent 87 bytes  received 104,883,377 bytes  3,227,183.51 bytes/sec
total size is 104,857,643  speedup is 1.00
root@lpiotrowski:/tmp/test# ./kopia.sh
sudo rsync -av --progress --exclude=/dev --exclude=/proc --exclude=/tmp --exclude=/sys --link-dest=/tmp/test/2016-11-27 root@vpstech.ovh:/test/ /tmp/test/2016-11-28
receiving incremental file list
created directory /tmp/test/2016-11-28

sent 61 bytes  received 135 bytes  392.00 bytes/sec
total size is 104,857,643  speedup is 534,987.97
root@lpiotrowski:/tmp/test#


A w "BACKUP_DIR" podałeś ścieżkę względną czy bezwzględną? Bo ma być bezwzględna.
!*!
Prawda, ścieżka miała znaczenie, jednak coś mi w tym nie pasuje, muszę to przetestować bo coś tu z tym jest nie tak tongue.gif
Pyton_000
Hahaha No tak bo byś musiał mi przyznać rację tongue.gif Dobra spoko, przetestuj i powiedz jak działa.
!*!
Przyznaje Ci racje, że winna była ścieżka i skrypt działa robiąc odpowiednią kopię, jednak... odczekajmy 5min...

---5 minut później---

Cholera miałem nadzieję że forum się zawali po przyznaniu Ci racji... wink.gif

Wracając jednak do tematu, w moim przypadku działa to z błędami podobnie jak rdiff i nie mam pomysłu jak to rozwiązać. Po kilku dniach testów pojawiły się w robionej kopii ze źródła dodatkowe pliki, logi niczego nie wskazują, jednak gdy odpaliłem rdiff ręcznie wyskakuje informacja o
Cytat
UpdateError <plik> File changed from regular file before signature
z tego co czytałem pliki z takim błędem są "puste" co średnio wpływa na sens robienia kopii wink.gif
Pyton_000
Co to znaczy pliki nie wskazujące niczego?
!*!
Nie ma żadnej informacji w logach o błędach w przesyłaniu czy złych sumach kontrolnych itp
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.