Restic: Tambahkan perintah untuk menyalin semua data ke repositori lain

Dibuat pada 25 Okt 2015  ·  22Komentar  ·  Sumber: restic/restic

Selama diskusi di #320 kami menemukan bahwa fungsionalitas mungkin berguna untuk menyalin semua data (gumpalan data, gumpalan pohon, snapshot) dari repositori ke yang baru, membuat ulang file paket dan indeks dengan cepat. Hal ini memungkinkan pembuatan repositori baru di lokasi yang berbeda (misalnya pindah dari repositori lokal ke server sftp) dan menggunakannya mulai sekarang tanpa kehilangan riwayat dan snapshot lama.

Masalah ini melacak implementasi fitur ini dan dapat ditutup ketika diimplementasikan.

work in progress feature suggestion

Komentar yang paling membantu

Saya rasa saya sudah menerapkannya... /me menggaruk kepala dan mencarinya...
... https://github.com/middelink/restic/tree/fix-323
Saya perlu memeriksa apakah masih dikompilasi, cabang itu 228 komit di belakang ...

Semua 22 komentar

Apakah ini dimaksudkan untuk menangani salinan satu kali dari satu repositori (A) ke yang baru (B)? Atau apakah ini dimaksudkan untuk lebih umum dengan melakukan "sinkronisasi" atau pembaruan konten yang diubah antara (A) dan (B) sejak sinkronisasi terakhir?

Saat ini dimaksudkan untuk menangani salinan satu kali saja, sehingga pengguna dapat bermigrasi ke repositori yang berbeda di lokasi yang berbeda, atau dengan kunci master baru.

Mengingat koneksi internet yang lambat, saya ingin kemungkinan untuk mencadangkan ke s3 dan lokasi lain seefisien mungkin.

@witeshadow Saya tidak yakin bagaimana itu bisa dilakukan secara efisien, karena data dienkripsi dalam repo A dengan master A', dan perlu dilakukan untuk repo B dengan masterkey B` yang berbeda. Kita perlu membaca semua data, mendekripsi dengan A`, mengenkripsi dengan B` dan menulis. Tidak ada cara untuk mengoptimalkan ini untuk bandwidth yang lambat. Itu akan menyakitkan...

satu-satunya optimasi yang dapat saya pikirkan adalah memiliki kriteria pemilihan pada sumber repo A, dengan menggunakan filter Host, jalur, dan tag sehingga Anda tidak perlu menyalin semua. Namun, itu tergantung pada kasus penggunaan Anda.

@ fd0 Saya hanya ingin menambahkan suara saya untuk permintaan fitur ini. Adakah yang bisa saya lakukan untuk mewujudkannya?

Anda dapat menerapkannya... Fungsionalitas itu sendiri tidak sulit dilakukan, mengonfigurasi dua backend adalah hal yang sulit. Kami tidak mendukung mengakses lebih dari satu backend (misalnya hanya ada satu $B2_ACCOUNT_ID )... jadi saya pikir fitur ini tergantung pada file konfigurasi yang tepat (lihat #16).

Katakanlah kita memiliki dua repo, A dan B, dan Anda ingin menyinkronkan A->B sehingga setelah proses selesai, kumpulan blob (dan snapshot) di B adalah superset dari himpunan blob di A .

Jadi, Anda membuka kedua repo dan memuat file indeks untuk masing-masing. Kemudian Anda mengulangi indeks A, untuk setiap gumpalan memeriksa apakah gumpalan juga terkandung dalam B. Jika ini benar, lanjutkan ke yang berikutnya. Jika salah, unduh, dekripsi, enkripsi, dan unggah ke B.

Terakhir adalah menyalin file snapshot. Untuk setiap file snapshot di A, dekripsi file, enkripsi lagi untuk B, simpan di sana dan selesai.

Seperti yang saya katakan, implementasi teknisnya agak mudah :)

Besar! Terima kasih untuk tipsnya. Saya mengalami gatal ini, jadi saya akan melihat apakah saya bisa meluangkan waktu untuk menggaruknya -- tetapi untuk jangka pendek saya harus pergi tanpa fitur restic merge ini. Jika seseorang mendapatkannya sebelum saya melakukannya, tidak apa-apa -- atau saya akan kembali ke ini pada akhirnya!

Saya rasa saya sudah menerapkannya... /me menggaruk kepala dan mencarinya...
... https://github.com/middelink/restic/tree/fix-323
Saya perlu memeriksa apakah masih dikompilasi, cabang itu 228 komit di belakang ...

