Solusi 1:
Opsi untuk mengakses dan mencadangkan jutaan file dengan cepat
Pinjam dari orang-orang dengan masalah serupa
Kedengarannya seperti masalah yang lebih mudah yang dihadapi server berita USENET dan proxy web caching:ratusan juta file kecil yang diakses secara acak. Anda mungkin ingin mengambil petunjuk dari mereka (kecuali mereka biasanya tidak perlu mengambil cadangan).
http://devel.squid-cache.org/coss/coss-notes.txt
http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=4074B50D266E72C69D6D35FEDCBBA83D?doi=10.1.1.31.4000&rep=rep1&type=pdf
Jelas sifat siklus dari sistem file berita siklik tidak relevan bagi Anda, tetapi konsep tingkat rendah tentang memiliki banyak file/perangkat disk dengan gambar yang dikemas dan indeks cepat dari informasi yang diberikan pengguna untuk mencari informasi lokasi sangat tepat.
Sistem file khusus
Tentu saja, ini hanya konsep yang mirip dengan apa yang dibicarakan orang dengan membuat sistem file dalam file dan memasangnya melalui loopback kecuali Anda dapat menulis kode sistem file Anda sendiri. Tentu saja, karena Anda mengatakan sistem Anda sebagian besar dibaca, Anda sebenarnya dapat mendedikasikan partisi disk (atau partisi lvm untuk fleksibilitas dalam ukuran) untuk tujuan yang satu ini. Saat Anda ingin mencadangkan, pasang sistem file hanya-baca, lalu buat salinan bit partisi.
LVM
Saya menyebutkan LVM di atas sebagai berguna untuk memungkinkan ukuran partisi yang dinamis sehingga Anda tidak perlu mencadangkan banyak ruang kosong. Tapi, tentu saja, LVM memiliki fitur lain yang mungkin bisa diterapkan. Khususnya fungsi "snapshot" yang memungkinkan Anda membekukan sistem file pada saat tertentu. rm -rf
yang tidak disengaja atau apa pun yang tidak akan mengganggu snapshot. Bergantung pada apa yang Anda coba lakukan, itu mungkin cukup untuk kebutuhan pencadangan Anda.
RAID-1
Saya yakin Anda sudah terbiasa dengan RAID dan mungkin sudah menggunakannya untuk keandalan, tetapi RAID-1 juga dapat digunakan untuk cadangan, setidaknya jika Anda menggunakan perangkat lunak RAID (Anda dapat menggunakannya dengan perangkat keras RAID, tetapi itu sebenarnya memberi Anda keandalan yang lebih rendah karena mungkin memerlukan pengontrol model/revisi yang sama untuk membaca). Konsepnya adalah Anda membuat grup RAID-1 dengan satu disk lebih banyak daripada yang sebenarnya Anda perlukan untuk kebutuhan keandalan normal Anda (misalnya disk ketiga jika Anda menggunakan perangkat lunak RAID-1 dengan dua disk, atau mungkin disk besar dan perangkat keras- RAID5 dengan disk yang lebih kecil dengan perangkat lunak RAID-1 di atas perangkat keras RAID-5). Ketika tiba saatnya untuk mengambil cadangan, instal disk, minta mdadm untuk menambahkan disk itu ke grup penyerang, tunggu hingga menunjukkan kelengkapan, secara opsional minta scrub verifikasi, lalu hapus disk. Tentu saja, bergantung pada karakteristik kinerja, Anda dapat memasang disk hampir sepanjang waktu dan hanya menghapusnya untuk ditukar dengan disk alternatif, atau Anda dapat memasang disk hanya selama pencadangan).
Solusi 2:
Anda dapat memasang sistem file virtual menggunakan pengelola loopback, tetapi meskipun hal ini akan mempercepat proses pencadangan, hal ini dapat memengaruhi operasi normal.
Alternatif lain adalah mencadangkan seluruh perangkat menggunakan dd. Misalnya, dd if=/dev/my_device of=/path/to/backup.dd
.
Solusi 3:
Seperti yang mungkin Anda ketahui, masalah Anda adalah lokalitas. Pencarian disk tipikal membutuhkan waktu sekitar 10 ms. Jadi, hanya memanggil "stat" (atau open()) pada 10 juta file yang ditempatkan secara acak memerlukan 10 juta pencarian, atau sekitar 100.000 detik, atau 30 jam.
Jadi, Anda harus meletakkan file Anda ke dalam wadah yang lebih besar, sehingga angka yang relevan adalah bandwidth drive Anda (biasanya 50-100 MB/detik untuk satu disk) daripada waktu pencarian Anda. Juga agar Anda dapat melakukan RAID padanya, yang memungkinkan Anda meningkatkan bandwidth (namun tidak mengurangi waktu pencarian).
Saya mungkin tidak memberi tahu Anda apa pun yang belum Anda ketahui, tetapi maksud saya adalah bahwa ide "wadah" Anda pasti akan menyelesaikan masalah, dan hampir semua wadah akan berhasil. Dudukan loopback kemungkinan akan berfungsi sebaik apa pun.
Solusi 4:
Ada beberapa opsi. Yang paling sederhana, dan harus bekerja dengan semua sistem file Linux, adalah dd
salin seluruh partisi (/dev/sdb3
atau /dev/mapper/Data-ImageVol
) ke satu gambar dan mengarsipkan gambar tersebut. Dalam hal memulihkan file tunggal, loopback pasang gambar (mount -o loop /usr/path/to/file /mountpoint
) dan salin file yang Anda butuhkan. Untuk pemulihan partisi penuh, Anda dapat membalik arah dd
awal perintah, tetapi Anda benar-benar membutuhkan partisi dengan ukuran yang sama.
Menilai dari kasus penggunaan Anda, saya menduga pemulihan file individual adalah peristiwa yang sangat jarang terjadi, jika pernah terjadi sama sekali. Inilah mengapa cadangan berbasis gambar sangat masuk akal di sini. Jika Anda memang perlu melakukan pemulihan individual lebih sering, menggunakan snapshot LVM bertahap akan jauh lebih nyaman; tetapi Anda masih perlu melakukan pencadangan berbasis gambar untuk bencana kritis "kami kehilangan segalanya". Pemulihan berbasis gambar cenderung banyak lebih cepat daripada pemulihan berbasis tar hanya karena ini hanya memulihkan blok, tidak menimbulkan cukup banyak operasi metadata dengan setiap fopen/fclose, dan juga bisa menjadi operasi disk yang sangat berurutan untuk peningkatan kecepatan lebih lanjut.
Bergantian, seperti yang ditunjukkan oleh video Google @casey sekitar setengah jalan, XFS adalah sistem file yang bagus (jika rumit). Salah satu utilitas yang lebih bagus dengan XFS adalah xfsdump
utilitas, yang akan membuang seluruh sistem file ke satu file, dan umumnya melakukannya lebih cepat dari tar
bisa. Ini adalah utilitas khusus sistem file, sehingga dapat memanfaatkan internal fs dengan cara yang tidak dapat dilakukan oleh tar.
Solusi 5:
Saya sarankan Anda terlebih dahulu mencoba memutakhirkan ke EXT4, jika Anda belum menjalankannya.
Google telah melakukan banyak penelitian mengapa EXT4 adalah ide yang bagus.
Setelah itu, Anda harus melihat penerapan arsitektur sistem file terdistribusi. Misalnya:
- http://www.xtreemfs.org/
- http://code.google.com/p/kosmosfs/
- http://hadoop.apache.org/hdfs/