FileVaultの動作と不具合

どうも、FileVaultに関して不具合が発生している人がたくさんいるらしい。私の環境では不自由なく使えているのであるが、気持ち悪いので様子を眺めてみました。

FileVaultとわ?

ぶっちゃけて言うと、暗号化されたディスクイメージ内にホームディレクトリを保存し、ログイン時にマウントして使うものです。

  1. 未ログイン状態

ホームディレクトリは以下の状態となっています。

­rwxr–r– /Users/UserName/UserName.sparseimage

FileVaultをオンにしたユーザがいる場合、予約されたマウントポイントなのかな?/Volumesに下記のようなボリュームが展開されます。

drwxr-xr-x root     /Volumes/.com.apple.FileVault/
/UserName/
  1. ログイン状態

sparseimageがディスクイメージのようにマウントされ、/Users/UserNameにマウントされます。

/Users/Username/は不可視ディレクトリに変更され、

以下のディレクトリに変化があります。

drwxr-xr-x UserName /Users/UserName/
drwx------ UserName /Users/.UserName/

sparseimageの格納されたディレクトリは名称変更され、不可視フォルダとなります。そのかわり、sparseimageが/Users/UserNameにマウントされます。ディスクイメージとなりますので、ローカルのHDDへのファイル移動などがすべてコピーとなるなど、若干操作が変更されることに注意してください。

不具合1:初期設定が消える:10.3.1アップデータで解消

FileVaultに関する不具合で最も大きいのが、アプリケーションの初期設定が消える現象のようです。

まずは、FileVaultが何をやっているのかを理解しなければならないので、リモートログインから追っかけてみました(とわいってもunixユーザランドの使い方はほとんどわからんのですが…)。

FileVaultを入にするを実行すると、以下のような順番で作業が行われます。

    1. ユーザがログアウトします。
    2. rootの権限でsparseimageを作成します。これは、現在のホームディレクトリの容量から算出されたサイズで作られるようです。
    3. 次に、このsparseimageが/Users/UserNameにマウントされ、ホームディレクトリの内容がコピーされます。
    4. 元の/Users/UserNameが削除されます。
    5. ここで問題が発生します。
com.apple.systempreferences.plist
com.apple.finder.plist
com.apple.recentitems.plist
com.apple.BezelServices.plist
com.apple.JapaneseAnalysis/LearningDictionary.dict
com.apple.JapaneseAnalysis/AppleContextualKKC.index
ByHost/com.apple.HIToolbox.000393485ab2.plist
Caches/com.apple.preferencepanes.cache

上記ファイルのタイムスタンプが、FileVaultを行った時間になっている。つまり、これらに関してはファイルの移動ではなく、コピーが行われている可能性があり、私の環境で、FileVaultを使っているユーザがいないときに、FileVaultをオンにしたときに、上記ファイルが初期設定のものと置き換えられ、sparseimageを格納した/Users/UserName/の実体に/Users/UserName/Libraryが作成されました。

それ以降、FileVaultを一人でもオンにしているユーザがいる場合には、情報が欠損することがなくなり、不正な/Users/UserName/Librariesディレクトリは作成されなくなりました。

FileVaultを切にするを実行すると、ファイルの名前などは若干異なりますがおおむね似たような作業を逆転させて行います。もちろん、上記の初期設定関連もデフォルトに戻る可能性があります。

ちなみに、上記のファイル群はファインダーの初期設定や最近使った項目ですが、システム標準アプリケーションではByHostにプレファレンスの一部を持つアプリケーションがありますので、それらに影響が出る可能性は十分あります。

2003/11/04 23:29:10追記

上記のプロセスのうち、2と3のプロセスは/System/Library/PrivateFrameworks/DiskImages.framework/Resources/diskimages-helperを用いているようです。

不具合2:ログアウト時に初期設定が失われる:10.3.1アップデータで解消

上記リンクでも指摘されているがあちこちで問題を引き起こしているらしい不具合。この不具合が発生するタイミングはログアウトのときだ。

ログアウトで下記の内容のダイアログが出たら注意せよ。

お使いのホームフォルダ(FileVault で保護されています)は、必要以上のディスク領域を使用しています。FileVaultを使うとこの領域を回復できます。処理を続けますか?

”続ける”をクリックすると、FileVault は未使用のディスク領域を回復します。この処理にはしばらく時間がかかり、中断できませんが、いま、FileVaultでディスク領域の回復を行うことをお進めします。

今はスキップ|続ける

sparseimageというのはなんぞや?というあたりを理解しなければならんのですが、ぶっちゃけた言い方をするとディスクイメージの一種ですが、設定した容量以下の内容しかないときには格納されたファイルの合計に縮小するディスクイメージです。このイメージに鍵をかけたのが、FileVaultで使われるsparseimageです。

このあたりは、aqualpha詳説?hdiutil(コマンドラインからのディスクイメージ操作)に詳しくあがっています。aqualphaは非常に参考になりますです。

sparseimageといえども、再大容量は決まっている訳ですが、ログアウト時にsparseimageの再大容量を超えていると、このサイズを設定し直さなければなりません。それが、上記ダイアログの「続ける」に相当し、hdiutil compact -stdinpass /Users/UserName/UserName.sparseimageを実行します。

どうやらこれが問題を引き起こしている様子。

Mac OS X 10.3.1: Avoids Preference Settings Loss When FileVault Reclaims Disk Spaceによると、10.3ではsparseimageの拡張を行なう際に、初期設定を失う問題があった事を認めている。10.3.1アップデータにて、この問題は解消している。

上記サポートにも書いてあるが、10.3.1アップデータは再起動を必要とするアップデータであり、ユーザに対するログアウトを求める。このときに、sparseimageの拡張を行なう上述のダイアログが出た際に「続ける」をチェックするとデータを失う可能性があるので注意せよ。

不具合3:強制再起動

FileVaultを使用しているユーザがいるときにMacintoshを強制再起動すると、新規ユーザ状態に戻ってしまう不具合、っていうか仕様上の問題。これに遭遇するとかなりパニクってしまうだろう。

対処方法は、ホームディレクトリに残っているsparseimage以外のすべてのフォルダをゴミ箱にいれて再ログイン。これで、最低限、最後のログアウトのときの状態まで戻すことができる。

なぜか、最後のログインで行った作業も部分的には復帰するが、完全とはいえない。仕様上の問題といえる。

Librariesなどの内容を書き込んでいるテンポラリファイルの位置がわかれば、復旧するツールだって作れるだろうが、KBほかが公開されるまでは手探りだ。

なんかしらの回避ツールを作るべきか…俺には無理かな。

制限事項:盗難に対する脆弱性(SecureMac.comのアドバイザリより)

ログイン時にマウントしているディスクイメージの残骸が、レストアツールで発掘できる問題。アドバイザリでは10.3と書かれていますが、10.3.1で同様の問題が発生するかどうかは未検証(多分直ってない)。

FileVaultでロックされたホームディレクトリは、ログイン時にディスクイメージをマウントする形で展開されます。このテンポラリファイルを、消去ファイル復活機能を持ったツールで掘り出す事ができるらしい。完全ではないだろうけど、盗難された場合にはデータを盗み出される可能性がある。

これは、ログアウト時にPantherの新機能ランダム書き込みで回避できるはずなんだが、少なくとも10.3の状態では、ログイン時に展開していたファイルを読まれる可能性があります。10.3.1では検証していません。

SecureMacがAppleと連絡を取っているのかどうか、Appleがこの問題に対処する予定なのかどうかもわかりません。

疑問点:遅くなる?

上記FileVaultのプロセスで書いた仕組みから、遅くなることは考えにくいのですが、ディスクイメージでマウントしているわけですから、ログインした時点で何らかのプロセス消費が発生していることは十分に考えられます。sparseimage展開時に大きなメモリを消費する可能性もありますので、swapによる速度低下ではないかと予測します。

Pantherでは、Jaguarのように80MB固定サイズのSwapではなく、倍々に(80,160~)増えていくように最適化されたSwapを作ります。この効力はかなり大きいようで、iBook 500MBのような低いバス速度、遅いHDDのマシンでも、Jaguarほど速度低下が甚だしくないように感じます。

疑問点:壊れたらどーすんだよ

FileVaultで暗号化されたsparseimageは、Mac OS Xのディスクユーティリティでマウントすることができます。暗号解除にはマスターパスワードかログインパスワードのいずれかを用いることになりますので、これを忘れていなければ、ファイルを取り出すことができます。

気になるバックアップですが、.sparseimageをバックアップするのが一番いいのではないでしょうか。ログイン中、sparseimageは不可視フォルダの.UseNameフォルダに格納されています。これをバックアップすると前回ログインまでの情報をバックアップすることになります。何かしらの作業中にホームディレクトリが回復不能なほど損傷した場合でも、前回ログインの情報が残っているほうが、個人的には安心です。

2003/11/18 14:29:16時点での総括と運用のヒント

このドキュメントを書き始めてから既に2週間、Pantherインストール直後からずーっとiBookで運用していますが、特に問題は発生していません。

10.3でsparseimageの領域拡張時にプレファレンスが失われなかったのは行幸ですが、10.3.1以降は謎のLibraryフォルダも発生せず、安定運用となっています。が、アテにしないでください。10.3からずーっと安定運用できてるという強運に守られているのですから。

強制再起動で最後のログイン状態に戻ってしまう仕様に関して、これをできるだけ回避するようなユーティリティがあれば。数十分おきに現状のホームディレクトリをsparseimageに書き出して、/Users/.Usename/直下のものと入れ替えるだけなんですが、FileVaultのマスターパスワードやユーザのログインパスワードをどのように扱えばいいのかわからないので、手を付けていません。ディスクの容量も食うしね。

上記の働きを検証していて気づいた事としては、サードパーティの自動バックアップツールやシステムメンテナンスツールが役に立たない事でしょうか。サードパーティのシステムメンテナンスツールは使わないので検証する事はまずないと思いますが、ノートン他との併用はやめておいた方が無難です。

今後、このドキュメントのtodoを書き出しておきます。

  • sparseimageのバックアップとレストア
  • モバイル機でバッテリーアウトしたときの検証
  • システム環境設定を使わずにFileVault用のsparseimageを作る方法の考察
  • 強制再起動の際の、もう少し詳しい検証

2003/11/04 17:48:49時点での総括

個人的にはしばらく使ってみます。

FileVaultを切にする/入にするのタイミングで/Users/UserName/Preferenceの移動が正しく行われない可能性があったりするので自己責任で、ってことになるかな。

どうしても使ってみたい方に、お勧めする訳じゃないのですが一つ試してみてほしい手順があります。

ダミーのユーザを一人作り、FileVaultをオンにしておき、その上で自分がほんとうにFileVaultしたいユーザに鍵をかける、という手順です。推測でしかありませんが、FileVaultを単独のユーザに対して行った場合に発生する/Users/UserName/Librariesの不正な状態がこれで回避されるかもしれません。

この方法をテストしてるんですが…バックアップ込みでンGBあるんでいつ終わるやら…ちくしょうめ。

id:vm_converterさんにも指摘されていますんで、検証途中だし書いていない部分もありますがアップします。

お願い

FileVaultを実行している最中でも、リモートログインは可能ですのでsshで追っかけてるんですがいくつかわからないことがあるので諸賢の知恵(というほどのことでもないのかもしれませんが…)をお借りできればうれしいです。

2003/11/0422:13:12追記:以下をSSH越しに、つまりTerminalから使う方法をご存知の方いらっしゃいますでしょうか?さすがに初心者丸出しの質問なので、自分でも探してはいます。

  • 最近実行されたコマンドのログを読む方法

要するに、ps -axで取得できるプロセスのログをとる方法が知りたいのです。これがわかれば、どのようにファイルをコピーしているかってのが把握できるんじゃないかと。

  • ファイルの作成日付の表示

lsだと修正日時しかわからないのですが、作成日時を表示する方法がわからない。調べてはいますが…むー。泣くよもう。勉強が足りんというのはこういうときつらいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。