Restic: Izinkan pencampuran sertakan dan kecualikan pola untuk pencadangan dan pemulihan

Dibuat pada 18 Jul 2015  ·  17Komentar  ·  Sumber: restic/restic

Ini adalah masalah lanjutan untuk #226. Hingga saat ini hanya mungkin untuk menentukan pola pengecualian untuk pencadangan dan pemulihan.

Ada kasus penggunaan yang tidak tercakup, misalnya: Seorang pengguna ingin membuat cadangan direktori home-nya di /home/user , tidak termasuk apa pun dari direktori work kecuali file sumber C.

Apakah ada kegunaan lain yang belum saya pikirkan?

Implementasi/Antarmuka Pengguna: Izinkan menentukan pola --include dan --exclude pada baris perintah, yang mengisi daftar umum (urutan penting di sini). Untuk setiap dir/file, periksa semua pola dalam daftar. Tindakan (mengecualikan atau menyertakan) dari pola pencocokan terakhir akan menang. Tindakan default (yang juga akan digunakan jika tidak menyertakan atau mengecualikan pola yang ditentukan) adalah "sertakan".

Ini sudah berisi kasus sudut: Haruskah restic walk /home/user/work sama sekali?

Saya pikir seharusnya tidak. Sebagai gantinya, jika ini adalah perilaku yang diinginkan, minta pengguna untuk menambahkan pola yang lebih spesifik untuk memberi sinyal bahwa direktori yang dikecualikan juga harus berjalan, misalnya restic backup --exclude /home/user/work --include /home/user/work/**/*c. /home/user .

Antarmuka pengguna yang lebih baik akan memungkinkan menentukan file untuk membaca pola dari ( --pattern-file atau sesuatu seperti itu). Dalam file ini, semua baris yang dimulai dengan # adalah komentar, baris kosong diabaikan, semua baris lainnya harus dimulai dengan + (termasuk) atau - (tidak termasuk) setelah spasi karakter dan pola. Untuk kasus penggunaan di atas, file filter akan terlihat seperti ini:

# filter out everything from work, but include c source code files
- /home/user/work
+ /home/user/work/**/*.c

Masalah ini dapat ditutup setelah solusi definitif untuk menerapkan dan mengecualikan pola.

backup restore feature enhancement

Komentar yang paling membantu

Mengapa tidak menggunakan format abaikan standar yang digunakan .gitignore ? misalnya.

# ignore everything
*
# include $HOME/.local
!$HOME/.local

Semua 17 komentar

Kemungkinan lain adalah membaca daftar file yang tepat untuk dicadangkan dari file (atau dari stdin). Kemudian orang bisa menggunakan alat apa pun yang mereka inginkan (temukan, grep, dll.) untuk membuat daftar mereka dan "menyalurkan" daftar itu ke restic.

Saya harus membaca seluruh teks sebelum mengirim balasan. Maaf.

Ini adalah masalah yang berbeda, mengambil daftar file/dir untuk dicadangkan dari stdin alih-alih argumen baris perintah. Apakah Anda pikir itu berharga untuk memilikinya? Jika demikian, dapatkah Anda menambahkan masalah?

Sekedar pengingat untuk saya sendiri: Masalah ini tentang menyertakan filter untuk cadangan, pemulihan sudah memilikinya.

Anda mungkin harus menyalin sintaks --exclude/--include/--exclude-from rsync, mereka memiliki pengalaman 20 tahun :-)
(setidaknya tolong tambahkan beberapa contoh sintaks saat ini ke panduan pengguna karena tidak jelas apakah "/ foo" dan "foo" sama atau jika "*.c" didukung.

Ah, terima kasih atas komentarnya, saya telah menambahkan masalah untuk contoh yang hilang di manual: https://github.com/restic/restic/issues/396

Sejujurnya, saya sama sekali tidak suka sintaks filter dari rsync, karena aturannya terlalu rumit. Tapi kita akan lihat apa yang bisa kita dapatkan.

Ada pembaruan? Ini jelas merupakan pilihan yang harus dimiliki. Saat ini bahkan tidak mungkin untuk membaca daftar file untuk dicadangkan dari stdin:

$ find -name '*.go' | restic backup --files-from -
open -: no such file or directory

sedangkan dapat ditulis sebagai

restic backup --exclude '*' --include '*.go'

Uhm, membaca daftar file dari stdin dapat dilakukan dengan memanggil restic sebagai berikut:

$ find -name '*.go' | restic backup --files-from /dev/stdin

Jika Anda suka, saya akan menerima PR yang menambahkan penanganan - untuk --files-from . :)

