Два сървъра, един VPN, една директория, която трябва да съществува на двете места, и команда, която е лесна за изпълнение и трудна за отмяна. Преди да я напишете, решете кое копие е авторитетно, защото всеки следващ въпрос за rsync зависи от този отговор. Еднопосочна реплика, споделена работна папка и архив с версии изискват различни правила за промени и изтривания. Тунелът осигурява пътя и няма мнение за нито едно от тях.

Решете кое копие печели, преди да напишете команда

Запишете посоката в едно изречение, включително името на хоста и пътя от всяка страна, и получете съгласие от този, който притежава данните. В това ръководство източникът е /srv/publish/, а дестинацията е акаунт на fileserver.example, който може да пише само в /srv/mirror/.

Потвърдете фактите за транспорта преди копирането: ключът на хоста SSH е проверен, дестинационният акаунт може да пише в областта за реплика и никъде другаде, и двата хоста имат съвместими версии на rsync. Тези предусловия не позволяват малка грешка в планирането да се превърне в инцидент с права. Те също ви казват кой акаунт ще се появи в журналите на дестинацията, когато нещо се обърка.

Прегледайте копието в пробен режим и прочетете подробния списък

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

rsync -rt --dry-run --itemize-changes -e ssh -- /srv/publish/ [email protected]:/srv/mirror/

Завършващата наклонена черта е важна. От страна на източника тя означава съдържанието на тази директория, докато пропускането ѝ добавя допълнително ниво директория, наречено на източника. Ръководството на rsync описва двете форми заедно с флаговете за запазване на метаданни, а наборът от опции, който ви трябва, зависи от данните, а не от навика.

Четете всеки ред спрямо дестинацията, която сте имали предвид. Премахването на флага за пробен режим изпълнява копието и може да презапише файлове, а без опция за изтриване допълнителните файлове, които вече са на дестинацията, просто остават там, където са. Това е безопасната настройка по подразбиране само ако наистина сте решили, че останалите назад остарели файлове са приемливи. Ако отговорът е не, решението за изтриване по-долу е това, което трябва да се вземе, а не допълнителен флаг, който да поръсите в тази команда.

След това решете дали изтриванията пътуват

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

rsync -rt --delete --dry-run --itemize-changes -e ssh -- /srv/publish/ [email protected]:/srv/mirror/

Изтриванията премахват излишните файлове от приемащата страна в рамките на синхронизирания обхват, поради което грешен път на източника, немаунтирана директория или филтър, който изключва повече от предвиденото, могат да направят разрушително изпълнение да изглежда като чисто огледало. Списъкът от пробния режим е единственото място, където тази разлика става видима, преди да стане скъпа. Пазете независимо копие за възстановяване там, където данните го оправдават, и помнете, че огледалото вярно възпроизвежда случайно изтриване, вместо да запази историята.

Пробният режим също не заключва нищо. Хората редактират файлове между пробата и реалното изпълнение, а файловите системи имат собствено мнение, така че изпълнението, което одобрявате, и изпълнението, което се извършва, не са една и съща операция, освен ако и двете дървета не са в покой.

Две еднопосочни задачи не правят двупосочна синхронизация

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

Ако потребителите трябва да редактират и двете копия, това е друго продуктово решение: обработка на конфликти, проследяване на изтривания и инструмент, създаден за този модел. Приближаването му с реда на графика е начинът, по който една споделена папка се сдобива с две версии на всеки документ, които никой не може да съгласува. Решете го изрично, вместо да го приближавате с два записа в cron и надежда.

Автоматизирайте само след като политиката е написана

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

Когато източникът е жива база данни или друг набор от данни с много файлове, първо направете експорт, съгласуван с приложението, или координирана моментна снимка. Рекурсивното обхождане на файлове не е транзакция, а копие на променящ се набор от данни не е съгласувано.

Записвайте завършванията и грешките и проверявайте набора от данни на дестинацията, а не само кода за изход. Възстановяването на VPN след прекъсване възстановява свързаността; то не казва нищо за това дали последното копие е завършило или дали конфликтните промени някога са били разрешени.

Подобни статии