暗号化されていないライブデータが保存されているHDDに実行されているLinuxシステムがインストールされています。フルHDDに対して適切なdm暗号化を実行する合理的な方法はありますか? (バックアップ、復元、新しいファイルシステムに転送する必要はありません。)
可能であればオンラインで行う方法はありますか?つまり、1時間以内にLinuxシステムを操作してすべてのデータを暗号化できますか?
答え1
(a)空きディスク容量が十分で、(b)LVMを使用している場合は、次のことができます。
- バックアップしてください。
- ステップ1をもう一度読んで、今回は無視しないでください。
- ステップ1をもう一度読んで、まだ実際にテストしていないことを覚えておいてください。それでも動作するはずです!
- 現在の物理ボリュームを減らす(
pvresize
) - デフォルトパーティションのサイズを変更します。残念ながら、パーティションテーブル(使用中)を再度読み取るには、再起動が必要な場合があります。
- 新しいパーティションを作成し、ここにdm-cryptを設定します。その上に物理ボリュームを配置します。
- これで、
pvmove
実際にデータをオンラインに移動できます。 - 移動中に暗号化されたボリュームを起動するには、initramfsを更新する必要があります。特にすべてを暗号化したい場合。
- リカバリディスク(例:Live CD)を準備します。再起動して表示されることを確認してください。
- ボリュームグループから古いPVを削除し、安全に上書きします。
- dm-cryptを設定し、同じvgに2番目のPVとして追加することもできます。
LVMを使用しない場合は、おそらく絶望的でしょう。確かに、rsyncを使用してあるファイルシステムから別のファイルシステムにデータをコピーできますが、システムがアイドル状態のときに最終同期を実行する必要があります(そうしないと、ファイルをコピーしようとするとファイルが変更されます)。
答え2
答え3
ツールが必要ですが、名前やURLを提供することはできません。しかし、恐れていない場合:-) 全く難しくありません。暗号化されていないデバイスからデータを読み取り、暗号化されたデバイスに書き込むだけです。以前にファイルシステムのサイズを変更して小さくしないと、LUKS は使用できません。もちろん、これはインストールされているデバイスでは機能しません(roがインストールされていても機能しない可能性があります)。競合に対する保護がないコア機能は次のとおりです(はい、ちょうど成功しようとしました)。
for((i=0;i<100;i++)); do
echo "Copying block with offset ${i} to tmpfs"
dd if=/dev/storage2/test of=/mnt/tmpfs/cryptoblock skip=$i bs=10M count=1 &>/dev/null
echo "Copying block with offset ${i} from tmpfs"
dd if=/mnt/tmpfs/cryptoblock of=/dev/mapper/crypt_test seek=$i bs=10M count=1
done
必要な改善は、ブロックを不揮発性メディアにコピーし、対応するオフセットを記録することです。競合が発生した場合は、中断されたトランザクションのブロックを手動でコピーし、次のブロックのオフセットを開始値としてループを開始できます。