qdumpfs 1.8.1 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +7 -0
- data/lib/qdumpfs/option.rb +19 -7
- data/lib/qdumpfs/util.rb +2 -0
- data/lib/qdumpfs/version.rb +1 -1
- data/lib/qdumpfs.rb +6 -4
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7ceb1f25cb5025a606c5507c7184eb17464f38b21878cb233719348bd5aab369
|
|
4
|
+
data.tar.gz: 31370e10bda2e023e862b5e06d41f93c4c738a69c4146f3dfa3f2022ba4bd69c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c5510e2e47588c732850e65a1dad47d6f90583d8ca946a0ce0b5318bf4941b753941d3d84cffcd1db3ee7d62de751dc05601165830618432101bcfe653df837c
|
|
7
|
+
data.tar.gz: 646d986c74e35668d1910405726acf19efd323a9c1f468f32bd2488e854a14904672cfd20306dc09f4f7e980f23fa76b26b2182dd22601b205e0da40ea39df85
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -68,6 +68,13 @@ qdumpfs --command=sync --limit=1 /backup1 /backup2
|
|
|
68
68
|
qdumpfs --command=sync --limit=1 --keep=5Y6M7W10D backup1 /backup2
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
バックアップの同期は、コピー先の最新の日付より新しいコピー元を選択して実行されます。これはバックアップの同期が途中で中断された場合、再開することができるようにするためです。
|
|
72
|
+
例えばコピー先に2024/11/01のバックアップが存在する場合、コピー元の2024/11/01より後のバックアップデータ(例えば2024/11/02)があれば、それが同期されます(同じ日付は同期されません)。
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
|
|
71
78
|
### バックアップフォルダの削除
|
|
72
79
|
|
|
73
80
|
"--command expire"で、"--keep="パターンに該当しないバックアップを削除できます。
|
data/lib/qdumpfs/option.rb
CHANGED
|
@@ -121,11 +121,17 @@ module Qdumpfs
|
|
|
121
121
|
@cmd = @opts[:c] || 'backup'
|
|
122
122
|
|
|
123
123
|
# @logger = NullLogger.new
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
if @opts[:logpath]
|
|
125
|
+
@logpath = @opts[:logpath]
|
|
126
|
+
@logdir = File.dirname(@logpath)
|
|
127
|
+
else
|
|
128
|
+
logname = @opts[:logname] || 'qdumpfs.log'
|
|
129
|
+
#ログディレクトリの作成
|
|
130
|
+
@logdir = @opts[:logdir] || Dir.pwd
|
|
131
|
+
@logpath = File.join(@logdir, logname)
|
|
132
|
+
end
|
|
133
|
+
|
|
127
134
|
Dir.mkdir(@logdir) unless FileTest.directory?(@logdir)
|
|
128
|
-
@logpath = File.join(@logdir, logfile)
|
|
129
135
|
@logger = SimpleLogger.new(@logpath)
|
|
130
136
|
|
|
131
137
|
verifyfile = 'verify.txt'
|
|
@@ -184,18 +190,24 @@ module Qdumpfs
|
|
|
184
190
|
end
|
|
185
191
|
else
|
|
186
192
|
# 何も指定されていない場合
|
|
187
|
-
if type == 'new_file'
|
|
193
|
+
if type == 'new_file'
|
|
188
194
|
stat = File.stat(filename)
|
|
189
195
|
size = stat.size
|
|
190
196
|
msg = format_report(type, filename, size)
|
|
197
|
+
elsif type == 'symlink'
|
|
198
|
+
# symlinkの場合File.statでエラーが発生する場合があるので使わない。
|
|
199
|
+
msg = format_report(type, filename, 0)
|
|
191
200
|
end
|
|
192
201
|
end
|
|
193
202
|
log(msg)
|
|
194
203
|
end
|
|
195
204
|
|
|
196
|
-
def report_error(filename,
|
|
197
|
-
msg = sprintf("err_file\t%s\t%s\n", filename,
|
|
205
|
+
def report_error(filename, ex)
|
|
206
|
+
msg = sprintf("err_file\t%s\t%s\n", filename, ex.message)
|
|
198
207
|
log(msg)
|
|
208
|
+
ex.backtrace.each do |line|
|
|
209
|
+
log(line)
|
|
210
|
+
end
|
|
199
211
|
end
|
|
200
212
|
|
|
201
213
|
def log(msg, console = true)
|
data/lib/qdumpfs/util.rb
CHANGED
data/lib/qdumpfs/version.rb
CHANGED
data/lib/qdumpfs.rb
CHANGED
|
@@ -40,6 +40,8 @@ module Qdumpfs
|
|
|
40
40
|
opt.on('-l HOURS', '--limit=HOURS', 'limit hours') {|v| opts[:limit] = v}
|
|
41
41
|
opt.on('-k KEEPARG', '--keep=KEEPARG', 'ex: --keep 100Y12M12W30D (100years, 12months, 12weeks, 30days, default)') {|v| opts[:keep] = v}
|
|
42
42
|
opt.on('--logdir=LOGDIR', 'logdir') {|v| opts[:logdir] = v}
|
|
43
|
+
opt.on('--logname=LOGNAME', 'logname') {|v| opts[:logname] = v}
|
|
44
|
+
opt.on('--logpath=LOGPATH', 'logpath') {|v| opts[:logpath] = v}
|
|
43
45
|
opt.on('--delete-from=YYYYMMDD', 'delete backup from YYYY/MM/DD') {|v|
|
|
44
46
|
opts[:delete_from] = Date.parse(v)
|
|
45
47
|
}
|
|
@@ -125,8 +127,8 @@ module Qdumpfs
|
|
|
125
127
|
@opt.report(type, file_name)
|
|
126
128
|
end
|
|
127
129
|
|
|
128
|
-
def report_error(file_name,
|
|
129
|
-
@opt.report_error(file_name,
|
|
130
|
+
def report_error(file_name, exception)
|
|
131
|
+
@opt.report_error(file_name, exception)
|
|
130
132
|
end
|
|
131
133
|
|
|
132
134
|
def update_file(src, latest, today)
|
|
@@ -197,7 +199,7 @@ module Qdumpfs
|
|
|
197
199
|
update_file(s, l, t)
|
|
198
200
|
dirs[t] = File.stat(s) if File.ftype(s) == "directory"
|
|
199
201
|
rescue => e
|
|
200
|
-
report_error(s, e
|
|
202
|
+
report_error(s, e)
|
|
201
203
|
@error_files << [s, e.message]
|
|
202
204
|
next
|
|
203
205
|
end
|
|
@@ -234,7 +236,7 @@ module Qdumpfs
|
|
|
234
236
|
chown_if_root(type, s, t)
|
|
235
237
|
dirs[t] = File.stat(s) if File.ftype(s) == "directory"
|
|
236
238
|
rescue => e
|
|
237
|
-
report_error(s, e
|
|
239
|
+
report_error(s, e)
|
|
238
240
|
@error_files << [s, e.message]
|
|
239
241
|
next
|
|
240
242
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: qdumpfs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- src
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-11-
|
|
11
|
+
date: 2024-11-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|