Saat ini saya menggunakan ArchiveMount
untuk me-mount arsip 123.000 kb yang berisi lebih dari 3 juta file di dalamnya. Sejauh ini telah meningkat selama 5+ jam dan masih belum selesai.
Apakah ada cara yang lebih baik untuk me-mount .tar.gz
file? Saya mencoba untuk me-mount ke folder, dan tidak terkompresi dibutuhkan beberapa pertunjukan. Saya bahkan tidak perlu mode tulis, cukup baca saja sudah cukup.
Jawaban:
Anda juga bisa membuat gambar squashfs terkompresi
Untuk melakukan ini, Anda perlu mengekstrak tar.gz archvie Anda.
Keuntungannya juga bahwa gambar memiliki toleransi kesalahan yang lebih baik daripada gz.
sumber
Saya menulis ratarmount alternatif yang lebih cepat , yang "bekerja untuk saya", karena masalah ini terus mengganggu saya.
Anda bisa menggunakannya seperti ini:
Setelah selesai, Anda dapat melepasnya seperti pemasangan FUSE:
Mengapa lebih cepat dari jumlah arsip?
Itu tergantung pada apa yang Anda ukur.
Berikut adalah patokan jejak memori dan waktu yang diperlukan untuk pemasangan pertama, serta waktu akses untuk
cat <file-in-tar>
perintah sederhana danfind
perintah sederhana .Folder yang berisi setiap file 1k dibuat dan jumlah folder bervariasi.
Plot kiri bawah menunjukkan bilah kesalahan yang menunjukkan waktu pengukuran minimum dan maksimum
cat <file>
untuk 10 file yang dipilih secara acak.Waktu pencarian file
Perbandingan pembunuh adalah waktu yang dibutuhkan untuk
cat <file>
menyelesaikannya. Untuk beberapa alasan, ini menskala secara linear dengan ukuran file TAR (kira-kira byte per file x jumlah file) untuk archivemount sementara menjadi waktu yang konstan dalam ratarmount. Ini membuatnya tampak seperti archivemount bahkan tidak mendukung pencarian sama sekali.Untuk file TAR terkompresi, ini terutama terlihat.
cat <file>
membutuhkan waktu lebih dari dua kali selama pemasangan seluruh file .tar.bz2! Sebagai contoh, TAR dengan 10k file kosong (!) Membutuhkan 2.9s untuk di-mount dengan archivemount tetapi tergantung pada file yang diakses, akses dengancat
membutuhkan antara 3ms dan 5s. Waktu yang dibutuhkan tampaknya tergantung pada posisi file di dalam TAR. File di akhir TAR membutuhkan waktu lebih lama untuk dicari; menunjukkan bahwa "mencari" ditiru dan semua konten dalam TAR sebelum file dibaca.Bahwa mendapatkan konten file dapat memakan waktu lebih dari dua kali lipat dari pemasangan seluruh TAR tidak terduga dalam dirinya sendiri. Paling tidak, itu harus selesai dalam jumlah waktu yang sama dengan pemasangan. Salah satu penjelasannya adalah bahwa file sedang ditiru secara dicari untuk lebih dari sekali, bahkan mungkin tiga kali.
Ratarmount tampaknya selalu membutuhkan jumlah waktu yang sama untuk mendapatkan file karena mendukung pencarian yang sebenarnya. Untuk TAR terkompresi bzip2, bahkan mencari blok bzip2, yang alamatnya juga disimpan dalam file indeks. Secara teoritis, satu-satunya bagian yang harus skala dengan jumlah file adalah pencarian dalam indeks dan yang harus skala dengan O (log (n)) karena diurutkan berdasarkan jalur dan nama file.
Jejak memori
Secara umum, jika Anda memiliki lebih dari 20k file di dalam TAR, maka jejak memori ratarmount akan lebih kecil karena indeks ditulis ke disk saat dibuat dan karenanya memiliki jejak memori konstan sekitar 30MB pada sistem saya.
Pengecualian kecil adalah backend gzip decoder, yang karena beberapa alasan memerlukan lebih banyak memori karena gzip semakin besar. Memori overhead ini mungkin merupakan indeks yang diperlukan untuk mencari di dalam TAR tetapi penyelidikan lebih lanjut diperlukan karena saya tidak menulis backend itu.
Sebaliknya, archivemount menyimpan seluruh indeks, yaitu, misalnya, 4GB untuk file 2M, sepenuhnya dalam memori selama TAR dipasang.
Waktu pemasangan
Fitur favorit saya adalah ratarmount untuk dapat memasang TAR tanpa terasa menunda pada percobaan berikutnya. Ini karena indeks, yang memetakan nama file ke metadata dan posisi di dalam TAR, ditulis ke file indeks yang dibuat di sebelah file TAR.
Waktu yang diperlukan untuk pemasangan berperilaku agak aneh di archivemount. Mulai dari kira-kira 20k file mulai skala secara kuadratik bukan linier sehubungan dengan jumlah file. Ini berarti bahwa mulai dari kira-kira file 4M, ratarmount mulai jauh lebih cepat daripada archivemount walaupun untuk file TAR yang lebih kecil itu hingga 10 kali lebih lambat! Kemudian lagi, untuk file yang lebih kecil, tidak masalah apakah dibutuhkan 1s atau 0,1s untuk me-mount tar (pertama kali).
Waktu pemasangan untuk file terkompresi bz2 adalah yang paling sebanding setiap saat. Ini sangat mungkin karena diikat oleh kecepatan decoder bz2. Ratarmount kira-kira 2x lebih lambat di sini. Saya berharap menjadikan ratarmount pemenang yang jelas dengan memparalelkan bz2 decoder dalam waktu dekat, yang bahkan untuk sistem saya yang berusia 8 tahun dapat menghasilkan speedup 4x.
Saatnya mendapatkan metadata
Ketika hanya mendaftarkan semua file dengan
find
di dalam TAR (cari juga tampaknya memanggil stat untuk setiap file !?), ratarmount adalah 10x lebih lambat dari archivemount untuk semua kasus yang diuji. Saya berharap untuk memperbaiki ini di masa depan. Tapi saat ini, sepertinya masalah desain karena menggunakan Python dan SQLite daripada program C murni.sumber
Masalahnya di sini adalah dengan format, format TAR (Tape ARchive) dirancang untuk akses berurutan, bukan akses acak. Dan gzip adalah pelengkap yang baik untuk tar, karena itu adalah format kompresi berbasis aliran, juga bukan untuk akses acak.
Jadi alat tingkat tinggi yang tidak berinteraksi dengan blok terkompresi secara langsung, harus mem-parsing seluruh file setiap kali perlu membaca apa pun, pertama untuk membuat Anda daftar file, maka mungkin cache tidak valid dan membacanya lagi , dan kemudian untuk setiap file yang Anda salin mungkin membacanya lagi. Anda dapat membuat alat yang mengingat posisi setiap file, dan blok apa yang perlu di-dekompres untuk mendapatkannya, tetapi tampaknya hanya sedikit yang peduli dengan hal itu.
Jika Anda ingin ini berjalan lebih cepat, lakukan a
tar tzf file.tar.gz > filelist
, buka daftar file itu di vim , gedit atau apa pun, hapus baris file yang tidak Anda butuhkan, simpan, dan ekstrak dengantar xzf file.tar.gz -T filelist -C extracted/
.Untuk mendapatkan akses acak ke file terkompresi, Anda harus menggunakan mungkin zip dengan ekstensi posix, rar, atau seperti yang disarankan dru8274, squashfs, atau bahkan ZFS dengan kompresi dihidupkan, atau btrfs jika btrfs mendapatkan kompresi untuk bekerja pada saat membaca.
sumber
Ini tidak akan mencakup semua kasus penggunaan karena membatasi digunakan untuk editor teks. Tetapi, jika Anda hanya peduli dengan akses baca, Anda mungkin menemukan ini berguna untuk beberapa situasi.
vim
, ketika dijalankan pada tarball akan menunjukkan kepada Anda hierarki konten arsip (mirip dengan bagaimana itu akan menampilkan hirarki file jika dijalankan pada direktori). Dengan memilih salah satu file dalam daftar, itu akan membuka file yang dipilih dalam buffer read-only.Sekali lagi, ini tidak selalu menawarkan akses ke gambar atau media lain, tetapi jika semua yang Anda butuhkan adalah melihat konten atau mengakses file berbasis teks saja, maka ini akan sangat membantu.
Catatan : ini tidak akan berfungsi pada semua format arsip.
sumber
Pendekatan saya Jika Anda memiliki cukup ruang disk kosong pada drive USB eksternal atau drive HDD eksternal / sekunder dengan ruang yang cukup, maka pertimbangkan untuk mengekstrak file .tar.gz Anda. Berpikir Anda mungkin tidak ingin 3 juta file pada disk sistem utama Anda, karena itu bisa memperlambat segalanya. Saya akan merekomendasikan bahwa disk eksternal dalam kasus ini memiliki sistem file yang menangani sejumlah besar file dengan mudah: berpikir ReiserFS, ext4 (dengan opsi dir_index), XFS, mungkin BtrFS. Mungkin butuh 1-2 jam untuk melakukan ekstrak, tetapi Anda bisa pergi makan siang sementara itu atau membiarkannya berjalan semalam; ketika Anda kembali, mengakses file yang diekstraksi harus berkinerja baik.
sumber