名前

uniconv — Netatalkボリュームのエンコーディングを変換する

概要

uniconv [-ndv] -c cnidbackend -f fromcode -t tocode [-m maccode] volumepath

説明

uniconvvolumepathボリュームのエンコーディングをfromcodeからtocodeへ変換する。

オプション

-c

このボリュームで使うCNIDバックエンド。一般的にはcdbかdbdである。afpdがこのボリュームのために選んだバックエンドと一致させるべきである。これを指定しない場合、デフォルトのCNIDバックエンド"@DEFAULT_CNID_SCHEME@"が使われる。

-d

先頭のドットをHEXエンコード(:2e)しない。afp.conf(5)use dots = yesを使うのに相当する。

-f

変換前のエンコーディング。HEXエンコーディングのボリュームではASCIIを指定する。

-h

ヘルプを表示する

-m

Macintoshクライアントのコードページ。HEXエンコードのボリュームの場合に必要である。デフォルトは"MAC_ROMAN"

-n

「予行演習」であり、実際には何も変更しない。

-t

変換後のボリュームエンコーディング。例えばUTF8

-v

詳細を出力する。最大限のログを出力するには二度指定する。

-V

バージョンを表示してから終了する

警告

間違ったオプションを設定するとあなたのデータが使用不能になるかもしれない!!! 自分が何をしようとしているか自覚してください。必ず最初にあなたのデータをバックアップしてください。

「予行演習」を最初に行い、変換エラーの出力をチェックすることを*強く*お勧めします。

ボリュームエンコーディングを変更している間はafpd(8)を走らせるべきではない。afpdを再起動する前にafp.conf(5)unix charsetvol charsetを新しいコードページに変更するのを忘れるな。

MacChineseTraditionalMacJapaneseMacKoreanの場合はuniconvは使えません。

自己責任で使ってください!!!

選択可能な文字セット

Netatalkは(合成済と分解済の)UTF-8とHEXを内部サポートで提供する。もしそれ以外の文字セットを使いたいなら、iconv(1)がそれを提供しなければならない。

uniconvは旧式の1.x NLSで広く使われたiso-8859.adaptedも識別する。これは古いボリュームからアップグレードすることだけを意図したものであり、afpd(8)はもはやiso-8859.adaptedを扱うことができません。

CNIDの背景

CNIDバックエンドは名前のIDへのマッピングを維持する。ファイル名をafpd(8)の外(シェルやsmaba)で変更した場合、CNIDデータベース、つまりDIDNAMEインデックスが一致しなくなる。Netatalkは可能な限り華麗にそのような矛盾から回復しようと試みる。これを達成する仕事は簡単ではないので、この矛盾を解決するメカニズムは時々失敗するかもしれない。つまり、ファイルやディレクトリへのパスの途中の名前が幾つか変更されたら、事態は悪化するだろう。

一気に多くのファイル名を変更した場合、afpdのフォールバックメカニズムが失敗する可能性がより高くなる。つまり、ファイルが変更されていないのに新しいIDが割り当てられるかもしれない。従ってuniconvは矛盾を避けるために名前を変更した後にそれぞれのファイル/ディレクトリのCNIDエントリを直ちに更新する。ボリュームのための2つのバックエンド、つまりdbdとcdbは同じCNIDデータベースフォーマットを使う。したがって、cdbと共にuniconvを使い、その後でdbdと共にafpd使ってもよい。

警告: 二つのプロセスが一度に異なるバックエンドを使ってCNIDデータベースを開いてはならない! 一つのボリュームをdbd (cnid_metad/cnid_dbd)を使って開いたまま、uniconvがcdbを使って起動すると、CNIDデータベースが壊れる結果になるだろう。何故なら二つのバックエンドは異なるロック方法を使うからである。あなたは更なる問題に出くわすかもしれない。つまりdbdがトランザクションありでコンパイルされている場合、cdbはトランザクションのログをアップデートしない。

通常、afpd(8)で使っているのと同じバックエンドをuniconvで使うのが推奨されます。

1.x CAPエンコードボリュームをUTF-8に変換。クライアントはMacRomanコードページを使っていた。CNIDスキームはdbd:

example% uniconv -c dbd -f ASCII -t UTF8 -m MAC_ROMAN /path/to/share

iso8859-1ボリュームをUTF-8に変換。CNIDスキームはcdb:

example% uniconv -c cdb -f ISO-8859-1 -t UTF8 -m MAC_ROMAN /path/to/share

iso8859-1 adapted NLSを使った1.xボリュームをHEXエンコーディングに変換:

example% uniconv -f ISO-8859-ADAPTED -t ASCII -m MAC_ROMAN/path/to/share

UTF-8ボリュームをHEXに変換。MacCyrillicクライアント向け:

example% uniconv -f UTF8 -t ASCII -m MAC_CYRILLIC /path/to/share

参照

afp.conf(5),afpd(8),iconv(1),cnid_metad(8),cnid_dbd(8)