qdumpfs 1.8.0 → 1.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +2 -1
- data/README.md +55 -2
- data/build.sh +14 -8
- data/lib/qdumpfs/option.rb +8 -2
- data/lib/qdumpfs/util.rb +3 -2
- data/lib/qdumpfs/version.rb +1 -1
- data/lib/qdumpfs.rb +6 -4
- data/run2_qdumpfs.cmd +1 -1
- data/run_list.cmd +1 -1
- data/run_qdumpfs.cmd +1 -1
- data/run_sync.cmd +1 -1
- 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: fdc68ddb0a3016a375adc9e55b92547ea98f9bf1af05bc5fed20a6dbe8cb26e1
|
4
|
+
data.tar.gz: c20bd623f45e39e22c05dd5b7e314f0b24799d567a8d5ac21e94cf9b06e93400
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c57a00118b6da4621fd3037c217969819c12103d3540851ca3ee3ea6ae1592229ca9453285055a8171e229a9c3e165a017b291f402e2142b3f07cec7a27a6f3
|
7
|
+
data.tar.gz: 86bc15230254cb36a429d53dbb13f2e56a72b1f3cbf6caced5fbdf3c729c6bcf4720d4fd8ef9c009d95f32c66401fa4a70180d00da2820b7bc3626328ac43edf
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -27,9 +27,12 @@ Options
|
|
27
27
|
|
28
28
|
## 実行例
|
29
29
|
|
30
|
+
### バックアップ
|
30
31
|
|
31
32
|
バックアップを実行する場合。
|
32
33
|
|
34
|
+
「qdumpfs コピー元 コピー先」でバックアップを作成することができます。コピー先が存在する場合差分バックアップとなります。
|
35
|
+
|
33
36
|
```
|
34
37
|
qdumpfs /home/foo /backup
|
35
38
|
```
|
@@ -40,31 +43,81 @@ qdumpfs /home/foo /backup
|
|
40
43
|
qdumpfs --command=backup /home/foo /backup
|
41
44
|
```
|
42
45
|
|
43
|
-
|
46
|
+
### バックアップフォルダの同期
|
47
|
+
|
48
|
+
バックアップフォルダを同期することもできます。バックアップディスクが手狭になり、新しいディスクに移行したい場合に便利です。
|
49
|
+
|
50
|
+
"--command sync"オプションを指定することでバックアップフォルダを同期できます。
|
51
|
+
|
44
52
|
```
|
45
53
|
qdumpfs --command=sync /backup1 /backup2
|
46
54
|
```
|
47
55
|
|
48
56
|
バックアップフォルダの同期には膨大な時間が必要な場合があるため、実行時間を制限できます。以下は例えば1時間に制限する場合です。
|
57
|
+
|
58
|
+
実行時間が1時間を超えるとそこで処理が終了しますそこから次回継続することができます。
|
59
|
+
|
49
60
|
```
|
50
61
|
qdumpfs --command=sync --limit=1 /backup1 /backup2
|
51
62
|
```
|
52
63
|
|
53
|
-
|
64
|
+
バックアップフォルダを間引きたい場合、"--keep="オプションを指定することができます。 "100Y12M12W30D"を指定すると、100年間は年に1つ、12ヶ月間は月に1つ、12週間は週に1つ、直近30日間のバックアップを保持します。
|
65
|
+
条件に該当しないバックアップは同期されません。
|
66
|
+
|
54
67
|
```
|
55
68
|
qdumpfs --command=sync --limit=1 --keep=5Y6M7W10D backup1 /backup2
|
56
69
|
```
|
57
70
|
|
71
|
+
バックアップの同期は、コピー先の最新の日付より新しいコピー元を選択して実行されます。これはバックアップの同期が途中で中断された場合、再開することができるようにするためです。
|
72
|
+
例えばコピー先に2024/11/01のバックアップが存在する場合、コピー元の2024/11/01より後のバックアップデータ(例えば2024/11/02)があれば、それが同期されます(同じ日付は同期されません)。
|
73
|
+
|
74
|
+
|
75
|
+
```
|
76
|
+
|
77
|
+
|
78
|
+
### バックアップフォルダの削除
|
79
|
+
|
58
80
|
"--command expire"で、"--keep="パターンに該当しないバックアップを削除できます。
|
59
81
|
```
|
60
82
|
qdumpfs --command=expire --limit=1 --keep=5Y6M7W10D backup1 /backup2
|
61
83
|
```
|
62
84
|
|
85
|
+
|
86
|
+
### バックアップフォルダから指定パターンを削除
|
87
|
+
|
63
88
|
"--command delete"で、バックアップに存在する指定したパスを削除できます(間違えてバックアップした内容を削除したい場合などに使用)。
|
64
89
|
```
|
65
90
|
qdumpfs --command=delete --delete-dir=backup1 --limit=1 r:/backup2
|
66
91
|
```
|
67
92
|
|
93
|
+
### バックアップの比較
|
94
|
+
|
95
|
+
"--command verify"でバックアップを比較することができます。
|
96
|
+
|
97
|
+
```
|
98
|
+
qdumpfs --command=verify j:/backup/2024/11/01 k:/backup/2024/11/01
|
99
|
+
```
|
100
|
+
|
101
|
+
### バックアップファイルの一覧
|
102
|
+
|
103
|
+
"--command list"でバックアップファイルを一覧表示することができます。
|
104
|
+
|
105
|
+
```
|
106
|
+
qdumpfs --command=list j:/backup/2024/11/01
|
107
|
+
```
|
108
|
+
|
109
|
+
例えばverifyで異なる結果が表示された場合、listした結果をdiffすることができます。
|
110
|
+
|
111
|
+
```
|
112
|
+
qdumpfs --command=list j:/backup/2024/11/01
|
113
|
+
qdumpfs --command=list k:/backup/2024/11/01
|
114
|
+
diff list_j__backup_2024_11_01.txt list_k__backup_2024_11_01.txt
|
115
|
+
```
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
|
68
121
|
## License
|
69
122
|
|
70
123
|
qdumpfs is a free software with ABSOLUTELY NO WARRANTY under the terms of the GNU General Public License version 2.
|
data/build.sh
CHANGED
@@ -5,15 +5,21 @@ set -x
|
|
5
5
|
#export NOKOGIRI_USE_SYSTEM_LIBRARIES=1
|
6
6
|
|
7
7
|
bundle_dir=./vendor/bundle
|
8
|
-
|
8
|
+
bundle config --local path $bundle_dir
|
9
|
+
|
10
|
+
if [ "$1" = "clean" ]; then
|
11
|
+
echo "rm -rf $bundle_dir"
|
9
12
|
/bin/rm -rf "$bundle_dir"
|
10
|
-
|
13
|
+
/bin/rm Gemfile.lock
|
14
|
+
exit 0
|
15
|
+
fi
|
16
|
+
|
17
|
+
if [ -d "$bundle_dir" ] ; then
|
18
|
+
echo "bunlde update"
|
19
|
+
bundle update
|
20
|
+
bundle clean
|
11
21
|
else
|
22
|
+
echo "bundle install"
|
12
23
|
/bin/rm -rf "$bundle_dir"
|
13
|
-
bundle install
|
24
|
+
bundle install
|
14
25
|
fi
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
data/lib/qdumpfs/option.rb
CHANGED
@@ -188,14 +188,20 @@ module Qdumpfs
|
|
188
188
|
stat = File.stat(filename)
|
189
189
|
size = stat.size
|
190
190
|
msg = format_report(type, filename, size)
|
191
|
+
elsif type == 'symlink'
|
192
|
+
# symlinkの場合File.statでエラーが発生する場合があるので使わない。
|
193
|
+
msg = format_report(type, filename, 0)
|
191
194
|
end
|
192
195
|
end
|
193
196
|
log(msg)
|
194
197
|
end
|
195
198
|
|
196
|
-
def report_error(filename,
|
197
|
-
msg = sprintf("err_file\t%s\t%s\n", filename,
|
199
|
+
def report_error(filename, ex)
|
200
|
+
msg = sprintf("err_file\t%s\t%s\n", filename, ex.message)
|
198
201
|
log(msg)
|
202
|
+
ex.backtrace.each do |line|
|
203
|
+
log(line)
|
204
|
+
end
|
199
205
|
end
|
200
206
|
|
201
207
|
def log(msg, console = true)
|
data/lib/qdumpfs/util.rb
CHANGED
@@ -38,8 +38,9 @@ class File
|
|
38
38
|
begin
|
39
39
|
File.unlink(dest) if File.anything_exist?(dest)
|
40
40
|
File.symlink(src, dest)
|
41
|
-
rescue
|
42
|
-
puts "force_symlink fails #{src} #{dest}"
|
41
|
+
rescue => e
|
42
|
+
puts "force_symlink fails #{src} #{dest} #{e.message}"
|
43
|
+
# puts "File.symlink('#{src}', '#{dest}')"
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
data/lib/qdumpfs/version.rb
CHANGED
data/lib/qdumpfs.rb
CHANGED
@@ -125,8 +125,8 @@ module Qdumpfs
|
|
125
125
|
@opt.report(type, file_name)
|
126
126
|
end
|
127
127
|
|
128
|
-
def report_error(file_name,
|
129
|
-
@opt.report_error(file_name,
|
128
|
+
def report_error(file_name, exception)
|
129
|
+
@opt.report_error(file_name, exception)
|
130
130
|
end
|
131
131
|
|
132
132
|
def update_file(src, latest, today)
|
@@ -197,7 +197,7 @@ module Qdumpfs
|
|
197
197
|
update_file(s, l, t)
|
198
198
|
dirs[t] = File.stat(s) if File.ftype(s) == "directory"
|
199
199
|
rescue => e
|
200
|
-
report_error(s, e
|
200
|
+
report_error(s, e)
|
201
201
|
@error_files << [s, e.message]
|
202
202
|
next
|
203
203
|
end
|
@@ -234,7 +234,7 @@ module Qdumpfs
|
|
234
234
|
chown_if_root(type, s, t)
|
235
235
|
dirs[t] = File.stat(s) if File.ftype(s) == "directory"
|
236
236
|
rescue => e
|
237
|
-
report_error(s, e
|
237
|
+
report_error(s, e)
|
238
238
|
@error_files << [s, e.message]
|
239
239
|
next
|
240
240
|
end
|
@@ -428,6 +428,8 @@ module Qdumpfs
|
|
428
428
|
start_time = Time.now
|
429
429
|
log("##### verify start #{fmt(start_time)} #####")
|
430
430
|
|
431
|
+
src = @opt.src
|
432
|
+
dst = @opt.dst
|
431
433
|
src_count, dst_count = do_verify(src, dst)
|
432
434
|
|
433
435
|
fputs(file, "#{src}: #{src_count}")
|
data/run2_qdumpfs.cmd
CHANGED
data/run_list.cmd
CHANGED
data/run_qdumpfs.cmd
CHANGED
data/run_sync.cmd
CHANGED
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.8.
|
4
|
+
version: 1.8.2
|
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
|
+
date: 2024-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|