このファイルシステムにはかなりの空きスペース(およびinode)がありますが、十分なスペースがないrdiff-backup
ようです。だから現在のバックアップは動作しません。 :-(. なぜですか?
(これからこれを行うためにどれだけのスペースを確保するべきか疑問に思います!)
私のrdiff-backupバージョンはです1.2.8-7
。私のオペレーティングシステムはDebian 9 "stretch"です。
# df -h /d/backup
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_brick-lv_backup 139G 95G 38G 72% /d/backup
# df -i /d/backup
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg_brick-lv_backup 9240576 413341 8827235 5% /d/backup
# df -h
Filesystem Size Used Avail Use% Mounted on
udev 244M 0 244M 0% /dev
tmpfs 51M 1.9M 49M 4% /run
/dev/sda7 15G 4.1G 9.8G 30% /
tmpfs 251M 0 251M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 251M 0 251M 0% /sys/fs/cgroup
/dev/ubi0_0 462M 225M 233M 50% /d/ubi
tmpfs 251M 4.0K 251M 1% /tmp
/dev/mapper/vg_brick-lv_attic 44G 21G 21G 50% /d/attic
/dev/mapper/vg_brick-lv_backup 139G 95G 38G 72% /d/backup
/dev/sda6 2.0G 81M 1.8G 5% /boot
/dev/mapper/vg_brick-lv_home 134G 91G 37G 71% /home
/dev/sda10 9.8G 2.9G 6.9G 30% /d/xfer
tmpfs 51M 0 51M 0% /run/user/1003
root@brick:/d/backup/jenkins-desktop# du -sh mike
5.7G mike
root@brick:/d/backup/jenkins-desktop# du -sh ../jenkins-desktop.rdiff/mike
8.2G ../jenkins-desktop.rdiff/mike
root@brick:/d/backup/jenkins-desktop# rdiff-backup mike ../jenkins-desktop.rdiff/mike
Previous backup seems to have failed, regressing destination now.
Exception '[Errno 28] No space left on device' raised of class '<type 'exceptions.IOError'>':
File "/usr/lib/python2.7/dist-packages/rdiff_backup/robust.py", line 32, in check_common_error
try: return function(*args)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/restore.py", line 468, in get_fp
Rdiff.write_patched_fp(current_fp, delta_fp, new_fp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Rdiff.py", line 73, in write_patched_fp
rpath.copyfileobj(librsync.PatchedFile(basis_fp, delta_fp), out_fp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/rpath.py", line 64, in copyfileobj
outputfp.write(inbuf)
Exception '[Errno 28] No space left on device' raised of class '<type 'exceptions.IOError'>':
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 304, in error_check_Main
try: Main(arglist)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 324, in Main
take_action(rps)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 280, in take_action
elif action == "backup": Backup(rps[0], rps[1])
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 337, in Backup
backup_final_init(rpout)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 501, in backup_final_init
checkdest_if_necessary(rpout)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 920, in checkdest_if_necessary
dest_rp.conn.regress.Regress(dest_rp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/regress.py", line 71, in Regress
for rf in iterate_meta_rfs(mirror_rp, inc_rpath): ITR(rf.index, rf)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/rorpiter.py", line 281, in __call__
last_branch.fast_process(*args)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/regress.py", line 268, in fast_process
if rf.metadata_rorp.isreg(): self.restore_orig_regfile(rf)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/regress.py", line 290, in restore_orig_regfile
tf.write_from_fileobj(rf.get_restore_fp())
File "/usr/lib/python2.7/dist-packages/rdiff_backup/restore.py", line 488, in get_restore_fp
return robust.check_common_error(error_handler, get_fp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/robust.py", line 32, in check_common_error
try: return function(*args)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/restore.py", line 468, in get_fp
Rdiff.write_patched_fp(current_fp, delta_fp, new_fp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Rdiff.py", line 73, in write_patched_fp
rpath.copyfileobj(librsync.PatchedFile(basis_fp, delta_fp), out_fp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/rpath.py", line 64, in copyfileobj
outputfp.write(inbuf)
Traceback (most recent call last):
File "/usr/bin/rdiff-backup", line 30, in <module>
rdiff_backup.Main.error_check_Main(sys.argv[1:])
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 304, in error_check_Main
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 324, in Main
take_action(rps)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 280, in take_action
elif action == "backup": Backup(rps[0], rps[1])
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 337, in Backup
backup_final_init(rpout)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 501, in backup_final_init
checkdest_if_necessary(rpout)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Main.py", line 920, in checkdest_if_necessary
dest_rp.conn.regress.Regress(dest_rp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/regress.py", line 71, in Regress
for rf in iterate_meta_rfs(mirror_rp, inc_rpath): ITR(rf.index, rf)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/rorpiter.py", line 281, in __call__
last_branch.fast_process(*args)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/regress.py", line 268, in fast_process
if rf.metadata_rorp.isreg(): self.restore_orig_regfile(rf)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/regress.py", line 290, in restore_orig_regfile
tf.write_from_fileobj(rf.get_restore_fp())
File "/usr/lib/python2.7/dist-packages/rdiff_backup/restore.py", line 488, in get_restore_fp
return robust.check_common_error(error_handler, get_fp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/robust.py", line 32, in check_common_error
try: return function(*args)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/restore.py", line 468, in get_fp
Rdiff.write_patched_fp(current_fp, delta_fp, new_fp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/Rdiff.py", line 73, in write_patched_fp
rpath.copyfileobj(librsync.PatchedFile(basis_fp, delta_fp), out_fp)
File "/usr/lib/python2.7/dist-packages/rdiff_backup/rpath.py", line 64, in copyfileobj
outputfp.write(inbuf)
IOError: [Errno 28] No space left on device
答え1
でtmpfsを無効にする/tmp
か、rdiff-backup
十分なスペースがある他の一時ディレクトリを使用するように構成する必要があります。可能/var/tmp
。
tmpfs 251M 4.0K 251M 1% /tmp
復元または元に戻す場合、rdiff-backup にはデフォルトの一時ディレクトリに空き領域が必要です。 Unixシステムでは通常/tmpディレクトリです。 rdiff-backup で使用される一時ディレクトリは、1.1.13 以降で使用可能な --tempdir オプションと --remote-tempdir オプションを使用して設定できます。デフォルトの一時ディレクトリの詳細については、Python一時ファイルのドキュメントのtempfile.tempdirエントリを参照してください。必要な空き容量の量はさまざまですが、通常は回復する最大のファイルのサイズに似ています。
--rdiff-バックアップFAQ:rdiff-backupには空き容量が必要な場所とスペースがどれくらい必要ですか? rdiff-backupで「ValueError:生成されたデータ長が無効です」というメッセージが表示された場合、問題は何ですか?
答え2
これがOPの場合かどうかはわかりませんが、私の場合はバックアップしていたホストで96Gb mssql "バックアップ"ファイルを切りました。 (mssqlバックアップ追加無限に成長するようにしてください。この回答詳細はこちら)。
私のrdiff-backupマスターが私のmssql "backup"ファイルの切り捨てられた新しいバージョンをバックアップしようとすると、最初にその/ tmpディレクトリに古い96Gbバージョンのファイルを作成します。私はrdiff-backupがファイルに対して "diff"操作を実行するためにこれを実行すると仮定します。ただし、この巨大な以前のバージョンを作成する過程で、デフォルトのrdiffバックアッププロセスの/ tmpスペースが不足し、この質問に示された結果が発生しました。
問題を理解した後、rdiff FAQというプロジェクトの手順に従いました。何らかの理由で、バックアップ時にrdiff-backupが失敗します。これで、実行するたびに「ターゲットに戻る」というメッセージが表示され、再び失敗します。どうすればいいですか?回帰を無効にします。したがって、rdiff-backupがファイル比較を「放棄」し、代わりにディレクトリ情報に依存すると仮定します。その結果、私のrdiff-backupマスターはもはや/ tmpスペースを消費しなくなり、私のバックアップは成功します。
答え3
私は長年rdiff-backupを使用してきましたが、これを絶対に信じています。ただし、他のすべての方法が失敗した場合は代替rsync -av (source dir) (dest dir)
手段があります。
重要な編集:つまり、他のものを使用できる場合(対象ディレクトリ)あるいは、ドライブを使用しないと、rdiffバックアップ履歴ファイルに大きなダメージを与える可能性があります。ありがとう@ソースジェディ!