iRemove .cache file - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 1a978a0ee0986c6cd869dd94a47cf85b89f2474f /scm/dedup/commit/1a978a0ee0986c6cd869dd94a47cf85b89f2474f.gph bitreich.org 70 1parent df98cd4221d5e54c88d5ce172690c6cc7cb08235 /scm/dedup/commit/df98cd4221d5e54c88d5ce172690c6cc7cb08235.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Wed, 6 Mar 2019 09:33:19 +0000 Err bitreich.org 70 i Err bitreich.org 70 iRemove .cache file Err bitreich.org 70 i Err bitreich.org 70 iIt did not make a lot of sense since the same information is stored in Err bitreich.org 70 ithe snapshots file. The time spent to load the cache from the Err bitreich.org 70 isnapshots file on every run is negligible. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M README | 2 +- Err bitreich.org 70 i M dedup.1 | 4 ++-- Err bitreich.org 70 i M dedup.c | 88 ++----------------------------- Err bitreich.org 70 i M dedup.h | 1 - Err bitreich.org 70 i M types.c | 36 ------------------------------- Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 6 insertions(+), 125 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/README b/README /scm/dedup/file/README.gph bitreich.org 70 i@@ -10,7 +10,7 @@ follows: Err bitreich.org 70 i Err bitreich.org 70 i tar -c ~/dir | dedup -r ~/bak -m "$(date)" Err bitreich.org 70 i Err bitreich.org 70 i-This will create .{cache,snapshots,store} files in the ~/bak Err bitreich.org 70 i+This will create .{snapshots,store} files in the ~/bak Err bitreich.org 70 i directory. The store file contains all the unique blocks. The Err bitreich.org 70 i snapshots file contains all the revisions of files that have been Err bitreich.org 70 i deduplicated. Each revision is identified by its SHA256 hash. The Err bitreich.org 70 1diff --git a/dedup.1 b/dedup.1 /scm/dedup/file/dedup.1.gph bitreich.org 70 i@@ -1,4 +1,4 @@ Err bitreich.org 70 i-.Dd March 05, 2019 Err bitreich.org 70 i+.Dd March 06, 2019 Err bitreich.org 70 i .Dt DEDUP 1 Err bitreich.org 70 i .Os Err bitreich.org 70 i .Sh NAME Err bitreich.org 70 i@@ -33,7 +33,7 @@ Enable verbose mode. Err bitreich.org 70 i .It Fl e Ar id Err bitreich.org 70 i Extract snapshot with the specified id. Err bitreich.org 70 i .It Fl r Ar root Err bitreich.org 70 i-Set the root directory where the .cache, .snapshots and .store Err bitreich.org 70 i+Set the root directory where the .snapshots and .store Err bitreich.org 70 i files will be created. Err bitreich.org 70 i .It Fl m Ar message Err bitreich.org 70 i Attach a descriptive message to the snapshot. Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -18,7 +18,6 @@ Err bitreich.org 70 i Err bitreich.org 70 i #define SNAPSF ".snapshots" Err bitreich.org 70 i #define STOREF ".store" Err bitreich.org 70 i-#define CACHEF ".cache" Err bitreich.org 70 i Err bitreich.org 70 i enum { Err bitreich.org 70 i WALK_CONTINUE, Err bitreich.org 70 i@@ -36,7 +35,6 @@ static struct blk_hdr blk_hdr; Err bitreich.org 70 i static struct cache *cache; Err bitreich.org 70 i static int ifd; Err bitreich.org 70 i static int sfd; Err bitreich.org 70 i-static int cfd; Err bitreich.org 70 i static unsigned long long cache_hits; Err bitreich.org 70 i static unsigned long long cache_misses; Err bitreich.org 70 i Err bitreich.org 70 i@@ -395,7 +393,7 @@ check_snap(struct snapshot *snap, void *arg) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static int Err bitreich.org 70 i-reload_cache(struct snapshot *snap, void *arg) Err bitreich.org 70 i+load_cache(struct snapshot *snap, void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t *buf; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i@@ -462,74 +460,6 @@ match_ver(uint64_t v) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i-hash_cache_entry_update(struct cache_entry *cache_entry, SHA256_CTX *ctx) Err bitreich.org 70 i-{ Err bitreich.org 70 i- uint8_t buf[CACHE_ENTRY_SIZE]; Err bitreich.org 70 i- char fmt[BUFSIZ]; Err bitreich.org 70 i- int n; Err bitreich.org 70 i- Err bitreich.org 70 i- snprintf(fmt, sizeof(fmt), "'%dqq", MDSIZE); Err bitreich.org 70 i- n = pack(buf, fmt, cache_entry->md, cache_entry->offset, Err bitreich.org 70 i- cache_entry->size); Err bitreich.org 70 i- SHA256_Update(ctx, buf, n); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-load_cache(void) Err bitreich.org 70 i-{ Err bitreich.org 70 i- uint8_t md[MDSIZE]; Err bitreich.org 70 i- struct stat sb; Err bitreich.org 70 i- SHA256_CTX ctx; Err bitreich.org 70 i- uint64_t nr_entries, i; Err bitreich.org 70 i- Err bitreich.org 70 i- if (fstat(cfd, &sb) < 0) Err bitreich.org 70 i- err(1, "fstat"); Err bitreich.org 70 i- nr_entries = sb.st_size / CACHE_ENTRY_SIZE; Err bitreich.org 70 i- Err bitreich.org 70 i- xlseek(cfd, 0, SEEK_SET); Err bitreich.org 70 i- SHA256_Init(&ctx); Err bitreich.org 70 i- for (i = 0; i < nr_entries; i++) { Err bitreich.org 70 i- struct cache_entry cache_entry; Err bitreich.org 70 i- Err bitreich.org 70 i- read_cache_entry(cfd, &cache_entry); Err bitreich.org 70 i- hash_cache_entry_update(&cache_entry, &ctx); Err bitreich.org 70 i- add_cache_entry(cache, &cache_entry); Err bitreich.org 70 i- } Err bitreich.org 70 i- SHA256_Final(md, &ctx); Err bitreich.org 70 i- Err bitreich.org 70 i- if (memcmp(snap_hdr.cache_md, md, sizeof(snap_hdr.cache_md)) != 0) { Err bitreich.org 70 i- if (verbose > 0) Err bitreich.org 70 i- fprintf(stderr, "Rebuilding cache\n"); Err bitreich.org 70 i- free_cache(cache); Err bitreich.org 70 i- cache = alloc_cache(); Err bitreich.org 70 i- if (ftruncate(cfd, 0) < 0) Err bitreich.org 70 i- err(1, "ftruncate"); Err bitreich.org 70 i- xlseek(ifd, SNAP_HDR_SIZE, SEEK_SET); Err bitreich.org 70 i- xlseek(cfd, 0, SEEK_SET); Err bitreich.org 70 i- walk_snap(reload_cache, NULL); Err bitreich.org 70 i- } Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static int Err bitreich.org 70 i-flush_cache(struct cache_entry *cache_entry, void *arg) Err bitreich.org 70 i-{ Err bitreich.org 70 i- hash_cache_entry_update(cache_entry, arg); Err bitreich.org 70 i- write_cache_entry(cfd, cache_entry); Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-save_cache(void) Err bitreich.org 70 i-{ Err bitreich.org 70 i- SHA256_CTX ctx; Err bitreich.org 70 i- Err bitreich.org 70 i- SHA256_Init(&ctx); Err bitreich.org 70 i- xlseek(cfd, 0, SEEK_SET); Err bitreich.org 70 i- walk_cache(cache, flush_cache, &ctx); Err bitreich.org 70 i- SHA256_Final(snap_hdr.cache_md, &ctx); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i init_blk_hdr(void) Err bitreich.org 70 i { Err bitreich.org 70 i blk_hdr.flags = (VER_MAJ << VER_MAJ_SHIFT) | VER_MIN; Err bitreich.org 70 i@@ -598,17 +528,8 @@ init(int iflag) Err bitreich.org 70 i if (sfd < 0) Err bitreich.org 70 i err(1, "open %s", STOREF); Err bitreich.org 70 i Err bitreich.org 70 i- /* Err bitreich.org 70 i- * The cache file does not have to exist Err bitreich.org 70 i- * and will be created again if deleted. Err bitreich.org 70 i- */ Err bitreich.org 70 i- cfd = open(CACHEF, O_RDWR | O_CREAT, 0600); Err bitreich.org 70 i- if (cfd < 0) Err bitreich.org 70 i- err(1, "open %s", CACHEF); Err bitreich.org 70 i- Err bitreich.org 70 i if (flock(ifd, LOCK_NB | LOCK_EX) < 0 || Err bitreich.org 70 i- flock(sfd, LOCK_NB | LOCK_EX) < 0 || Err bitreich.org 70 i- flock(cfd, LOCK_NB | LOCK_EX) < 0) Err bitreich.org 70 i+ flock(sfd, LOCK_NB | LOCK_EX) < 0) Err bitreich.org 70 i err(1, "flock"); Err bitreich.org 70 i Err bitreich.org 70 i if (iflag) { Err bitreich.org 70 i@@ -620,7 +541,7 @@ init(int iflag) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i cache = alloc_cache(); Err bitreich.org 70 i- load_cache(); Err bitreich.org 70 i+ walk_snap(load_cache, NULL); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -629,17 +550,14 @@ term(void) Err bitreich.org 70 i if (verbose > 0) Err bitreich.org 70 i print_stats(&snap_hdr.st); Err bitreich.org 70 i Err bitreich.org 70 i- save_cache(); Err bitreich.org 70 i free_cache(cache); Err bitreich.org 70 i Err bitreich.org 70 i save_blk_hdr(); Err bitreich.org 70 i save_snap_hdr(); Err bitreich.org 70 i Err bitreich.org 70 i- fsync(cfd); Err bitreich.org 70 i fsync(sfd); Err bitreich.org 70 i fsync(ifd); Err bitreich.org 70 i Err bitreich.org 70 i- close(cfd); Err bitreich.org 70 i close(sfd); Err bitreich.org 70 i close(ifd); Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -10,7 +10,6 @@ Err bitreich.org 70 i #define BLK_HDR_SIZE 16 Err bitreich.org 70 i #define BLK_DESC_SIZE 48 Err bitreich.org 70 i #define SNAPSHOT_SIZE 304 Err bitreich.org 70 i-#define CACHE_ENTRY_SIZE 48 Err bitreich.org 70 i Err bitreich.org 70 i #define MSGSIZE 256 Err bitreich.org 70 i #define MDSIZE 32 Err bitreich.org 70 1diff --git a/types.c b/types.c /scm/dedup/file/types.c.gph bitreich.org 70 i@@ -193,39 +193,3 @@ write_snapshot_blk_descs(int fd, struct snapshot *snap) Err bitreich.org 70 i for (i = 0; i < snap->nr_blk_descs; i++) Err bitreich.org 70 i write_blk_desc(fd, &snap->blk_desc[i]); Err bitreich.org 70 i } Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-read_cache_entry(int fd, struct cache_entry *cache_entry) Err bitreich.org 70 i-{ Err bitreich.org 70 i- uint8_t buf[CACHE_ENTRY_SIZE]; Err bitreich.org 70 i- char fmt[BUFSIZ]; Err bitreich.org 70 i- int n; Err bitreich.org 70 i- Err bitreich.org 70 i- if (xread(fd, buf, sizeof(buf)) == 0) Err bitreich.org 70 i- errx(1, "read_blk_desc: unexpected EOF"); Err bitreich.org 70 i- Err bitreich.org 70 i- snprintf(fmt, sizeof(fmt), "'%dqq", MDSIZE); Err bitreich.org 70 i- n = unpack(buf, fmt, Err bitreich.org 70 i- cache_entry->md, Err bitreich.org 70 i- &cache_entry->offset, Err bitreich.org 70 i- &cache_entry->size); Err bitreich.org 70 i- Err bitreich.org 70 i- assert(n == CACHE_ENTRY_SIZE); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-write_cache_entry(int fd, struct cache_entry *cache_entry) Err bitreich.org 70 i-{ Err bitreich.org 70 i- uint8_t buf[CACHE_ENTRY_SIZE]; Err bitreich.org 70 i- char fmt[BUFSIZ]; Err bitreich.org 70 i- int n; Err bitreich.org 70 i- Err bitreich.org 70 i- snprintf(fmt, sizeof(fmt), "'%dqq", MDSIZE); Err bitreich.org 70 i- n = pack(buf, fmt, Err bitreich.org 70 i- cache_entry->md, Err bitreich.org 70 i- cache_entry->offset, Err bitreich.org 70 i- cache_entry->size); Err bitreich.org 70 i- Err bitreich.org 70 i- assert(n == CACHE_ENTRY_SIZE); Err bitreich.org 70 i- xwrite(fd, buf, n); Err bitreich.org 70 i-} Err bitreich.org 70 .