Susunan repository, hardlink, dan mirroring

Pada repositori Ubuntu, ada direktori pool/ yang berisi seluruh berkas yang ada, mulai dari berkas paket deb, kode sumber orig.tar.gz, modifikasi tuk membuat paket diff.gz, dan lain-lain. Berkas-berkas ini ditujuk dari daftar isi yang ada pada berkas Packages dan Sources yang ada di bawah direktori dists/. Sebuah berkas, tentu saja bisa ditunjuk oleh lebih dari satu daftar isi, yang melambangkan versi dan arsitektur berbeda. Kalau ada berkas yang dipakai bersama, bisa lebih hemat tempat bukan?

Lain distro, lain pula teknik yang dipakai tuk menyusun repositori. Coba lihat repositori Fedora. Berkas-berkas paket, selain dapat ditemukan di bawah direktori Everything/, dapat juga ditemukan di bawah direktori Fedora/. Kalau dilihat sekilas, banyak duplikasi berkas di sana yang tentu saja kalau tidak diatur dengan baik, hanya membuang kapasitas harddisk. Dengan kata lain, tidak efisien!

Susunan repositori Fedora yang dibuat seperti itu belum tentu tidak memiliki maksud tertentu. Berhubung saya tidak familiar dengan Fedora termasuk repositorinya, saya hanya dapat menduga-duga saja. Total ukuran berkas paket di bawah direktori Fedora/ untuk i386 adalah sekitar 2.9 GB. Sedangkan total ukuran berkas di bawah direktori Everything/ adalah sekitar 12.6 GB. Sungguh perbedaan ukuran yang sangat besar bukan? Saya duga, paket yang ada di bawah direktori Fedora/ adalah paket-paket “pilihan” sedangkan yang ada di bawah direktori Everything/, sesuai namanya, adalah seluruh paket yang ada.

Penyusunan direktori seperti ini sebenarnya mempermudah urusan mirroring. Aplikasi rsync yang dapat digunakan untuk menyalin berkas “mentah-mentah” sudah bisa digunakan untuk membuat mirror sebuah repositori Fedora secara selektif, yaitu hanya repositori untuk versi dan arsitektur tertentu saja. Berbeda dengan menyalin repositori Ubuntu yang harus menggunakan aplikasi tambahan seperti debmirror jika ingin menyalin secara selektif.

Lalu bagaimana caranya agar tetap bisa mengatur susunan repositori seperti Fedora dan tetap bisa menjaga efisiensi penggunaan harddisk seperti Ubuntu? Pembuatan hardlink bisa menjadi jawaban! Dengan menggunakan hardlink, sebuah berkas dapat dibuat “salinannya” di tempat lain tanpa harus mengorbankan kapasitas harddisk karena berkas-berkas tersebut sebenarnya adalah berkas yang sama. Yaaa.. mirip pointer pada bahasa C yang menunjuk ke alamat memori yang sama. Dan, … repositori Fedora menggunakan cara ini! Berkas yang ada di bawah direktori Fedora/ merupakan hardlink ke berkas yang ada di bawah direktori Everything/ (atau sebaliknya? ah sama saja 🙂

Nah.. bagi para pemelihara mirror yang menggunakan rsync, untungnya rsync cukup cerdas untuk membaca informasi link ini. Berkas berbeda yang sebenarnya sama karena penggunaan hardlink ini dapat dideteksi sehingga sang mirror tidak perlu menyalin berkas yang sama lebih dari satu kali dan rsync akan membuatkan hardlink-nya secara otomatis. Hemat bandwidth, hemat waktu, dan tentu saja hemat tempat!

Caranya cukup dengan menambahkan opsi -H pada saat menjalankan rsync.

$ rsync -avH server::modul/ /tujuan/

Sekian dulu, nanti terlalu panjang =P

Leave a Reply