- PR -

tar.gz等で圧縮したファイルをローカルに保存せずに転送したい

1
投稿者投稿内容
ちゅえ
常連さん
会議室デビュー日: 2005/05/31
投稿数: 24
投稿日時: 2007-09-03 08:48
表題の通り、圧縮したファイルをローカルに保存しないでそのまま転送したいのですが、可能でしょうか?
リダイレクトを駆使すればできる様な気もするのですが、どうもうまくいきません。
他の方でもやってそうだと思って調べてもみたのですが、見当たりませんでした。

実際やる作業は、tar.gzではなく、darと言う形式でバックアップ用に圧縮をかけて、それをローカルに保存せずに、ローカルLAN内、もしくは外部へ転送したいのです。

ローカルに一時的にでも保存してしまうと、当然バックアップしたいマシンに、最大でバックアップするデータ分の容量を確保しなくてはならないので、それだと不都合があるのです。

どうぞご教授よろしくお願いします。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2007-09-03 10:20
nfsやsambaでリモートディスクに書けばいいのでは。

リモートマシンのOSや可能な通信手段がわからないと、、、
Ay
常連さん
会議室デビュー日: 2006/10/29
投稿数: 45
投稿日時: 2007-09-03 10:23
もう少し具体的な環境の情報が欲しいです。
(接続先とのプロトコルや、何を試してどうダメだったのか、等)

保存先のサーバをnfsマウントやsmbマウントすれば、
特に難しいことなくリダイレクトできると思いますが…

「datと言う形式でバックアップ用に圧縮をかけて」がよくわかりませんのでtarになりますが、
% tar czvf /foo/bar > /mnt/server/backup.tar.gz
(バックアップ先サーバを/mnt/serverにマウント)
でできると思います。

あとは、「標準入力」「転送」あたりで検索してみてはいかがでしょうか。
Ay
常連さん
会議室デビュー日: 2006/10/29
投稿数: 45
投稿日時: 2007-09-03 12:48
引用:

ちゅえさんの書き込み (2007-09-03 08:48) より:

実際やる作業は、tar.gzではなく、darと言う形式でバックアップ用に圧縮をかけて、



すみません、darというコマンドがあるのですね。(「dat」と見間違えました)
使ったことがないのでうまくいくかわかりませんが、
「-c filename」でバックアップファイルを指定するみたいですので、
ファイル名に「-」を指定して出力を標準出力に切り替え、リダイレクトすればどうでしょうか?
% dar -c - -g /foobar > /mnt/server/backup.dar

----
引用部分の編集がおかしかったので修正


[ メッセージ編集済み 編集者: Ay 編集日時 2007-09-03 12:50 ]
ちゅえ
常連さん
会議室デビュー日: 2005/05/31
投稿数: 24
投稿日時: 2007-09-03 22:24
progmanさん、Ayさんありがとうございました。
環境としてはサーバーはLinuxでクライアントはWindowsとLinux両方あり、Linuxはdarファイルを作ってローカルに保存せず転送、Windowsはzipやlzhで、通信手段はscpを予定しておりました。

当方、Linuxをまともにいじり始めてまだ半年ほどで、リダイレクトの意味をよく理解していない事を痛感しました・・・。
私は圧縮したファイルをscpで送信と言う形で考えていたのですが、ファイル名指定をどうやって良いのかわからず、リダイレクトでやってみたのですがうまくいかず、パイプでやってみたりしておりました。
また、smbマウントは全く考えていませんでした。
自分の使っているプログラムにもかかわらず、Ayさんのおっしゃる、ファイル名に「-」を指定すれば標準出力に切り替わる事も知りませんでした。自分の調べた限りのHPではそのオプションが書いてなく、英語マニュアルもほんの少し読める程度の英語力しかなく、理解できておりませんでした。大変失礼致しました。その様に行えばdarを使って直接転送できるのですね。

ちなみにもう一点質問お願いしたいのですが、scpだとssh通信路で暗号化かかるので、良いなと思っていたのですが、scpで転送する場合はどのようにしたら良いでしょうか?
scp `dar -c BACKUP BACKUPFILE` hoge@hogehoge.com:/
の様に行い、転送先のパスワードは聞かれたのですが、下記のエラーがでて転送できません。ちょっとエラー長いのですみません・・・。

1: No such file or directory
inode(s): No such file or directory
saved: No such file or directory
with: No such file or directory
0: No such file or directory
hard: No such file or directory
link(s): No such file or directory
recorded: No such file or directory
0: No such file or directory
inode(s): No such file or directory
not: No such file or directory
saved: No such file or directory
(no: No such file or directory
file: No such file or directory
change): No such file or directory
0: No such file or directory
inode(s): No such file or directory
failed: No such file or directory
to: No such file or directory
save: No such file or directory
(filesystem: No such file or directory
error): No such file or directory
57: No such file or directory
files(s): No such file or directory
ignored: No such file or directory
(excluded: No such file or directory
by: No such file or directory
filters): No such file or directory
0: No such file or directory
files(s): No such file or directory
recorded: No such file or directory
as: No such file or directory
deleted: No such file or directory
from: No such file or directory
reference: No such file or directory
backup: not a regular file
--------------------------------------------: No such file or directory
Total: No such file or directory
number: No such file or directory
of: No such file or directory
file: No such file or directory
ssh: considered: Name or service not known
58: No such file or directory
--------------------------------------------: No such file or directory
EA: No such file or directory
saved: No such file or directory
for: No such file or directory
0: No such file or directory
file(s): No such file or directory
--------------------------------------------: No such file or directory

----
利用環境が誤っていたので修正

[ メッセージ編集済み 編集者: ちゅえ 編集日時 2007-09-05 02:28 ]
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-09-04 00:23
こんばんは。

scp には標準入力からデータを読みこむ機能は無かったと思います。
scp を利用するのであれば、一度ファイルに書き出す必要があるハズです。
#単に私の技術不足かも。。。

マニュアル

もしくは単に ssh を用いて、
[生転送の場合]
> (cd /PathTo && tar cf - ./BackupDir) | ssh UserName@Example.jp "(cd /PathTo && tar xvfp -)"

[tar.gz の場合]
(cd /PathTo && tar cf - ./BackupDir | gzip -9 ) | ssh UserName@Example.jp "(cd /PathTo && cat > BackupFile.tar.gz)"

dar の場合は、gzip の箇所を都合良く書き換えればいけるのではないでしょうか?

また、シェルスクリプトを書く方向で、FTP を手段で用いれば、
put | ファイル生成処理
で FTP に標準入力で渡せたと思います。

もしくは、他の方からの上がっている、nfs や samba を利用する方が処理内容自体は楽だと思いますが。
ちゅえ
常連さん
会議室デビュー日: 2005/05/31
投稿数: 24
投稿日時: 2007-09-05 02:32
あるかな さん、ありがとうございました。
教えて頂いたsshを用いる方法にて、下記の操作で目的のdarで作ったファイルを直接転送する事に成功しました。

(cd /PathTo && dar -c - -g ./BackupDir )|ssh -p SSH_PORT UserName@Example.jp "(cd PathTo && cat > BackupFile.1.dar)"

ちなみにnfsを用いる方法は知識不足があるのと、セキュリティ的に余計なポートは開けたくないのもあり、smbはセキュリティ的に余計なポートは開けたくないのです。
ただ、メンテの面でsshポート(ポート番号は変更済み)だけは開けたかったので、sshが最適での形でした。
Windowsからはまだ試しておりませんが、cygwinを使えば同様にいけると思うので、試してみたいと思います。
もしうまくいかなければ、また質問させて頂くかもしれませんがよろしくお願いします。
どうもありがとうございました。
ちゅえ
常連さん
会議室デビュー日: 2005/05/31
投稿数: 24
投稿日時: 2007-09-11 18:30
再度質問させて下さい。
作ったファイルを直接転送する事はできたのですが、外部にあるファイルの差分、増分を作ると言ったら、今度こそはnfsやsambaになってしまいますでしょうか?

その後いろいろ試して、下記が一番近い感じな気がするのですが、backup.1.darの中身が、差分作成するファイル名にセットされてしまいます。

cd PathTo && dar -c - -g./BackupDir -A `ssh -p SSH_PORT UserName@Example.jp "(cd /PathTo && cat ./SABUN_MOTO.1.dar)"` | ssh -p SSH_PORT UserName@Example.jp "(cd /PathTo && cat > Backup-Diff.dar)"

ちなみに-Aオプションが差分作成モードで、その次が差分を作成する元ファイル名です。
-Aオプションのところには外部のファイル名をだけを渡して、darコマンドが外部のデータを受け取るにはnfsかsambaでならイメージわくのですが、sshでは無理でしょうか?

また、nfsやsambaで外部のにあるデータの差分を作った場合、ネットワークトラフィックは差分作成元のデータ丸々分増えるのでしょうか?
この質問はdarの作成元に聞くべきなのは分かっているのですが、英語メールがかけないので、一般的なdump等の差分の場合でも良いので教えて下さい。初心者ですみません・・・。
1

スキルアップ/キャリアアップ(JOB@IT)