BSオプションはデータがddと一致しなくなりますか?

BSオプションはデータがddと一致しなくなりますか?

ddを使用してバックアップしたノートブックパーティション(truecrypt)があります。これは、生のビット単位のコピー以外に他のものにバックアップすることは不可能であるためです。たとえば、次のようになります。

dd if=/dev/sda of=imagefile.img

もちろん、正常に復元することもできますが、デフォルトのbs(512)を使用すると復元時間が非常に長くなります。

BSサイズを1MBに増やすと不一致が発生しますか?マシンには8 GBのRAMがあるため、ディスクに書き込む前に1 MB、10 MB、または100 MBをメモリに読み込むことは重要ではありません。しかし、画像ファイルの終わりとファイルの終わりに達するとどうなりますか?分割。次のディスク領域のデータを上書きしようとしませんか?

最後の読み取りでイメージに512バイトしか残っていないと仮定すると、512バイト+残りの0.00048828125MBをディスクに書き込もうとしますか?

dd if=imagefile.img of=/dev/sda1 bs=1M

ありがとう

ベストアンサー1

良い質問です。見てみましょう。任意のデータを作成します。

dd if=/dev/urandom of=/tmp/rand1Mx10.dat bs=1M count=10

さまざまな方法で複製してください。

$ dd if=rand1Mx10.dat of=1Mx10copy_3M.dat bs=3M status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.0196387 s, 534 MB/s

$ dd if=rand1Mx10.dat of=1Mx10copy_1M.dat bs=1M status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.0176384 s, 594 MB/s

$ dd if=rand1Mx10.dat of=1Mx10copy_nbs.dat  status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.083932 s, 125 MB/s

$ dd if=rand1Mx10.dat of=1Mx10copy_333.dat bs=333 status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.0649439 s, 161 MB/s

$ dd if=rand1Mx10.dat of=1Mx10copy_pi.dat bs=314159265 status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.0103404 s, 1.0 GB/s

出て:

$ shasum /tmp/*.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_1M.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_333.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_3M.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_nbs.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_pi.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/rand1Mx10.dat


$ ls -l *.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:15 1Mx10copy_1M.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:16 1Mx10copy_333.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:14 1Mx10copy_3M.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:15 1Mx10copy_nbs.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:17 1Mx10copy_pi.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:11 rand1Mx10.dat

すべてが確認されました。dd同じバイト数を報告します。ファイルサイズが一致します。ハッシュ値がキューに入ります。dd入力ファイルが使い果たされたり、空き容量がなくなったりしたときに書き込みを中止する方法を学びます。徹底するために、もう一度小さいサイズのファイルシステムを作成します。

10MBファイルを作成します。

$ dd if=/dev/zero of=/tmp/myfs.img bs=1M count=10 

ファイルシステムに切り替える:

$ mkfs.ext4 myfs.img 

マウント(ルート使用)

$ sudo mount myfs.img /mnt/myfs
$ sudo chown -R $USER:$USER /mnt/myfs

スペースを見てください(メタデータ、inodeなどのため、ファイルサイズよりも小さくなります)。

$ df -h /mnt/myfs 
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      8.7M   92K  7.9M   2% /mnt/myfs 

10MBを書きます:

$ dd if=rand1Mx10.dat of=/mnt/myfs/1Mx10copy_pi.dat bs=314159265 status=progress
dd: error writing '/mnt/myfs/1Mx10copy_pi.dat': No space left on device
0+1 records in
0+0 records out
8269824 bytes (8.3 MB, 7.9 MiB) copied, 0.205584 s, 40.2 MB/s

スペースが足りませんが、カーネルの観点からは書くところがないので、「それ以上書き込めません」。以前のファイルとは異なります(切り捨てられたため)。

$ shasum /mnt/myfs/1Mx10copy_pi.dat 
2c7330b75e1fa573de4d13ce3c7cbcad8139454d  /mnt/myfs/1Mx10copy_pi.dat

ただし、「デバイス全体」を複製する場合(より大きなブロックサイズに注意してください)

$ dd if=myfs.img of=myfs2.img bs=1G status=progress
0+1 records in
0+1 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0255448 s, 410 MB/s
$ sudo mkdir -p /mnt/myfs2     
$ sudo mount myfs2.img /mnt/myfs2
$ shasum /mnt/myfs2/1Mx10copy_pi.dat
2c7330b75e1fa573de4d13ce3c7cbcad8139454d  /mnt/myfs2/1Mx10copy_pi.dat
 

私たちはオリジナルを手に入れました。

おすすめ記事