Bagaimana cara mendapatkan snapshotting atau versi sistem file yang transparan, efisien, atau ext3 / 4?

11

Saya sudah lama memikirkan sistem file versi. Ini adalah fitur pembunuh dan saya telah melihat Wayback, ext3cow, zfs, solusi sekering, atau hanya overlay cvs / svn / git.

Saya mempertimbangkan ext3cow model untuk kebutuhan saya. Transparan, efisien, tetapi saya dapat melakukannya tanpa ls abc@timestampfitur tambahan . Selama saya entah bagaimana mendapatkan versi file saya yang otomatis dan transparan.

Itu bisa instan atau bisa didasarkan pada snapshot pada interval 10-an, 30-an, 1m, 5m, 15m, dll. Hanya sesuatu yang secara efisien akan menangani ribuan file dalam direktori tertentu dengan berbagai ukuran, paling kecil, tetapi beberapa ke atas 100m ke 1gb.

ZFS sebenarnya bukan pilihan karena saya di linux (dan lebih suka tidak menggunakannya melalui sekering karena saya sudah memiliki pengaturan ext3 yang saya ingin versi, bukan sesuatu yang baru).

Solusi apa yang ada di luar sana?

Dale Forester
sumber

Jawaban:

7

Jika Anda membungkus sistem file Anda menggunakan LVM, maka Anda dapat membuat volume snapshot menggunakan lapisan volume logis yang mendasarinya. Ini adalah proses yang cukup sederhana dan secara mengejutkan efektif untuk hal-hal "snapshotty" standar, seperti cadangan dan rm -frpembatalan oopsi.

McJeff
sumber
Terima kasih atas jawabannya. Sayangnya, saya mencari sesuatu yang dapat diterapkan pada sistem file yang ada.
Dale Forester
6

Setelah 8 tahun mencari saya menemukan SVNFS oleh Marco R. Gazzetta (yang berbeda dari proyek yang lebih tua dengan nama yang sama oleh John Madden [yang mana orang melakukan hal yang berbeda]). SVNFS ini menggunakan svn secara transparan dalam operasi r / w:

Alih-alih membuat sistem file yang melakukan versi sendiri, saya menggunakan alat versi yang ada, subversi, dan menjadikannya transparan. Keuntungannya adalah bahwa sistem file ini tidak mengharuskan Anda untuk mempelajari alat baru, jika Anda tahu subversi

Ini ditulis dalam Python dan menggunakan FUSE:

Sekarang Anda memulai sistem file versi dengan menjalankan skrip terlampir:

python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles

Setelah semuanya baik-baik saja, Anda harus bisa mendapatkan daftar dari kedua direktori dan melihat bahwa isinya sama.

Sekarang, jika Anda membuat (hampir) file apa pun di direktori mana pun, itu juga akan muncul di sisi lain pagar. Perbedaan besar adalah bahwa jika Anda membuat file di direktori myfiles, itu akan secara otomatis ditempatkan di bawah kontrol versi (kebalikannya tidak benar).

Dalam contoh ini SVNFS menggunakan direktori terpisah untuk repo. Meskipun saya belum mengujinya. Untuk kebutuhan saya, saya ingin memiliki repositori tepat di direktori kerja saya.


Saya juga telah menemukan referensi untuk kemampuan versi Reiser4 4 tahun yang lalu:

Lihat Reiser 4. File adalah direktori.

misalnya: diff -u main.C main.C/r/123

Atau untuk mengakses properti

cat main.C/p/svn-eolstyle

echo "foobar" > main.C/p/my-property 

Tampaknya akan lebih baik untuk mengikuti model itu, karena sistem file utama sudah menempuh rute itu.

-Paul Querna

Tapi saya belum memeriksanya juga.


Dua tahun lalu saya pergi untuk mencari lebih jauh, menemukan proyek FiST untuk menghasilkan sistem file stackable dan menghubungi prof. Erez Zadok dari Stony Brook University yang merupakan penasihat / mentor untuk proyek yang disebut versi sebelumnya . Mengutip:

http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/

http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf

memungkinkan pengguna untuk mengelola versi mereka sendiri dengan mudah dan efisien. Versionfs menyediakan fungsionalitas ini dengan overhead tidak lebih dari 4% untuk beban kerja seperti pengguna. Versionfs memungkinkan pengguna untuk memilih versi apa yang disimpan dan bagaimana mereka disimpan melalui kebijakan penyimpanan dan kebijakan penyimpanan, masing-masing. Pengguna dapat memilih pertukaran antara ruang dan kinerja yang paling memenuhi kebutuhan masing-masing: salinan lengkap, salinan terkompresi, atau blok delta. Meskipun pengguna dapat mengontrol versinya, administrator dapat menegakkan nilai minimum dan maksimum, dan memberikan default yang masuk akal kepada pengguna.

Selain itu, melalui penggunaan libversionfs, aplikasi yang tidak dimodifikasi dapat memeriksa, memanipulasi, dan memulihkan versi. Pengguna hanya dapat menjalankan alat yang sudah dikenal untuk mengakses versi file sebelumnya, daripada meminta pengguna untuk mempelajari perintah yang terpisah, atau meminta administrator sistem untuk membuat ulang sistem file. Tanpa libversionfs, versi sebelumnya sepenuhnya tersembunyi dari pengguna.

Akhirnya, Versionfs melampaui copy-on-write sederhana yang digunakan oleh sistem sebelumnya: kami menerapkan copy-on-change. Meskipun pada awalnya kami berharap bahwa perbandingan antara halaman lama dan baru akan terlalu mahal, kami menemukan bahwa peningkatan waktu sistem lebih dari diimbangi dengan berkurangnya I / O dan waktu CPU yang terkait dengan penulisan blok yang tidak berubah. Ketika kebijakan penyimpanan yang lebih mahal digunakan (misalnya, kompresi), copy-on-change bahkan lebih bermanfaat.

Tampaknya sangat menarik bagi saya tetapi menghubungi orang-orang yang bekerja pada proyek tersebut mengungkapkan bahwa threre tidak dikenal sebagai tempat dari kode sumbernya. Profesor sendiri menyatakan melalui pos:

Kode Versionfs sudah sangat tua sekarang, dan hanya berfungsi di kernel 2.4. Jika Anda masih menginginkan versi stackable f / s, maka orang harus menulisnya dari awal - mungkin berdasarkan wrapfs (lihat wrapfs.filesystems.org/).

Jadi tidak ada proyek yang berjalan di sini meskipun konsep sistem file stackable tampaknya sangat bagus untuk saya. Adakah yang mau memulai proyek berdasarkan bungkus , beri tahu saya :)

saulius2
sumber
3

Anda dapat memeriksa gitfs . Ini adalah filesystem FUSE berdasarkan git, cukup stabil dan sangat mudah digunakan.

Pada dasarnya, ini overlay pada git. Setiap kali Anda memperbarui file atau direktori itu membuat komit dengan perubahan itu (tahu untuk batch komit sehingga Anda tidak berakhir dengan 100 komit ketika Anda unzip arsip). Juga tahu untuk menyinkronkan remote Anda dan menggabungkan konflik menggunakan strategi 'selalu terima milikku'.

Ketika Anda memasangnya, itu akan membawa Anda dua direktori: saat ini dan sejarah . ├── current │   ├── test1.md │   ├── test2.md │   ├── test3.md -> current/test2.md │   ├── test4.md │   └── test_directory └── history ├── 2014-11-23 │   ├── 20-00-21-d71d1579a7 │   │   └── testing.md │   └── 20-42-32-7d09611d83 │   ├── test2.md │   └── testing.md ├── 2014-12-08 │   ├── 16-38-30-6d6e71fe47 │   │   ├── test2.md │   │   └── test1.md

Informasi lebih lanjut dapat ditemukan di halaman ini .

vtemian
sumber
Menambahkan lebih banyak info akan meningkatkan jawaban ini.
Dave M
2

bup terlihat menjanjikan.

Diskusi lebih lama di sini: http://lwn.net/Articles/380983/

Shane Geiger
sumber
Ada satu peringatan dengan menggunakan sesuatu berbasis git, modifikasi dalam git tidak diperlakukan sebagai delta dari asalnya - setiap komit adalah file lengkap bahkan jika Anda hanya mengubah satu byte.
synthesizer
0

Coba rsnapshot - Saya belum menggunakannya sendiri, tapi saya menemukan itu sambil mencari sistem deduplikasi @ level file.

Jason
sumber
Itu menarik. Saya pasti akan memeriksanya. Kekhawatiran saya adalah bahwa beban io-nya akan menyebabkan gagap pada sistem saya (saya tidak melakukan sesuatu yang mirip dengan rsync beberapa waktu lalu dan berhenti menggunakannya karena hitches / gagap pada konsol lain ketika dijalankan).
Dale Forester
Saya melihat rsnapshot dan saya suka idenya tetapi sangat, sangat disayangkan bahwa itu membutuhkan salinan duplikat dari apa pun yang snapshotting. Sayangnya, dan tentu saja, saya bekerja dengan drive pada batasnya dan saya ingin mengambil snapshot konten yang sedikit lebih besar daripada ruang kosong yang tersisa.
Dale Forester
1
Kesulitannya adalah dalam kebutuhan Anda. selain sesuatu seperti rsnapshot, atau LVM, ext2 / ext3 tidak memiliki fasilitas snapshotting. Anda menunjukkan ext3cow, tetapi Anda harus mengubah sistem fiels yang mendasarinya. Perhatikan bahwa sepertinya Anda dapat menggunakan rsnapshot dan menyimpan data Anda pada mesin LAIN , saya tidak tahu ruang apa yang Anda bicarakan, tetapi mungkin masuk akal untuk menyimpan foto Anda di komputer lain? Juga perlu diingat bahwa snapshot dalam bentuk apa pun akan membutuhkan ruang disk. Jika drive Anda hampir berkapasitas, berapa banyak ruang yang tersisa untuk mengambil foto?
Jason