そのディスク(ソース)のファイルシステム全体を、同じ容量の接続ディスク(ターゲット)に基づく仮想ブロックデバイス(devicemapper / cryptsetup)に複製してディスク上のデータを暗号化したいと思います。ターゲットディスクにLUKSデバイスを設定しました。
ソースディスクが次に初期化されました。パーティションレスファイルシステム。つまり、追加のLUKS2ヘッダーを処理するには、ファイルシステムを2MiB(4096ブロックまたは4096バイト)に縮小し、ソースディスク上のファイルシステムdd
からLUKSデバイスにデータを転送する必要があります。
私は一つ作った
resize2fs /dev/sda <newsize>
<newsize>
総ブロック数はマイナス4096で、期待通りに動作するようです。
ただし、ソースディスクは分割されていないため、ファイルdd
システムが縮小された4096ブロックを含むディスク全体がコピーされ続けます。
resize2fs
今私の質問は次のとおりです。ジョブの使用可能なブロックが物理デバイス(ソース)の終わりにあると安全に仮定し、count=<newsize> bs=4096
それをパラメータとしてddに渡すことはできますか?この複製/コピーはファイルシステム全体を複製しますか?それとも私が考慮していない他のトラップはありますか?
ボーナスの質問:もう一度確認すると、ブロックあたり(ファイルシステムのファイルごとではなく)ディスクのmd5sumを計算するツールはすでにありますか?
答え1
今私の質問は:resize2fs操作の利用可能なブロックが物理デバイスの最後にあると安全に仮定できますか?
はい、それがパーティションであり、縮小したい場合でも仮定する必要があります。
したがって?
count=<newsize> bs=4096
にパラメータとして渡されます。dd
おそらくそうです。
dd
dd count=N bs=M
少し変ですいいえこれは、それぞれMバイトのN読み取りと各書き込みに対して対応する書き込みを発行することを除いて、N * Mバイトがコピーされることを意味します。読み取りは要求されたバイト数より少ないバイトを返すことができます。この場合、読み取りと書き込みの合計が必要なものより少なくなります。
実際、Linuxブロックデバイスが部分的な読み取りを返すのを見たことがないので、うまく動作します。出力を確認し、「N+M records」などの内容を表示する必要があります。ここで、最初の数字は読み取ったブロックの総数、2 番目の数字は読み取った部分ブロック数です。 GNU ddは、不完全な読み取りについても警告する必要があります。
とにかくhead -c $(( nblocks * 4096 ))
。
望むより:dd vs cat - ddは今日でもまだ意味がありますか?そしてddはいつデータのコピーに適していますか? (またはread()とwrite()が部分的な場合)
(とにかく、インターネット上の見知らぬ人の投稿に基づいて作業する前に数字を再確認してください。これはファイルシステムなので、他の人のスペルミスによって混乱したくないでしょう。おそらくすでに知っていますが、問題ありません。)
もう一度確認すると、ブロックごとにディスクブロックのmd5sumを計算できるツールはすでにありますか?
md5sum /dev/sdx
またはを実行できる必要がありますhead -c $bytes /dev/sdx | md5sum
。
MD5 は、誤って破損または切り捨てられたコピーの検査に問題はありませんが、通常は破損していると見なされます。同じハッシュを持つ別のファイルを簡単に作成できます。厳密に使用するには、sha256sum
代わりにSHA-2ハッシュ(または)を使用してくださいsha512sum
。