Mungkin berguna untuk mengizinkan tidak hanya salinan lengkap, tetapi juga sebagian dari snapshot. Ini akan mendukung usecase yang disarankan oleh #1910 (seringkali mencadangkan ke repo utama, dan dari sana mencadangkan ke penyimpanan di luar lokasi/lebih lambat/lebih mahal lebih jarang) dan, saya pikir, tidak akan jauh lebih sulit untuk diterapkan daripada salinan lengkap. Mungkin menjadi tambahan di masa depan, meskipun :-)

Err… Adakah berita untuk pengguna biasa tanpa keahlian dev untuk mengkompilasi dan mencoba saran @middelink?

Ini sebagian besar merupakan komentar "saya juga", tetapi saya ingin memiliki kemampuan untuk menyalin hanya snapshot tertentu dari satu repo ke repo lainnya, daripada semantik "salin-semua" atau "sinkronisasi"; misalnya, buat cadangan harian ke penyimpanan lokal, lalu sekali seminggu salin hanya harian terbaru ke ember s3, dll.

Nah, maka Anda beruntung, copy cmd saya membutuhkan satu atau lebih id snapshot. Sebenarnya copy-all bukanlah sesuatu yang dilakukannya. Anda harus membuat daftar id snapshot Anda terlebih dahulu dan kemudian menggabungkannya pada cmdline "restic copy". Karena saya melihat ini sebagai kasus penggunaan yang merosot, saya baik-baik saja.

Tanpa menggali terlalu dalam, mungkin beberapa diskusi dengan ncw/rclone bisa berguna...

Saya juga tertarik dengan fungsi gabung/salin, saya memiliki repositori di stik USB yang ingin saya gabungkan/salin ke repositori pusat saya (kata sandi yang sama).
Ada berita tentang ini?

Sepertinya cabang fork telah diperbarui menjadi master , tetapi belum ada PR untuk itu.

@middelink Apakah kode Anda sudah selesai/dapat digabungkan? Jika tidak, apa yang masih perlu dilakukan? Ini adalah fitur yang sangat saya inginkan :)

@theoretical2019 Kodenya sendiri sudah selesai, tetapi setiap kali saya duduk untuk membuat PR resmi, saya terus menemukan hal-hal yang harus saya lakukan sebelum siap. Seperti dokumentasi, seperti yang belum dirilis/changelog...
Oh, dan tes! Apakah saya menyebutkan tes? Perlu tes :P

@middelink Fyi, saya telah menguji cabang Anda dengan rebasing ke master hulu dan berfungsi cukup baik. Itu membuat snapshot baru dengan Host, tag, dan tanggal yang sama :+1:
Menunggu PR :tada:

Sekarang dengan fitur tersebut, saya dapat membuat repositori sekunder, yang digunakan oleh klien hanya ketika repositori pertama dikunci untuk pemeliharaan (misalnya prune). Dan tugas pemangkasan dapat memicu salinan dari sekunder setelah selesai, jadi tidak ada cadangan yang hilang, karenanya nol waktu henti pada layanan pencadangan.

@middelink Maukah Anda berbaik hati membuat PR kode Anda? Saat melakukannya, izinkan juga

Yang penting kita punya PR dasar untuk dikerjakan. Saya ingin karya hebat Anda bergerak, dan saya pikir begitu juga dengan orang lain :) Beri tahu saya jika Anda memerlukan bantuan untuk membuat PR!

@rawtaz Tentu. Biarkan saya menyinkronkan dan semua itu. Untuk beberapa alasan saya belum menemukan waktu untuk melakukannya lebih awal, tetapi sepertinya saya punya waktu sekarang.

Terima kasih semuanya atas pekerjaan Anda dalam hal ini!

Saya punya satu pertanyaan tersisa yang tidak dijawab oleh dokumen (setidaknya untuk saya): Apakah saya perlu memangkas keduanya atau cukup untuk melakukannya di sumber dan penghapusan snapshot disebarkan?

@lfrancke Saat menggunakan perintah copy Anda secara khusus mencantumkan snapshot yang ingin Anda salin. Snapshot lainnya, baik snapshot yang sudah ada, yang tidak ada maupun yang sudah ada sebelumnya, tetapi yang sekarang dipangkas, dan yang sudah tidak ada lagi, tidak berlaku.

Jika Anda menyalin snapshot dari repo A ke repo B dan kemudian melupakan dan memangkasnya di repo A, mereka tidak akan dilupakan dan dipangkas di repo B secara otomatis, Anda harus melakukannya sendiri di repo B.

Luar biasa, terima kasih banyak @rawtaz atas

Apakah halaman ini membantu?
0 / 5 - 0 peringkat