Архивиране на данни в линукс

garnet

Well-Known Member
Дайте един акъл.
Имам следното в линукс:
1 папка с под-папки и файлове в тях
2 някой файлове се променят
3 нови фалойве/под-папки се добавят.

Искам следното:

първоначално правя пълен архив (тар, гз) с датата на архивиране в името.
След това някак да проверявам всеки ден дали нещо се е променило в папката. Ако е - нов архив, ако не е - нищо.
 
От: Архивиране на данни в линукс

За сървър ли говорим? Ако да, имам един скрипт за пълен бекъп на съдържанието с опция за автоматично дневно изпълнение. Не е точно това, което търсиш, но е едно начало и ако се комбинира със нещо предложено от друг потребител, мога да те убедя, че ще постигнеш целта си. :)

Ето и директен линк към скриптчето: http://centoshelp.org/resources/scripts-tools/basic-server-backup-script-using-tar-bash/
- Ползвам го и работи идеално.
 
Последно редактирано:
От: Архивиране на данни в линукс

ииииии сега очакваме r.stefanov да се вреже с пълна газ във витрината и да ти обясни разликата между диференциален и инкрементален бекъп! После ще има още 5-6 реда geek базици на тема rsync и rsnapshot
 
Последно редактирано:
От: Архивиране на данни в линукс

Тъкмо щях да питам - няма ли rsync за вас, ама адаша изпревари.
 
От: Архивиране на данни в линукс

ииииии сега очакваме r.stefanov да се вреже с пълна газ във витрината и да ти обясни разликата между диференциален и инкрементален бекъп! После ще има още 5-6 реда geek базици на тема rsync и rsnapshot

Не ти е лесно.

ImpliedFacepalm.jpg
 
От: Архивиране на данни в линукс

Знам за рсинк (не че знам как да я ползвам) но не мисля, че рсинк ще ми свърши работа. Или се буркам.
Целта е не да имам синхронизирана версия на нещата в папка1 и папка2 (блок по блок).
Целта ми е малко дупликация (не е добре знам).
Значи пак примера малко по-подробно

Имам папка1
правя й архив : тар /параметри/ папка1 папка1_дата_днес.тар

минават днес+5 дни, в папка1 има промени (променени файлове + добавени), нещо минава през нея, вижда че има промени и прави тар /параметри/ папка1 папка1_дата_днес+5.тар

минават днес+12 дни, нищо не е пипано, нещо минава през папка1, вижда, че нищо не е пипано и нищо не се случва.

Т.е. има дупликация на непроменените файлове в архиви 1 и 2, като архив2 има и нови/променени файлове в него.

Ако това може да стане с рсинк, кажете как, но да стига до архивиране (тар.гз)
 
Последно редактирано:
От: Архивиране на данни в линукс

man rsync Там има точно каквото ти трябва.

Аз правя по подобен начин backup. Имам папка1. Пускам скрипта, на отдалеченият сървър се прави /backup/папка1. На следващият ден, пак пускам скрипта, ако има промени, папка1 се копира с hardlinks в папка2 и се прави бекъп-а отново в папка1 (т.е. реално се копират само променените файлове, а за другите се прави нещо като shortcut, пести се много място така). На по-следващия ден отново се пуска скрипта, ако има промени файловете се правят в нова папка1, старата папка2 се копира пак с hardlinks в папка3. Така пазя по 3 копия за различни дни (или колкото си реша).

За архивирането, просто го добави към крон задачата.

Гледам предлагаш услуга с къстъм скриптове, трябва да си наясно как ще стане :wink:
 
От: Архивиране на данни в линукс

man rsync Там има точно каквото ти трябва.

Аз правя по подобен начин backup. Имам папка1. Пускам скрипта, на отдалеченият сървър се прави /backup/папка1. На следващият ден, пак пускам скрипта, ако има промени, папка1 се копира с hardlinks в папка2 и се прави бекъп-а отново в папка1 (т.е. реално се копират само променените файлове, а за другите се прави нещо като shortcut, пести се много място така). На по-следващия ден отново се пуска скрипта, ако има промени файловете се правят в нова папка1, старата папка2 се копира пак с hardlinks в папка3. Така пазя по 3 копия за различни дни (или колкото си реша).

За архивирането, просто го добави към крон задачата.

Гледам предлагаш услуга с къстъм скриптове, трябва да си наясно как ще стане :wink:
това горе е ясно. Но идеята ми е по-друга както виждаш. В твоя случай винаги имаш една /бекъп/папка1. Аз искам дупликация - т.е. на всяка промяна, да има пълен архив. Говорим за <10 МБ, архиви...
преди да пиша нещо което ще работи исках да видя дали няма нещо готово в линукс.
иначе начини много...
 
От: Архивиране на данни в линукс

Дефинирай "нещо готово" и каква е идеята ти, защото според казаното до тук искаше точно това? За какво ти е някакво претрупано с функции приложение, след като постигаш същото с инструменти използвани от години и става с два реда баш скрипт. :oops:

П,П. - замисъла на rsync е точно това, което описа.
 
Последно редактирано:
От: Архивиране на данни в линукс

Значи аз доколкото разбрах искаш някакъв скрипт, който проверява дали има някакви промени и ако има - да прави нов архив на всичко.

