Cara tercepat menggabungkan banyak file menjadi satu (tar czf terlalu lambat)

23

Saat ini saya sedang menjalankan tar czfuntuk menggabungkan file cadangan. File-file berada di direktori tertentu.

Namun jumlah file terus bertambah. Menggunakan tzr czfterlalu banyak waktu (lebih dari 20 menit dan terus bertambah).

Saya perlu menggabungkan file lebih cepat dan dengan cara yang dapat diukur.

Saya telah menemukan genisoimage, readomdan mkisofs. Tapi saya tidak tahu mana yang tercepat dan apa batasannya untuk masing-masing.

Najib-botak Chin
sumber
Saya ragu bahwa tarmemperkenalkan overhead yang signifikan, membaca file adalah operasi yang mahal di sini. Anda harus memodifikasi cara file Anda disimpan, atau menggunakan pendekatan yang sangat berbeda (salin sistem file secara keseluruhan). Kami tidak dapat banyak membantu Anda tanpa mengetahui bagaimana file Anda disusun.
Gilles 'SANGAT berhenti menjadi jahat'
5
Pasang FS Anda dengan opsi "noatime", mungkin percepat operasi IO.
Rufo El Magufo
2
+1 untuk noatime, ini benar-benar membuat perbedaan yang signifikan. Khusus untuk hard drive biasa, dan juga hanya untuk mengurangi penulisan yang asing.
JM Becker

Jawaban:

25

Anda harus memeriksa apakah sebagian besar waktu Anda dihabiskan untuk CPU atau I / O. Either way, ada cara untuk memperbaikinya:

A: jangan kompres

Anda tidak menyebutkan "kompresi" dalam daftar persyaratan sehingga mencoba menjatuhkan "z" dari daftar argumen Anda: tar cf. Ini mungkin mempercepat hal-hal sedikit.

Ada teknik lain untuk mempercepat proses, seperti menggunakan "-N" untuk melewatkan file yang sudah Anda buat cadangan sebelumnya.

B: backup seluruh partisi dengan dd

Atau, jika Anda mencadangkan seluruh partisi, gunakan salinan seluruh gambar disk. Ini akan menghemat pemrosesan dan banyak kepala disk mencari waktu. tardan setiap program lain yang bekerja pada level yang lebih tinggi memiliki overhead karena harus membaca dan memproses entri direktori dan inode untuk menemukan di mana konten file berada dan untuk melakukan lebih banyak mencari head disk , membaca setiap file dari tempat yang berbeda dari disk.

Untuk membuat cadangan data yang mendasarinya jauh lebih cepat, gunakan:

dd bs=16M if=/dev/sda1 of=/another/filesystem

(Ini mengasumsikan Anda tidak menggunakan RAID, yang dapat mengubah sedikit hal)

Yves Junqueira
sumber
2
jangan kompres : atau gunakan pigzjika ada dalam sistem lebih dari satu prosesor.
Rufo El Magufo
LZ4 / zstd dan algoritma kompresi cepat lainnya mungkin masih layak untuk memeriksa apakah mereka dapat mempercepat suatu proses dengan hanya menulis lebih sedikit data (jika data kompresibel sama sekali) sementara menjadi urutan besarnya lebih cepat dalam kompresi tetapi kurang efisien tergantung pada level dan algoritma, juga man gzip mengatakan "Level kompresi default adalah -6", jadi ada ruang untuk perbaikan.
LiveWireBT
8

Untuk mengulangi apa yang dikatakan orang lain: kita perlu tahu lebih banyak tentang file yang sedang dicadangkan. Saya akan pergi dengan beberapa asumsi di sini.

Tambahkan ke file tar

Jika file hanya ditambahkan ke direktori (yaitu, tidak ada file yang dihapus), pastikan Anda menambahkan ke file tar yang ada daripada menciptakannya kembali setiap waktu. Anda bisa melakukan ini dengan menentukan nama file arsip yang ada di tarperintah Anda alih-alih yang baru (atau menghapus yang lama).

Tulis ke disk yang berbeda

Membaca dari disk yang sama dengan yang Anda tulis mungkin akan mematikan kinerja. Cobalah menulis ke disk lain untuk menyebarkan muatan I / O. Jika file arsip harus di disk yang sama dengan file asli, pindahkan setelah itu.

Jangan kompres

Mengulangi apa yang dikatakan @Yves. Jika file cadangan Anda sudah dikompresi, tidak perlu banyak kompres lagi. Anda hanya akan membuang-buang siklus CPU.

Barry Brown
sumber
4

Menggunakan tar dengan lz4 crompression seperti di

tar cvf - myFolder | lz4 > myFolder.tar.lz4

memberi Anda yang terbaik dari kedua dunia (kompresi DAN kecepatan agak baik). Harapkan rasio kompresi sekitar 3 bahkan jika data Anda berisi file biner.

Bacaan lebih lanjut: perbandingan algoritma kompresi Cara tar dengan lz4

StefanQ
sumber
1
Apa StefanQ tinggal adalah bahwa Anda harus memilih kompresor Anda tergantung di mana hambatan Anda. Juga: ingat Anda dapat menyimpan output ke perangkat penyimpanan fisik yang berbeda atau bahkan mesin jarak jauh!
Lester Cheung
2

Saya terkejut bahwa tidak ada yang menyebutkan dump dan restore. Ini akan jauh lebih cepat daripada dd jika Anda memiliki ruang kosong di sistem file.

Perhatikan bahwa tergantung pada sistem file yang dimaksud, Anda mungkin memerlukan alat yang berbeda:

  • ext2 / 3/4 - dump and restore (paket dump dalam RH / Debian)
  • XFS - xfsdump dan xfsrestore (paket xfsdump dalam RH / Debian)
  • ZFS - zfs send dan zfs recv
  • BTRFS - btrfs kirim dan btrfs terima

Perhatikan bahwa beberapa program tidak memiliki kompresi bawaan (semua kecuali dump) - pipa untuk stdout dan menggunakan pigz sesuai kebutuhan. ;-)

Lester Cheung
sumber