Saya selalu menggunakan salah satu rsync
atau scp
untuk menyalin file dari / ke mesin jarak jauh. Baru-baru ini, saya menemukan di manual scp
( man scp
) bendera-C
-C Compression enable. Passes the -C flag to
ssh(1) to enable compression.
Sebelum saya menemukan bendera ini, saya dulu zip
dan kemudian scp
.
Apakah efisien untuk hanya menggunakan -C
zipping dan unzipping? Kapan menggunakan satu atau beberapa proses lain yang membuat transfer lebih cepat?
scp
compression
file-transfer
Remi.b
sumber
sumber
scp -rv
danscp -Crv
membandingkan throughput.zip
merupakan format file yang sangat "windows". Anda hampir tidak akan pernah melihat atau membutuhkannya saat mengoperasikan mesin linux dengan perangkat lunak linux asli.tar
digunakan untuk menggulung direktori ke dalam satu file sambil menjaga hak akses dan nama dan seperti itu, sedangkangzip
,bzip2
,xz
, dll digunakan untuk file kompres.tar
s sering dikompresi, dibuattar.gz
dantar.xz
format umum untuk arsip di linux. Saya telah melihat orang-orang menggulungscp
workalike mereka sendiri dengan perintah sepertitar cvz directory | ssh machine 'cd somewhere; tar xz'
.Compression yes
Anda.ssh/config
.Jawaban:
Tidak pernah benar-benar akan membuat perbedaan besar, tetapi zip file sebelum menyalinnya harus sedikit kurang efisien karena menggunakan format kontainer seperti
zip
itu dapat merangkum beberapa file (sepertitar
) tidak perlu dan tidak mungkin untuk streaming zip input dan output (jadi Anda memerlukan file sementara).Menggunakan
gzip
di sisi lain, bukannyazip
harus persis sama karena itu apa yangssh -C
ada di bawah tenda ... kecuali bahwa gzipping sendiri lebih banyak pekerjaan daripada hanya menggunakanssh -C
.sumber
gzip
itu. Apakah jawaban Anda berarti ituscp -rC
mungkin solusi paling efisien yang saya miliki?-C
mengompresi aliran protokol interaktif. Anda hanya mempertimbangkan data. Jadi kesimpulan Anda salah. Lihat jawaban sayaThe
-C
bendera memungkinkan kompresi gzip dari aliran SSH.Ini setara dengan
Accept-Encoding: gzip
di HTTP.Bagaimana kinerja flag tergantung pada jenis data yang Anda transfer:
Saat mentransfer file besar tunggal, kinerjanya hampir sama dengan zip file sebelum transfer (mengabaikan efisiensi algoritma zip vs gzip).
Tetapi menggunakan
-C
adalah usaha yang kurang bagi Anda sebagai pengguna.Saat mentransfer banyak file kecil, kinerjanya akan lebih rendah daripada zip file sebelum transfer.
Alasan di balik itu adalah, bahwa sebelum setiap transfer file, ada komunikasi interaktif antara server SCP dan klien (untuk bertukar metadata file, seperti cap waktu dan izin). Jadi kedua belah pihak harus menunggu sedikit agar pihak lain merespons (kompresi tidak akan membantu saat menunggu). Itu adalah waktu yang terbuang untuk setiap file yang ditransfer. Berapa banyak waktu yang terbuang tergantung pada latensi koneksi. Pada akhirnya, transfer bisa menjadi lebih lambat.
Ketika Anda mentransfer satu file zip, komunikasi itu hanya terjadi sekali.
sumber
Ini memungkinkan kompresi gzip di ssh (di bawah scp).
Pada koneksi yang lambat ini akan mempercepat, pada koneksi yang cukup cepat (100Mbit atau lebih cepat) kompresi sangat mungkin memperlambat segalanya.
Akan lebih atau kurang efisien daripada zip berdasarkan pada apakah gzip (khususnya gzip -6) akan lebih atau kurang efisien daripada tingkat kompresi zip yang Anda pilih
sumber
.bin
dan.txt
file). Jadi Anda akan menyarankan untuk hanya menggunakanscp -r
dan tanpa-C
bendera dan tidakzip
,gzip
bukantar
?