@opennota maukah Anda menjelaskan kasus penggunaan Anda? Itu akan menarik bagi kami.

Masalah tanda hubung ( - ) dilacak sebagai #769.

@fd0
Tidak banyak kasus penggunaan. Saya hanya ingin mencadangkan file dengan ekstensi tertentu saja tanpa menggunakan file sementara untuk daftar.

Jika Anda suka, saya akan menerima PR yang menambahkan penanganan - untuk --files-from. :)

Saya akan lihat apa yang dapat saya lakukan.

Anda dapat meniru perilaku ini menggunakan sed dan pipa bernama:

restic --exclude-file <(sed -n 's/^- \(.*\)/\1/p' files.list) --files-from <(sed -n 's/^+ \(.*\)/\1/p' files.list)

Baris yang dimulai dengan - tidak termasuk dan baris dengan + disertakan.

Saya pikir model yang bagus adalah apa yang baru-baru ini diterapkan borg untuk --pattern dan --patterns-from
https://borgbackup.readthedocs.io/en/stable/usage/help.html#borg -help-patterns
Tidak begitu banyak pemilih gaya yang berbeda, tetapi opsi untuk menentukan jalur root, menyertakan aturan, mengecualikan aturan, dan aturan mengecualikan tanpa pengulangan dalam file.

Mengapa tidak menggunakan format abaikan standar yang digunakan .gitignore ? misalnya.

# ignore everything
*
# include $HOME/.local
!$HOME/.local

--include dijadwalkan untuk diimplementasikan?

Kedengarannya seperti --include dan --exclude tidak dapat diimplementasikan bersama, atau setidaknya akan menjadi hierarki prioritas satu sama lain ...

Memberikan daftar file dengan --files-from tidak sepenuhnya menyelesaikan masalah karena subperintah snapshots akan menampilkan daftar file yang sangat besar dan subperintah forget tidak berfungsi seperti yang diharapkan.

Kasus penggunaan saya mencadangkan rumah saya dan saya memiliki daftar jalur dengan beberapa pengecualian dan beberapa pengecualian untuk pengecualian. Daftar jalur dasar sudah berisi seratus item. Karena semuanya di bawah $HOME , saya berharap dapat mengatakan sesuatu seperti --exclude=** --include=~/path1 --include=~/path2 --exclude=~/path2/something --exclude=*~ . Jadi, untuk menentukan apakah sebuah jalur harus disertakan, jalur tersebut harus dicocokkan dengan masing-masing --exclude dan --include dalam urutan yang benar dan pencocokan terakhir menang.

Saya pikir PR @vincentbernat adalah solusi efektif untuk persyaratan ini.

_Ringkasan: Izinkan pola negatif gaya gitignore untuk menentukan aturan pengecualian untuk pencadangan dan pemulihan._

Saya telah menggunakannya secara efektif selama beberapa minggu sekarang.

Khususnya, ini memungkinkan saya untuk menyederhanakan daftar snapshot saya, yang sebelumnya cukup bertele-tele:

b951f6a2  2019-06-15 11:30:18  elvandar    manual      /Users/daniel/Desktop
                                                       /Users/daniel/Documents
                                                       <lots more...>

ke:

d0c0bed1  2019-06-18 08:20:57  elvandar                /Users/daniel

Juga, saya telah menerapkan solusi yang efektif (tidak sempurna tetapi berfungsi) yang menyediakan pencadangan berkelanjutan menggunakan fitur ini (akan segera membagikan detailnya).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat