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をすべてクライアント経由で送信しなきゃいけないかと思った。
たすかりました。