İçeriğe geç
academia.sh

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:yol biç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.
  • --delete hedefi 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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat