Restic: mengecualikan $RECYCLE.BIN dengan file pengecualian tidak berfungsi

Dibuat pada 31 Mei 2020  ·  4Komentar  ·  Sumber: restic/restic

Keluaran restic version

restic 0.9.6 (v0.9.6-0-gb723ca3d) dikompilasi dengan go1.10.4 di linux/amd64

Bagaimana tepatnya Anda menjalankan restic?

Saya memiliki partisi NTFS yang dibagikan antara dual-boot Windows 10 dan Ubuntu 18.04, yang saya backup dengan restic dari Ubuntu. Seperti yang mungkin Anda ketahui, Windows 10 membuat direktori $RECYCLE.BIN di direktori root partisi untuk menyimpan file yang dipindahkan ke recycle bin. Saya ingin mencadangkan partisi bersama, tetapi bukan direktori $RECYCLE.BIN .

Lebih lanjut di bawah ini saya telah memberikan penjelasan rinci tentang bagaimana mereproduksi apa yang saya amati. Singkat cerita: Menggunakan --exclude="\$RECYCLE.BIN" dengan perintah cadangan tidak mengecualikan direktori, menempatkan "$RECYCLE.BIN" (atau varian lain yang dapat saya buat, lihat di bawah) ke dalam --exclude-file tidak tidak mengecualikan direktori.

Backend/server/layanan apa yang Anda gunakan untuk menyimpan repositori?

Saya mengamati perilaku baik dengan repositori lokal (di bawah Ubuntu 18.04) dan dengan repositori jarak jauh melalui SFTP (backup dijalankan juga di Ubuntu 18.04).

Perilaku yang diharapkan

Folder $RECYCLE.BIN dikecualikan dari cadangan saat ditambahkan ke file pengecualian.

Perilaku sebenarnya

Folder $RECYCLE.BIN disertakan dalam cadangan meskipun ditambahkan ke file pengecualian.

Langkah-langkah untuk mereproduksi perilaku

Di dalam direktori pengujian sementara, jalankan perintah berikut di bash:

# prepare the directory to be backed up
mkdir "data";
mkdir "data/\$RECYCLE.BIN";
touch "data/backup_this";
touch "data/\$RECYCLE.BIN"/ignore_this";

# init repo
mkdir "repo";
restic init --repo=repo/

# prepare exclude file
echo "\$RECYCLE.BIN" > exclude.file

Sekarang menerbitkan restic --repo=repo/ backup --verbose --verbose data/ menghasilkan:

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
start scan on [data/]
start backup on [data/]
scan finished in 0.257s: 2 files, 0 B
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.004s (0 B added)
new       /data/backup_this, saved in 0.000s (0 B added)

Files:           2 new,     0 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 372 B

processed 2 files, 0 B in 0:00
snapshot 27c00c6b saved

seperti yang diharapkan.

Mengeluarkan hasil restic --repo=repo/ backup --verbose --verbose --exclude="\$RECYCLE.BIN" data/

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 27c00c6b
start scan on [data/]
start backup on [data/]
scan finished in 0.257s: 1 files, 0 B
unchanged /data/backup_this

Files:           0 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 372 B

processed 1 files, 0 B in 0:00
snapshot 61c27a16 saved

yang juga diharapkan.

Namun, mengeluarkan restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ , di mana

 $ cat exclude.file 
$RECYCLE.BIN

menghasilkan

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 61c27a16
start scan on [data/]
start backup on [data/]
scan finished in 0.211s: 2 files, 0 B
unchanged /data/backup_this
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.003s (0 B added)

Files:           1 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 2 files, 0 B in 0:00
snapshot 9a62470f saved

Artinya, direktori tidak dikecualikan dari cadangan meskipun ada dalam file pengecualian.

Saya juga mencoba varian yang berbeda dari file yang dikecualikan (melarikan diri dari tanda dolar, menambahkan tanda kutip, menambahkan baris baru di akhir file), tetapi tidak ada yang membuat restic untuk mengecualikan direktori.

Apakah Anda tahu apa yang mungkin menyebabkan ini?

Saya berasumsi bahwa pasti ada kesalahan saat menangani nama file dari file pengecualian yang melibatkan karakter jahat (seperti tanda dolar).

Apakah Anda punya ide bagaimana memecahkan masalah?

Sayangnya, saya tidak tahu tentang go (saya hanya fasih dalam C++), tetapi pasti ada yang salah dalam interaksi dengan OS dan/atau sistem file ketika berhadapan dengan nama file termasuk karakter aneh.

Apakah restic membantu Anda hari ini? Apakah itu membuat Anda bahagia dengan cara apa pun?

Saya menggunakan restic secara ekstensif baik untuk pencadangan lokal dan jarak jauh. Pertahankan kerja bagus!
Jika saya dapat memberikan bantuan tambahan dalam menyelesaikan masalah ini, beri tahu saya.

backup need feedback questioproblem

Semua 4 komentar

Tidak yakin tentang --exclude , tetapi dalam mengecualikan file restic memperluas variabel lingkungan. Gunakan $$RECYCLE.BIN untuk menghindari ini.

Lihat: https://restic.readthedocs.io/en/latest/040_backup.html#exclude -files

Yah, terima kasih, sepertinya saya benar-benar mengabaikan paragraf tunggal ini dalam dokumentasi.

Tampaknya berhasil:

 $ cat exclude.file 
$$RECYCLE.BIN

dan mengeluarkan restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ lagi menghasilkan

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 96bdd658
start scan on [data/]
start backup on [data/]
scan finished in 0.211s: 1 files, 0 B
unchanged /data/backup_this

Files:           0 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 1 files, 0 B in 0:00
snapshot 5c475b96 saved

seperti yang diharapkan.

Namun, sekarang lebih dari 10 tahun pengalaman Linux saya tidak pernah menemukan harus melarikan diri dari $ oleh $$ bukannya \$ , tetapi sebagai dokumentasi menyatakan, ini tampaknya menjadi standar untuk os.ExpandEnv , jadi ini tidak khusus untuk restic.

Namun, restic --repo=repo/ backup --verbose --verbose --exclude="$$RECYCLE.BIN" data/ menghasilkan

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 5c475b96
start scan on [data/]
start backup on [data/]
scan finished in 0.204s: 2 files, 0 B
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.002s (0 B added)
unchanged /data/backup_this

Files:           1 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 2 files, 0 B in 0:00
snapshot ed44b219 saved

yang tampaknya cukup tidak konsisten dan kontra-intuitif.

Tanda kutip ganda di --exclude="$$RECYCLE.BIN" berarti bahwa shell memperluas $$ ke PID saat ini. Cobalah dengan tanda kutip tunggal: --exclude='$$RECYCLE.BIN'

(Misalnya lihat echo "$$RECYCLE.BIN" vs echo '$$RECYCLE.BIN' )

@kontakm Masalahnya sepertinya sudah teratasi bagi saya. Silakan tutup jika itu masalahnya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat