lftp

7月 26th, 2007 by tsuyoshi Leave a reply »

lftpというプログラムがある。

sshやtelnetでftpを使っているとサブディレクトリもふくめて再帰的/Recursiveにファイルを転送できなくて困ってしまうことがあるが、lftpはMirrorというコマンドを持っていて、ディレクトリごとミラーリング/転送してくれるのだ。素晴らしい!!

なぜにSAMBAカテゴリでこの話題かというと…NASが壊れたのだ。IO-DATAのLANDISKが壊れたらしく、電源をいれても云ともうんとも言わなくなった。では、というのでディスクを外してDebian入りのLinkStationにつないて別のNASにサルベージをしようと思ったら…文字化けしまくる。いったん別のNASにUSBでつないで、と思ったらNAS製品のUSB接続は先頭パーティションしか見てくれない。ハックしようかとも思ったが、このディスクには200GバイトのWAVや3gp音楽ファイルがつまっている。うっかりデータを失うと再作成にものすごい労力がかかる。

いろいろ調べたらどうやらこのディスクのフォーマットはext2で行われ、文字コードはsjisで保存されているらしい。これをマウントしようとして、

root@LINKSTATION:~# mount -t ext2 /dev/sda3 /mnt/usbdisk -o codepage=932,iocharset=sjis

とやっても、

mount: wrong fs type, bad option, bad superblock on /dev/sda3,
missing codepage or other error
In some cases useful info is found in syslog – try
dmesg | tail or so

とか言われる。しょうがないのでオプションなしでマウントすると、できる。

root@LINKSTATION:~# mount -t ext2 /dev/sda3 /mnt/usbdisk

システムロケールはUTF-8なので、当然日本語ファイル名は化ける。どうやってみても、シェルを通している以上は化ける。convmvも試してみたが、うまくいかない。システムは”文字コードはUTF-8″だと思っているんだろうから、そりゃうまくいかないわい。

Windowsでext2フォーマットを読めるようにするツールをクライアントPCに入れて、USBでディスクをつないでやると文字化けせずに読める。が、クライアントから200Gを転送するのは時間がかかってげんなりしちゃう。

と困っていたら、ftpコマンドの転送ではうまくいく!! 受け側のNASでFTPサーバー機能を立ち上げたところへDebian入りLinkStationにUSBでつないだディスクからFTPで送り込むと、きちんと日本語ファイルが化けずに転送される。どうやらファイル名をロケールを通さずにダイレクトに読んでいるらしい。あとはサブディレクトリを掘り下げていってディレクトリツリーごと転送するツールがあれば、と思って探したら…あったのよ lftp!
lftpでつないだ後にmirror -Rと打ち込んでやると、ローカルのカレントディレクトリからリモートのカレントディレクトリへミラーリングをしてくれる。

200Gをすべてクライアント経由で送信しなきゃいけないかと思った。
たすかりました。

Advertisement

コメントをどうぞ