DTIのVPSサーバを契約してからバックアップを取るためにpdumpfsを使っています。 このために余計なパッケージは入れたくなかったので、自前で入れたruby-1.9.2-p0で動くようにpdumpfsを修正しました。
pdumpfsは ~/.gvfsでエラーになる対応の投稿のコードで、これをベースとしてruby 1.9.2-p0で動かしてみました。
オリジナルのライセンス
今回修正したpdumpfsは手元にあるものでおそらくpdumpfs-1.3だと思います。 ライセンスは以下のとおりで、もちろん私の修正もこのライセンスに準じます。
# Copyright (C) 2001-2004 Satoru Takabayashi <satoru@namazu.org> # All rights reserved. # This is free software with ABSOLUTELY NO WARRANTY. # # You can redistribute it and/or modify it under the terms of # the GNU General Public License version 2.
パッチファイル
作成したファイルです。
- 20101206.1.pdumpfs.ruby192p0.diff (sha1sum: a7fce3aa39c972e642d4046013093e7dd64911a0)
大部分の方には上のdiffファイルが良いのだろうと思います。 offsetはかかりますが、手元では無事にpatchで修正できています。
以下に、また別の方法で作成したdiffを載せておきますが、これは私が~/.gvfsを無視するように修正したコードを含んでいます。
$ tar xvzf ~/pdumpfs-1.3.tar.gz $ cd pdumpfs-1.3/ $ make $ cp pdumpfs ../pdumpfs.orig $ cd .. $ diff -u pdumpfs.orig pdumpfs
--- pdumpfs.orig 2010-12-06 14:13:14.000000000 +0900
+++ pdumpfs 2010-12-06 14:12:47.000000000 +0900
@@ -1,4 +1,4 @@
-#! /usr/bin/env ruby
+#! /usr/local/bin/ruby
#
# pdumpfs - a daily backup system similar to Plan9's dumpfs.
#
@@ -48,21 +48,21 @@
#
require 'find'
-require 'ftools'
require 'getoptlong'
require 'date'
+require 'fileutils'
class File
def self.real_file? (path)
- File.file?(path) and not File.symlink?(path)
+ FileTest.file?(path) and not FileTest.symlink?(path)
end
def self.anything_exist? (path)
- File.exist?(path) or File.symlink?(path)
+ FileTest.exist?(path) or FileTest.symlink?(path)
end
def self.real_directory? (path)
- File.directory?(path) and not File.symlink?(path)
+ FileTest.directory?(path) and not FileTest.symlink?(path)
end
def self.force_symlink (src, dest)
@@ -79,7 +79,7 @@
end
def self.readable_file? (path)
- File.file?(path) and File.readable?(path)
+ FileTest.file?(path) and FileTest.readable?(path)
end
def self.split_all (path)
@@ -129,7 +129,7 @@
GetVolumeInformation = Win32API.new("kernel32", "GetVolumeInformation",
"PPLPPPPL", "I")
def get_filesystem_type (path)
- return nil unless(File.exist?(path))
+ return nil unless(FileTest.exist?(path))
drive = File.expand_path(path)[0..2]
buff = "\0" * 1024
@@ -807,12 +807,14 @@
end
def exclude? (path)
+ if @patterns.find {|pattern| pattern.match(path) }
+ return true
+ end
+
stat = File.lstat(path)
if @size >= 0 and stat.file? and stat.size >= @size
return true
- elsif @patterns.find {|pattern| pattern.match(path) }
- return true
elsif stat.file? and
@globs.find {|glob| File.fnmatch(glob, File.basename(path)) }
return true
@@ -868,7 +870,7 @@
today = File.join(dest, datedir(start_time), base)
File.umask(0077)
- File.mkpath(today) unless @dry_run
+ FileUtils.mkpath(today) unless @dry_run
if latest
update_snapshot(src, latest, today)
else
@@ -1018,7 +1020,7 @@
case type
when "directory"
- File.mkpath(today)
+ FileUtils.mkpath(today)
when "unchanged"
File.force_link(latest, today)
when "updated"
@@ -1052,7 +1054,7 @@
Find.find(src) do |s| # path of the source file
if @matcher.exclude?(s)
- if File.lstat(s).directory? then Find.prune() else next end
+ if FileTest.directory?(s) then Find.prune() else next end
end
r = make_relative_path(s, src)
l = File.join(latest, r) # path of the latest snapshot
@@ -1089,7 +1091,7 @@
case type
when "directory"
- File.mkpath(t)
+ FileUtils.mkpath(t)
when "new_file"
copy(s, t)
when "symlink"
これは自分が後から別のデスクトップ環境を使う時のための保存用ですが、似たような問題があれば使ってください。
2 件のコメント:
ruby を 1.8 から 1.9 にしたら pdumpfs が動かなくなったので、どうしようかと思って ruby 1.9 ftools で検索したら、そのものズバリの情報がここにありました。
ruby のことはほぼ何も知らないのでパッチが参考になりました。
CentOS 5 が動いていたPC が落雷による停電でクラッシュ。
新しいHDD でCentOS 7 にしたら、pdumpfs が動かない。
当該パッチのおかげで、動作するようになりました。
情報公開に感謝!?
# ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
ネットワーク上のNAS(TeraStation)にあるデータを
サーバ(CentOS 7) にバックアップしています。
若干、pdumpfs の実行が不安定。
実行時間のバラツキが大きく(数十分~数時間)、
ときたま、戻ってこないことあり。
# このときは、kill -9 でもプロセスをkill できない。
ネットワーク上のNASが怪しいような気がしているのですが、
何か原因を特定する方法はありませんでしょうか。
コメントを投稿