Сравнението може да го направиш с ls -Ral /път/до/директорията/ > tmp1.txt и после ls -Ral /път/до/директорията/ > tmp2.txt. Ако двата файла са еднакви - нищо не се прави. Ако са различни - правиш нов архив и преместваш tmp2.txt на tmp1.txt.

* Имам грешка. ls -Ral ще върне еднакъв резултат ако промяната е малка (файлът е със същия размер и датата на промяна е в същия ден). Вероятно има друг по-удобен начин за това, сега не ми се търси.

** Сетих се - може да правиш и контролни суми на всички файлове в допълнение. Ако има промяна - значи има променен файл. Макар че контролните суми не са 100% сигурен начин...

*** Ето и още един начин да се разбере дали има променени файлове:

find /директория/ -mmin -30 # finds all files modified in the past 30 minutes
find /директория/ -mtime -1 # find files modified within the past 24 hours
 
От: Архивиране на данни в линукс

По това обяснение единственото, което се сещам е "ако
Код:
 diff -Nura dir1 dir_backup
върне положителен резултат, тогава да изпълниш
Код:
 tar -cvf dir1.tar dir1/
. От тук нататък можеш да си го направиш на bash, perl и твоя любим python . Не се сещам за готово решение, но и не ми се е налагало да разчитам на такова.
 
Последно редактирано:
От: Архивиране на данни в линукс

Това "diif" някаква нова програма ли е или просто "diff"?
 
От: Архивиране на данни в линукс

Това "diif" някаква нова програма ли е или просто "diff"?

просто diff, но в 00:11 съм бил на полусединител.
 
От: Архивиране на данни в линукс

За сега ще се ориентирам към следното. Може да полезно на други.
Цялата идея е, че архива (<10 мб) ще се качва на 3 различни облака + 1 фтп. Данните са много ценни и затова е нужно малко екстемизъм.
Та как ще постъпя

Всичко е на питон (60% готово):

1. За всеки файл в папка1 се смята мд5 сумата.
2. Резултата се добява към един общ низ от символи, който се записва във файл. За към 100 малки файла - 10-15 сек.
3. При промяна в папка1 скрипта сравнява низа от файла с низа в момента: ако са еднакви - нищо. Ако са различни:
4. Създава тар архив на цялата папка
5. Криптира с ГПГ тар файла
6. Трие тар файла
7. Качва криптирания файл на 4 места през вебдав и фтп
8. Трие криптирания файл
9. Пише в лог-а кво е направил

Това ще работи през КРОН честичко.

Ако на някой му е полезно, да каже. Като го завърша - раздавам :)
 
От: Архивиране на данни в линукс

Не съм програмирал на Python, такива неща обикновено ги пиша на Bash (с малко Perl).

А помисли ли за абсурдно малката вероятност md5 сумата на променен файл да съвпадне съвсем случайно и точно в този момент да се изгуби информацията? При варианта с diff (вместо md5) този проблем го няма. Недостатъка е, че ще иска дисково пространство да се пази старата версия на файловете (без компресиране). Но предвид малкия размер няма да е проблем.

Понякога и събитията с абсурдно малка вероятност се случват.
 
От: Архивиране на данни в линукс

Не съм програмирал на Python, такива неща обикновено ги пиша на Bash (с малко Perl).

А помисли ли за абсурдно малката вероятност md5 сумата на променен файл да съвпадне съвсем случайно и точно в този момент да се изгуби информацията? При варианта с diff (вместо md5) този проблем го няма. Недостатъка е, че ще иска дисково пространство да се пази старата версия на файловете (без компресиране). Но предвид малкия размер няма да е проблем.

Понякога и събитията с абсурдно малка вероятност се случват.

Не съм сигурен, че има възможност мд5 сумата на променен файл да е същата както преди промяната. Дори да е същия размер като байтове (трито/добавено) пак е различна. Мисля, че е по-верятно 3 облака + 1 фтп да си заминат от пазара (на 1 облак ползвам платен достъп) едновременно и така да загубя всичко. Обаче то нищо не е 100% сигурно, освен смъртта.
 
От: Архивиране на данни в линукс

Аз пък съм напълно сигурен, че е възможно една и съща md5 сума да отговаря на повече от един файл. И не само това - една и съща md5 сума отговаря на безкрайно много файлове.

Ако това не беше вярно щяхме да ползваме md5 суми вместо .tar.gz архиви.

Въпросът е колко е вероятно да се случи md5 сумата да съвпадне след някоя от промените. Вероятността е изключително малка, но не е нула.
 
От: Архивиране на данни в линукс

Аз пък съм напълно сигурен, че е възможно една и съща md5 сума да отговаря на повече от един файл. И не само това - една и съща md5 сума отговаря на безкрайно много файлове.

Ако това не беше вярно щяхме да ползваме md5 суми вместо .tar.gz архиви.

Въпросът е колко е вероятно да се случи md5 сумата да съвпадне след някоя от промените. Вероятността е изключително малка, но не е нула.

А какво за sha256? Там може ли да има съвпадения?
 
От: Архивиране на данни в линукс

Няма значение точния алгоритъм, по който е изчислена контролната сума (хеша). Защото дължината на хеша е краен, а броя на възможните файлове е много по-голям (теоретично безкраен, ако нямаме ограничение в размера на файла).

На практика обаче вероятността да съвпаднат хешовете (контролните суми) на два случайно избрани файла е много малка.
 

Горе