Ders 11 / 20
Dosya Aktarımı
Şifreli kabuk üzerinden uzak kopyalama, sunucu kimliğinin doğrulanması, artımlı eşitlemenin yalnızca değişeni göndermesi ve kaynak yolundaki eğik çizginin anlamı.
İçindekiler
Önceki ders proje verisini tek bir arşiv dosyasına indirdi. Bu dosya artık başka bir makineye gönderilebilir — ancak her seferinde tüm ağacı arşivleyip göndermek, ağacın küçük bir bölümü değiştiğinde gereksiz veri taşır.
Bu ders iki yaklaşımı karşılaştırır: dosyayı olduğu gibi kopyalayan araç ile yalnızca farkı gönderen araç. Her ikisinden önce, ikisinin de üzerine kurulduğu taşıma katmanı tanıtılır.
Aşağıdaki örneklerde uzak makine sunucu adıyla, uzak hesap yedek adıyla anılır.
Şifreli Kabuk
Uzak makinede komut çalıştırmanın standart yolu şifreli kabuktur (ssh). Sağladığı üç şey vardır: bağlantı şifrelenir, kullanıcı kimliği doğrulanır ve sunucunun kimliği doğrulanır. Üçüncüsü sık atlanır ama en önemlisidir; şifreleme, karşı tarafın kim olduğu bilinmiyorsa bir şey ifade etmez.
Bir sunucuya ilk bağlanışta kimliği sorulur:
$ ssh yedek@sunucu pwd The authenticity of host 'sunucu (127.0.0.1)' can't be established. ED25519 key fingerprint is SHA256:BXO0kZ7GJ+yv/Idqx3h4fOdWRWCgAH6QbY4y0M/YuHk. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'sunucu' (ED25519) to the list of known hosts. /home/yedek
Sunucunun kendine ait bir anahtar çifti vardır ve açık anahtarının özeti parmak izi olarak gösterilir. Onaylandığında bu parmak izi yerel bir dosyaya kaydedilir. Sonraki bağlantılarda soru sorulmaz:
$ ssh yedek@sunucu pwd /home/yedek
Kaydedilen parmak izi bir sonraki bağlantıda uyuşmazsa araç bağlantıyı reddeder ve uyarı verir. Bu, araya girme girişimini yakalayan mekanizmadır. Uyarı, sunucu yeniden kurulduğunda da çıkar; her iki durumda da doğru davranış, uyarıyı bastırmak değil parmak izini bağımsız bir kanaldan doğrulamaktır.
Çıktıdaki /home/yedek yolu, komutun uzak makinede ve yedek hesabının ev dizininde
çalıştığını gösterir.
Kullanıcı kimliği iki yolla doğrulanır: parola veya anahtar çifti. Anahtar çiftinde özel anahtar yerel makinede kalır, açık anahtar sunucudaki hesaba yetkilendirilir; parola ağa hiç çıkmaz. Anahtar yönetimi ve sunucu yapılandırması Sistem Yönetimi kursunun konusudur.
Uzak Kopyalama
scp, yerel kopyalamanın uzak karşılığıdır ve aynı taşıma katmanını kullanır. Uzak yol
kullanıcı@makine:yol biçiminde yazılır:
$ scp arsiv/veri.tar.xz yedek@sunucu:gelen/ $ ssh yedek@sunucu ls -l gelen total 8 -rw-r--r-- 1 yedek yedek 4416 Jul 26 19:16 veri.tar.xz
İki nokta üst üste ayıracı belirleyicidir: yedek@sunucu:gelen/ uzak bir yolu,
yedek@sunucu ise yedek@sunucu adında yerel bir dosyayı belirtir. Ayıraç unutulduğunda
komut hata vermez, yerel bir dosya oluşturur.
Uzak yollarda göreli yol, oturum açan kullanıcının ev dizinine göredir. gelen/ yolu
/home/yedek/gelen/ anlamına gelir.
scp dosyayı bütün olarak gönderir; hedefte aynı içerik varsa bile yeniden aktarır. Dizin
göndermek için -r gerekir, tıpkı yerel kopyalamada olduğu gibi.
Aktarımın Doğrulanması
Aktarımın eksiksiz olduğu, içeriğin özetiyle sınanır:
$ sha256sum arsiv/veri.tar.xz 6608712cb484f9629dcdf1cbaa3bced3cb87ff00b24d6d32646775ccff3b5443 arsiv/veri.tar.xz $ ssh yedek@sunucu sha256sum gelen/veri.tar.xz 6608712cb484f9629dcdf1cbaa3bced3cb87ff00b24d6d32646775ccff3b5443 gelen/veri.tar.xz
İki özet aynıysa iki dosyanın içeriği aynıdır. Boyut karşılaştırması bu güvenceyi vermez: aynı boyutlu iki farklı içerik olabilir, ama aynı özetli iki farklı içerik pratikte bulunamaz.
Özet doğrulaması yalnızca aktarım hatalarına karşı değildir; arşivin kaynağında değiştirilip değiştirilmediğini de sınar. Bu nedenle yazılım dağıtımlarında paketlerin yanında özet dosyaları yayımlanır — depo yapılandırması dersinde aynı ilke imza zinciriyle birlikte ele alınacaktır.
Eşitleme
rsync kopyalamaz, eşitler: kaynakla hedefi karşılaştırır ve yalnızca farkı gönderir.
Karşılaştırma varsayılan olarak boyut ve değişiklik zamanı üzerinden yapılır.
Çalıştırmadan önce ne yapacağını göstermesi istenebilir:
$ rsync -avn veri/ yedek@sunucu:gelen/veri/ sending incremental file list created directory gelen/veri ./ guncel.csv -> ham/olcum-03.csv ham/ ham/olcum-01.csv ham/olcum-02.csv ham/olcum-03.csv ham/olcum-04.csv islenmis/ islenmis/gunluk-ozet.csv islenmis/olcum-01.csv sent 351 bytes received 81 bytes 864.00 bytes/sec total size is 42,270 speedup is 97.85 (DRY RUN)
-n kuru çalışma yapar: hiçbir şey aktarılmaz, yalnızca yapılacaklar listelenir. Son
satırdaki (DRY RUN) bunu doğrular. -a üstveriyi koruyan bir seçenek kümesidir — izinler,
zaman damgaları ve sembolik bağlar korunur; listede guncel.csv -> ham/olcum-03.csv
satırının bağ olarak görünmesi bunun sonucudur. -v işlenen dosyaları yazdırır.
Kuru çalışma onaylandıktan sonra aynı komut -n olmadan çalıştırılır. Asıl fark, ikinci
çalıştırmada görünür:
$ rsync -av veri/ yedek@sunucu:gelen/veri/ sending incremental file list ham/olcum-01.csv sent 430 bytes received 43 bytes 946.00 bytes/sec total size is 42,284 speedup is 89.40
Arada yalnızca bir ölçüm dosyası değiştirilmişti. Listede yalnızca o dosya var; gönderilen
veri 430 bayt, ağacın toplam büyüklüğü 42 kilobayttan fazla. Aynı işi scp -r ile yapmak
her seferinde ağacın tamamını göndermek olurdu.
Değişmeyen dosyaların hiç açılmaması, eşitlemeyi düzenli yedeklerin standart aracı yapar: maliyet ağacın büyüklüğüyle değil, değişimin büyüklüğüyle orantılıdır.
Eğik Çizgi Kaynağın Anlamını Değiştirir
Eşitleme aracının en sık yanlış kullanılan ayrıntısı, kaynak yolunun sonundaki eğik çizgidir.
Yukarıdaki komutlarda kaynak veri/ biçiminde yazılmıştı: sondaki eğik çizgi “bu dizinin
içindekiler” anlamına gelir ve içerik doğrudan hedefe yerleşir. Eğik çizgi
kaldırıldığında anlam değişir:
$ rsync -avn veri yedek@sunucu:gelen/deneme/ sending incremental file list created directory gelen/deneme veri/ veri/guncel.csv -> ham/olcum-03.csv veri/ham/ veri/ham/olcum-01.csv veri/ham/olcum-02.csv veri/ham/olcum-03.csv veri/ham/olcum-04.csv veri/islenmis/ veri/islenmis/gunluk-ozet.csv veri/islenmis/olcum-01.csv sent 370 bytes received 84 bytes 908.00 bytes/sec total size is 42,284 speedup is 93.14 (DRY RUN)
Yollar artık veri/ önekiyle listeleniyor: dizinin kendisi hedefin içine yerleşiyor ve
sonuç gelen/deneme/veri/... oluyor. Aynı komutun iki biçimi, bir düzey farkla iki ayrı
ağaç üretir.
Hedef yolundaki eğik çizginin böyle bir etkisi yoktur. Kural yalnızca kaynak için geçerlidir ve kuru çalışma bu farkı her seferinde görünür kılar.
Hedefteki Fazlalıklar
Eşitleme varsayılan olarak hedefteki fazladan dosyaları silmez. Kaynakta olmayan bir dosya hedefte duruyorsa orada kalır:
$ rsync -av veri/ yedek@sunucu:gelen/veri/ sending incremental file list ./ sent 329 bytes received 21 bytes 700.00 bytes/sec total size is 42,284 speedup is 120.81 $ ssh yedek@sunucu ls gelen/veri eski-olcum.csv guncel.csv ham islenmis
Hedefi kaynağın birebir yansıması yapmak için --delete gerekir:
$ rsync -avn --delete veri/ yedek@sunucu:gelen/veri/ sending incremental file list deleting eski-olcum.csv sent 326 bytes received 39 bytes 730.00 bytes/sec total size is 42,284 speedup is 115.85 (DRY RUN)
Bu seçenek yıkıcıdır ve silme dersindeki uyarı burada birebir geçerlidir: kaynak yolu
yanlış yazılırsa veya boş bir dizini gösterirse, hedefteki her şey silinir. --delete
kullanılan her komut önce -n ile çalıştırılmalıdır; kuru çalışma listesindeki deleting
satırları, silinecek dosyaların tam listesidir.
Araç Seçimi
| Ölçüt | scp |
rsync |
|---|---|---|
| Gönderilen veri | Dosyanın tamamı | Yalnızca fark |
| Yinelenen çalıştırma | Aynı maliyet | Değişim kadar maliyet |
| Üstveri koruma | Sınırlı | -a ile tam |
| Kuru çalışma | Yok | -n ile var |
| Hedefte silme | Yok | --delete ile var |
| Karşı tarafta gereksinim | Yok | Aracın kurulu olması |
Tek seferlik ve tek dosyalık aktarımlarda kopyalama yeterlidir; yinelenen ağaç
aktarımlarında eşitleme tercih edilir. Etkileşimli gezinme ve seçerek indirme gerekiyorsa
sftp aracı aynı taşıma katmanı üzerinde dosya sistemi benzeri bir oturum sağlar.
Özet
- Şifreli kabuk hem kullanıcıyı hem sunucuyu doğrular; sunucunun parmak izi ilk bağlantıda onaylanır ve sonraki bağlantılarda karşılaştırılır.
- Uzak yollar
kullanıcı@makine:yolbiçiminde yazılır; iki nokta üst üste unutulduğunda komut sessizce yerel bir dosya oluşturur. - Aktarım, içerik özetlerinin karşılaştırılmasıyla doğrulanır; boyut eşitliği güvence vermez.
- Eşitleme yalnızca değişen dosyaları gönderir; maliyet ağacın değil değişimin büyüklüğüyle orantılıdır.
- Kaynak yolundaki sondaki eğik çizgi “dizinin içindekiler”, çizgisiz biçim “dizinin kendisi” anlamına gelir.
--deletehedefi kaynağın birebir yansıması yapar ve yıkıcıdır; kuru çalışmayla önce denetlenmelidir.
Sonraki Adım
Uzak makinedeki dosyalar yedek hesabına ait çıktı; yerel dosyalar ise başka bir hesaba.
Bu ayrımın nasıl kurulduğu — kullanıcı kimliğinin sistemde ne olarak saklandığı, grupların
ne işe yaradığı ve bir dosyanın kime ait olduğunun ne anlama geldiği — henüz açıklanmadı.
Sonraki konu hesap modelini kurar ve buradan izin bitlerine geçer.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.