restic version
restic 0.9.6 (v0.9.6-0-gb723ca3d) dikompilasi dengan go1.10.4 di linux/amd64
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.
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).
Folder $RECYCLE.BIN
dikecualikan dari cadangan saat ditambahkan ke file pengecualian.
Folder $RECYCLE.BIN
disertakan dalam cadangan meskipun ditambahkan ke file pengecualian.
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.
Saya berasumsi bahwa pasti ada kesalahan saat menangani nama file dari file pengecualian yang melibatkan karakter jahat (seperti tanda dolar).
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.
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.
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.