Saya memiliki 5 juta file yang memakan sekitar 1TB ruang penyimpanan. Saya perlu mentransfer file-file ini ke pihak ketiga.
Apa cara terbaik untuk melakukan ini? Saya telah mencoba mengurangi ukuran menggunakan .tar.gz, tetapi meskipun komputer saya memiliki RAM 8GB, saya mendapatkan kesalahan "kehabisan memori sistem".
Apakah solusi terbaik untuk mengirim file ke siput?
memory
tar
compression
out-of-memory
oshirowanen
sumber
sumber
.tar.gz
atau MENYALIN file terkompresi yang dihasilkan? Either way, ada yang aneh, karena operasi tidak boleh mengkonsumsi lebih banyak memori hanya karena file-file itu besar. Artinya, kedua operasi harus streaming. Harap sertakan informasi lebih lanjut tentang perintah apa yang gagal.tar
harus mengarsipkan file secara bertahap karena daftar mereka, tidak pernah membangun daftar dalam memori. Tetapi sekali lagi, tolong tunjukkan perintah yang tepat yang Anda gunakan. Juga, apakah semua file dalam direktori yang sama atau apakah struktur direktori sangat dalam?Jawaban:
Informasi tambahan yang disediakan dalam komentar mengungkapkan bahwa OP menggunakan metode GUI untuk membuat
.tar.gz
file.Perangkat lunak GUI sering menyertakan lebih banyak mengasapi daripada perangkat lunak setara baris perintah yang setara, atau melakukan tugas tambahan yang tidak perlu demi beberapa fitur "ekstra" seperti bilah kemajuan. Tidak akan mengejutkan saya jika perangkat lunak GUI mencoba mengumpulkan daftar semua nama file dalam memori. Tidak perlu melakukan itu untuk membuat arsip. Alat-alat khusus
tar
dangzip
dirancang untuk bekerja dengan streaming input dan output yang berarti bahwa mereka dapat menangani input dan output yang jauh lebih besar daripada memori.Jika Anda menghindari program GUI, kemungkinan besar Anda dapat menghasilkan arsip ini menggunakan
tar
doa sehari-hari yang benar-benar normal seperti ini:di mana
foo
direktori yang berisi semua 5 juta file Anda.Jawaban lain untuk pertanyaan ini memberi Anda beberapa
tar
perintah alternatif tambahan untuk dicoba jika Anda ingin membagi hasilnya menjadi beberapa bagian, dll ...sumber
"lima juta" file, dan total 1TB? File Anda pasti sangat kecil. Saya hanya mencoba
rsync
:Jika Anda tidak memilikinya - atau case-use Anda tidak memungkinkan untuk digunakan
rsync
, setidaknya saya akan memeriksa apakah7z
berfungsi dengan data Anda. Mungkin tidak, tapi saya pikir ini masih patut dicoba:Atau jika Anda merasa tidak nyaman dengan
7z
setidaknya mencoba membuat.tar.xz
arsip:(Perlu dicatat, bahwa versi lama dari
tar
tidak membuat.tar.xz
arsip, tetapi.tar.lzma
arsip, ketika menggunakanJ
switch. Bahkan versi yang lebih lamatar
, tidak mendukungJ
flag sama sekali.)Karena Anda menggunakan program GUI untuk membuat file-file itu, saya berasumsi Anda merasa sedikit tidak nyaman menggunakan antarmuka baris perintah.
Untuk memfasilitasi pembuatan, pengelolaan, dan ekstraksi arsip dari antarmuka baris perintah, ada utilitas kecil yang disebut
atool
. Ini tersedia untuk hampir semua distro umum yang pernah saya lihat, dan bekerja hampir setiap arsip yang saya temui, kecuali yang tidak jelas.Periksa apakah distro Anda ada
atool
di repo mereka, atau minta admin Anda untuk menginstalnya, ketika berada di lingkungan tempat kerja.atool
menginstal banyak symlink ke dirinya sendiri, sehingga pengepakan dan pembongkaran menjadi mudah:Membuat arsip.
Perluas arsip.
Daftar isi file.
Jenis arsip apa yang dibuat,
atool
membedakannya dengan ekstensi nama file arsip Anda di baris perintah.sumber
rsync
adalah bahwa jika koneksi terputus,rsync
bisa mengambilnya dari tempat sebelumnya.Kecuali jika Anda dapat melakukan kompresi lebih baik dari 25: 1, Anda tidak akan memperoleh apa pun dari mengompresi ini sebelum mengirim siput, kecuali jika Anda memiliki beberapa format kaset perangkat keras yang dapat Anda tukarkan dengan pihak ketiga.
Penyimpanan umum terbesar adalah sinar biru dan kira-kira Anda mendapat 40Gb. Anda membutuhkan kompresi 25 hingga 1 pada data Anda agar sesuai dengan itu. Jika pihak ketiga Anda hanya memiliki DVD, Anda memerlukan 125: 1 (kurang-lebih).
Jika Anda tidak dapat mencocokkan angka-angka kompresi itu hanya menggunakan disk biasa, salin dan kirim surat itu ke pihak ketiga. Dalam hal pengiriman sesuatu yang lebih kecil dari drive 1TB yang perlu kompresi adalah kegilaan.
Anda hanya perlu membandingkannya dengan menggunakan
ssh -C
(kompresi standar) atau lebih disukairsync
dengan kompresi untuk menyalin file melalui jaringan, tidak perlu mengompres dan tar di muka. 1Tb bukan tidak mungkin untuk bergerak melewati net, tetapi akan memakan waktu cukup lama.sumber
Apakah Anda mempertimbangkan torrent? Peer-to-Peer mungkin menjadi pilihan terbaik Anda untuk transfer over-the-internet:
Anda tidak memberi tahu OS mana yang Anda gunakan, tetapi ketika Anda berbicara tentang kompresi tar.gz, saya akan menganggap Anda menggunakan beberapa OS mirip GNU / Linux. Untuk itu saya akan menyarankan Transmisi . Ini adalah perangkat lunak sumber terbuka yang berjalan di Mac dan Linux. Saya menyukainya karena pengembang berupaya menjadikannya asli untuk setiap klien GUI yang mereka dukung: tidak ada bahasa lintas platform.
Anda dapat menggabungkan metode ini dengan kompresi, namun Anda akan kehilangan kemampuan untuk memprioritaskan bagian dari transfer.
sumber
7z akan menjadi pilihan saya. Ini memungkinkan pemisahan arsip secara otomatis dan mendukung kompresi multi-ulir. Tidak,
xz
tidak, terlepas dari apa yang dikatakan pesan bantuan. Coba dengan:Output dibagi menjadi 100MB blok (ubah dengan
-v
switch).Satu-satunya downside nyata adalah bahwa 7z tidak mempertahankan metadata unix (mis. Izin dan pemilik). Jika Anda membutuhkannya, gunakan
tar
output pipa7za
(lihatman 7za
untuk beberapa contoh).sumber
The only real downside
tapi apa kerugiannya!split
file .tar.gz, dan tetap menggunakan metadata.tar
pendekatan.Ya, semoga berhasil untuk mengemasnya. Dan alat GUI akan mencoba melakukan itu pada volume yang sama, yang berarti a) Anda memerlukan ruang kosong 1TB lagi dan b) kepala meronta-ronta membaca satu file dan menambahkannya ke arsip tidak akan terlalu sehat untuk drive.
Saya melihat dua kemungkinan:
1) rsync dari komputer Anda ke pihak ke-3. Satu atau yang lain akan membutuhkan alamat IP global yang tidak sering berubah. The besar keuntungan dari rsync adalah jika Anda mendapatkan terganggu untuk alasan apapun, itu dapat mengambil mana ia tinggalkan. Menyalin tarbal 1 TB akan berhasil atau gagal
2) membeli drive eksternal 1TB, menyalin sesuatu ke sana, dan mengirimkan drive. Latensi tinggi, tetapi bandwidth sangat bagus saat tiba. Berbagai layanan pencadangan online untuk ini untuk pencadangan awal.
sumber
Saya sarankan Anda untuk menggunakan sesuatu seperti:
yang akan membuat 10 file yang paling besar akan 100GB. Tapi itu tidak akan menjawab masalah "OOM" Anda karena tar seharusnya mengalirkannya baca / tulis sehingga hambatannya adalah gzip.
sumber
Bagaimana tentang itu:
find
pencarian daftar pohon direktoritar -T -
membaca daftar dari stdin-czf -
membuat arsip dan menulis ke stdout,z
gzips streamssh remotehost
masuk ke remotehost menggunakanssh
cd /target/dir/
ubah ke direktori targettar xzf -
ekstrak aliran yang masuk dari stdinsumber
Dengan fexsend, Anda dapat mengirim file dengan jumlah dan ukuran berapa saja ke penerima mana pun saat bepergian, lihat:
http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html
Tentu saja, Anda memerlukan server F * EX, tetapi gratis:
http://fex.rus.uni-stuttgart.de:8080/
sumber