Ubuntu 14.04の新規インストールでは、ブート中にこのエラーメッセージが表示されます
/ dev/mapper/cryptswap1のディスクドライブがまだ準備ができていないか、存在しない
また、スワップパーティションはアクティブになりません。これまでの私の検索から、私は見つけました:
この種のハックを使用せずに、Ubuntu 14.04で暗号化されたスワップを使用することは可能ですか?私は、インストールされたすべてのパッケージを完全に更新し、それらの構成ファイルを修正します。これらの構成ファイルは、バグのあるインストールスクリプトにより誤ったコンテンツで初期化されました。スワップをアクティブにするために独自のスクリプトを使用する必要はありません。パッケージの更新時にこの種のアプローチが壊れる傾向があるためです。
これは私の/etc/crypttab
のようです:
cryptswap1 /dev/sda6 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=16
そして、私の/etc/fstab
からの関連する行は次のとおりです。
/dev/mapper/cryptswap1 none swap sw 0 0
私がこれまでに試したこと:
/ dev/mapper/cryptswap1のディスクドライブはまだ準備ができていないか、さまざまなオプションを試しても表示されない 同じシナリオの可能性について尋ねました。
ただし、唯一の答えは、暗号化されていないスワップを使用することです。
http://ubuntuforums.org/showthread.php?t=2200995 を見つけましたが、解決策があると主張していますが、解決策は私には意味がありません。
提案されたソリューションの最初の部分は、mkswapを使用して暗号化されたスワップヘッダーを書き換えることです。ただし、このヘッダーはキーで暗号化されているため、再起動後も保持されないため、この手順では、次回の再起動後にスワップが機能することはありません。
また、/ etc/fstabの更新を提案しますが、fstabは既に正しく表示されているようです。
この記事では、私が使用していないLVMを想定しています。私は、それが違いを生むだろうという方法を知りません。
https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/1310058 が見つかりました。これは、スワップヘッダーが上書きされ、offset
を追加する問題を理解するのに役立ちましたcrypttab
および暗号化されていないスワップヘッダーを再生成すると、この問題を解決できます。
ただし、上書きされたヘッダーだけが問題になっているわけではありません。別の問題がありますが、まだ完全には理解していません。
問題について私が見つけた他のこと:
/lib/cryptsetup/cryptdisks.functions
の読み取りから、ブート時にデバイスはcryptswap1_unformatted
という名前を使用して作成され、暗号化されたスワップヘッダーが書き込まれ、デバイスの名前がcryptswap1
に変更されることを学びました。カーネルログでこのエラーメッセージを見つけます。
[ 39.419429] device-mapper: ioctl: Unable to change name on mapped device cryptswap1_unformatted to one that already exists: cryptswap1
紛らわしいことに、その結果はデバイスがcryptswap1
という名前を持つことになりますが、swap
ヘッダーは書き込まれません。
スワップは、ファイルシステムチェックが実行されたブート中に機能します。恐ろしいcryptswap1 is not ready yet
エラーが発生するのは、ファイルシステムチェックが実行されていないときだけです。
/var/log/upstart/cryptdisks.log
にエラーメッセージがあります
Device cryptswap1_unformatted already exists.
ただし、/lib/cryptsetup/cryptdisks.functions
にログを追加することで、/etc/init.d/cryptdisks-early
と/etc/init/cryptdisks.conf
の間に競合があることを知りました。 cryptdisks.functions
に追加するロギングは、2つのスクリプトのアクションがインターリーブされる方法に影響を与える可能性があり、場合によっては機能するようになります。
2つが同じデバイスを並行して処理することを想定していないことは明らかです。ブートごとにスワップが機能するように、2つのスクリプトをシリアル化するにはどうすればよいですか?
Ubuntu 14.04でcryptswap1
を正しく機能させるには、解決する必要がある2つの問題があります。
問題1:スワップヘッダーの上書き
パーティションはもともと暗号化されていないスワップヘッダーでフォーマットされており、ブート中に使用する正しいパーティションを見つけるために使用されます。暗号化キーはブートごとに変わるため、暗号化されたスワップヘッダーはブートごとに書き換えられます。 /etc/crypttab
の生成のバグにより、暗号化されたスワップヘッダーは、暗号化されていないスワップヘッダーを上書きします。これにより、今後のすべてのブートでスワップパーティションが検出されなくなります。
問題2:起動中の競合状態
/etc/init.d/cryptdisks-early
と/etc/init/cryptdisks.conf
の間には、起動中に競合状態があります。両方とも、crypttab
にリストされているすべてのデバイスを同時にアクティブにしようとします。暗号化されたスワップの場合、ほとんどの場合、競合状態の結果は、まったく機能しないことです。潜在的なデータ損失を防ぐために、一部の健全性チェックが失敗し、暗号化されたスワップヘッダーの書き込みがスキップされます。
問題の修正と回避
最初の問題は簡単に修正できます。 2番目の方法は回避できます。 /etc/crypttab
でスワップ行を識別します。次のようになります(UUIDが異なることを除く)。
cryptswap1 UUID=f9a0f20c-fac4-408c-a8b9-47300216f727 /dev/urandom swap,cipher=aes-cbc-essiv:sha256
私の場合、これは/etc/crypttab
の唯一の行でした。スワップヘッダーの上書きを修正するには、オフセットを追加する必要があります。ソースは、使用する正しい値が正確に何であるかについては意見が異なりますが、大きすぎる値を使用しても害はありません。 16
のオフセットを使用して動作させました。
さらにnoearly
を追加しました。これにより/etc/init.d/cryptdisks-early
がこの行を無視し、その方法で競合状態が回避されます。
結果の行は次のようになります。
cryptswap1 UUID=f9a0f20c-fac4-408c-a8b9-47300216f727 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=16,noearly
これにより、暗号化されていないスワップヘッダーが再度上書きされるのを防ぐことができますが、パーティション上で再作成する必要があります。間違ったパーティションを使用するとwillデータが失われるため、このステップでは正しいパーティションを使用することが重要です。 fdisk -l
を使用して正しいパーティションを見つけました。私の場合は/dev/sda6
です。
mkswap
を使用して、暗号化されていないスワップヘッダーを書き換えます。
mkswap /dev/sda6 -U f9a0f20c-fac4-408c-a8b9-47300216f727
UUIDは、スワップパーティションが上書きされる前に持っていたものです(/etc/crypttab
で確認できます)。これが完了したら、再起動が必要であり、すべて動作するはずです。
正しい操作の検証
3回再起動して、機能し続けることを確認することをお勧めします。
エラーメッセージthe disk drive for /dev/mapper/cryptswap1 is not ready yet or not present
は、起動中に短時間表示されます。ただし、ブートプロセスが完了する前に準備が整うため、これは問題ではないようです。
ログインしてcat /proc/swaps
と入力し、スワップがアクティブであることを確認します。 /dev/dm-0
という名前のスワップパーティションが表示されます。dm
は、暗号化を提供するデバイスマッパーレイヤーを実際に使用していることを示します。