rsync ve sembolik bağlar


69

Ev dizini cron, yürütmek üzere bir iş kullanarak her gece harici bir sürücüye yedeklemek istiyorum rsync. rsync'Nin sembolik bağlantı bayraklarının tam davranışından emin değilim .

  1. rsync'in -abayrağı bayrağı içerir -l(yani "sembolik olarak sembolik olarak kopyala"). Bu sadece bağlantıyı kopyalayacağı veya bağlantıyı izleyeceği ve bağlantıya dizindeki her şeyi kopyalayacağı anlamına mı geliyor ? Bundan kaçınmak istiyorum, çünkü yüzlerce gigabaytın kopyalanmasını gerektiren medya dosyalarıyla dolu dizinlere bağlantılarim var, yedeklememe gerek yok.
  2. rsync -aTüm bu medya dosyalarını kopyalayacağından (ancak kesin değil) korktuğumda --no-linksbayrak ekledim . Bu istediğim davranış gibi gözükmüyor. Sadece sorunlu olan herhangi bir bağlantının kopyalanmasını dikkate almaz, çünkü kopyalanmasını istediğim bağlantılar var (örneğin, farklı proje dizinlerinden ortak başlık dosyalarına bağlantılar).
  3. Yukarıdaki # 1'i ( --no-linksbayrak olmadan ) gerçekten istediğim şeydir ve yalnızca bağlı-bağlı dosyaları kopyalamadan bağlantıyı kopyalar, bu bağlantılar yedeklendiklerinde kopar mı? Mesela ben olabilir rsyncdizini kaynak /home/me/projects/misciçin /media/extdrive/backup/home/me/projects/misc. Bu durumda rsync, yeterince akıllı olmadığını ve bağıl dizin değişikliklerinin sembolik bağlantılarını düzeltmeye çalıştığını varsaymıyorum . Bu doğru mu? Bu tamamdır, geri yüklenmeleri gerektiğinde bu zaman gelirse sabit ve çalışır durumda oldukları sürece bağlantıların yedek dizinlerdeki kopması önemli değildir.

3
-L bayrağı muhtemelen istediğiniz şeydir. Centos Linux'daki rsync man sayfasından: "-L, --copy-links, link linkini referans dosyasına / dir. 'E dönüştürür." Bunu istemediğiniz verilerin üzerine yazmadığınızdan emin olmak için bazı örnek dizinler ve bağlantılar ile test etmenizi öneririm. Muhtemel veri kaybı ile ilgili uyarı dahil olmak üzere düzenlenmiştir. ;)
Mick T

Yanıtlar:


90
  1. "İşaretleri işaret olarak kopyala", tam olarak ne anlama geldiğini belirtir: rsync, kaynak dizinde bir işaret görüyorsa, hedefte aynı bir işaret oluşturur. Daha fazlası değil.

    (Manuel sayfada birkaç satır, farklı bir seçenek, --copy-linksistenmeyen olarak tanımladığınız zıt davranışı (her zaman veriyi kopyalayarak) açıklar.)

    Ayrıca bkz. "Sembolik linkler":

    Eğer --linksbelirtilmişse, sembolik bağlar hedefe aynı hedefle yeniden oluşturulur.

  2. İstediğiniz davranış değil çünkü ne yaptığınızı yanlış yorumluyorsunuz --linksve bu nedenle yanlış davranışı soruyorsunuz (bkz. Cevap # 1).

  3. Varsayılan olarak, hedefi tam olarak kopyalar .

    Yani, eğer bağlantı mutlak bir yola işaret ediyorsa (örneğin /home/me/projects), aynı yolu göstermeye devam edecektir; o olmaz kırmak sadece ev dizininde bir dosya yerine, yedekleme birine işaret devam edeceğiz.

    Bağlantı göreli yol (örneğin işaret eğer arada, ../../projects), bu edeceğiz de aynı yolu işaret devam eder, ancak sembolik olarak bağlayın konumuna göreli beri, yedeğinize sembolik bağı da yedekleme bir dosyaya işaret edilecektir.

    Ne yazık ki, mutlak sembolik bağları yeni temelleri için çevirme seçeneği bulunmuyor (sadece onları tamamen kırmak için bir seçenek). Sorunlardan kaçınmak için, mevcut sembolik bağlantıları göreceli olarak değiştirmelisiniz (bu genellikle $ HOME içindeki bağlantılar için iyi bir fikirdir).


2
ummm öyleyse --copy-linksve ile arasındaki fark --linksnedir?
Alexander Mills

--copy-links= -L, ve --links= -l.
Gabriel Staples

12

@grawity'nin çok iyi bir cevabı var, fakat işte belgelerdeki bazı önemli bilgilerin ekran görüntüsü. İşte söz konusu olan en alakalı olanlar gibi , -lve -Lseçeneklerinin tam ifadesi :

görüntü tanımını buraya girin

Kaynak: https://linux.die.net/man/1/rsync veya man rsyncLinux'taki manuel sayfalar.

Ayrıca, -a( --archive) seçeneğinin de içinde bulunan -lseçeneği içerdiğini unutmayın; bu harika, çünkü -lhedeflerimdeki sembolik bağlarımı kaynağından korumak için seçeneği kullanmayı seviyorum . Man sayfalarından:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

En sevdiğim rsynckomut ve talimatlar için, kopyalama, yansıtma, toplam ilerleme gösterme dahil ...

..., kuru koşu yapıyor (ayrı) dosyaları, bir kullanarak, istatistikleri gösteren stderr ve çıkışı günlüğü içeren yol dosyasını ve bir dışlama dosyasını başlıklı vs, 2. bölüm altında burada benim tam cevaba bakınız, " 2. rsync Komut satırı aracı (Linux, Cygwin'li Windows) ": https://superuser.com/a/1464264/425838

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.