2010年10月05日
rsyncの標準出力をリダイレクトすると日本語が記号になる
Ubuntu-serverを運用しています。
サーバを構築したときのUbuntuバージョンは確か 8.04 。その後LTSの意味を理解せず 8.10 にバージョンアップしてしまったため、現行バージョンの 10.04 まではリリースの度にバージョンアップしてきました。
ところがどうも不安定です。
導入当時は今よりさらに初心者だったため設定方法がよくわからず、不要な設定もいろいろ行なったと思います。カーネルのコンパイルをしたこともありました。
今思えばこういった一連の操作が不安定の原因かと…。
ともかく変ないじり方をしているせいで、何かあっても障害切り分けが難しくなっていて色々難儀するようになりました。
そこで先日、思い切ってバージョン 10.04 をクリーンインストールしました。そのせいでまた別の思いがけない不具合がポツポツ出てきています。
ということで、クリーンインストール後の不具合の解消を順に記録していきます。
このサーバの主な目的はデータストレージです。週に1度、システムのダンプとデータを外付けHDDに自動でバックアップするようにしています。一連のバックアップをスクリプトにし、cronで自動実行しています。
またターミナルでの日本語出力が見づらいと思っていたため、ロケールは en_US.UTF-8 でインストールしました。この状態でも日本語ファイルは正常に扱うことができています。
さて自動バックアップの際、rsync の標準出力を専用ファイルにリダイレクトしていますが、この中の日本語ファイル名が全て記号に置き換わっている事に気づきました。化けているのではなく、ちょうどHTMLエンティティをかけた様な感じです。
スクリプトの頭には、
export LANG=ja_JP.UTF-8
と記述しており、これまでは日本語で記録されていました。インストール時に英語を選択したことが原因であると思われますが、通常のターミナル操作(コマンドls等)では日本語も表示されます。
少し考えましたが、理由は簡単でした。ターミナルで
$ LANG=ja_JP.UTF-8
$ locale
としても en_US.UTF-8 のままです。
何のことは無く、日本語ロケールが入っていないだけでした。
ということで日本語環境をインストールおよび設定。
# apt-get install language-pack-ja
# dpkg-reconfigure locales
# update-locale LANG=en_US.UTF-8
あっさりと設定終了です。
最後の一行は不要かもしれません。
これで通常は英語環境、必要なときには日本語環境も使用可能、となりました。
lsコマンド等では日本語表示されるため気づいてなかったんですね。
以前の環境は日本語でインストールしていて、この場合は後からロケールを英語に設定してもうまくいきませんでした。
とりあえず、ひとつ解決。
静音、省電力サーバに最適。