こんにちは、Aireです。
唐突ですがLinux上でブロックデバイスファイルの差分を比較する方法が必要になりましたので、簡単に調べて実機で試してみました。他にもあれば追記していきたいと思います。
目次
実行環境
今回はRHELサーバを使用しました。バージョンの詳細は以下です。
OS(確認方法:cat /etc/redhat-release) | Red Hat Enterprise Linux release 8.4 (Ootpa) |
Linux Kernel(確認方法:uname -r) | 4.18.0-305.el8.x86_64 |
ハッシュ値による比較
まずはハッシュ値を比較して差分を確認する方法です。
opensslコマンド、またはsha256sumやmd5sumといったコマンドを実行することで、任意のハッシュ形式で各デバイスファイルのハッシュ値を計算することができます。
以下は、SHA256アルゴリズムのハッシュ値の計算例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# (0) /dev/xvdbのハッシュ値を計算 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 20G 0 disk |-xvda1 202:1 0 1M 0 part `-xvda2 202:2 0 20G 0 part / xvdb 202:16 0 10G 0 disk # (1) opensslコマンドを使用 $ openssl sha256 /dev/xvdb SHA256(/dev/xvdb)= 59ca06c14848450462353e7dbd43fcec862f78259cd1758cc7eab07c3cb1c9df # (2) sha256sumコマンドを使用 ※(1)と(2)のハッシュ値の計算結果は同じ $ sha256sum /dev/xvdb 59ca06c14848450462353e7dbd43fcec862f78259cd1758cc7eab07c3cb1c9df /dev/xvdb # (3) ddコマンドを実行し、適当なタイミングで終了 $ dd if=/dev/zero of=/dev/xvdb 4503649+0 records in 4503649+0 records out 2305868288 bytes (2.3 GB, 2.1 GiB) copied, 387.016 s, 6.0 MB/s # (4) (3)とハッシュ値が異なることを確認 $ sha256sum /dev/xvdb 5b5d22c0076090121766645a484a7496462020274128ef855427d1a104d3f3fa /dev/xvdb # (5) /dev/xvdbをコピーして作成した/dev/xvdfのハッシュ値を計算 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 20G 0 disk |-xvda1 202:1 0 1M 0 part `-xvda2 202:2 0 20G 0 part / xvdb 202:16 0 10G 0 disk xvdf 202:80 0 10G 0 disk # (6) (4)とハッシュ値が同じであることを確認 $ sha256sum /dev/xvdf 5b5d22c0076090121766645a484a7496462020274128ef855427d1a104d3f3fa /dev/xvdf |
diffコマンドによる比較
diffコマンドは、ファイル間の差分を出力できるコマンドです。
以下、ブロックデバイスの比較例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# ファイルが同一であることを確認 $ diff --brief --report-identical-files /dev/xvdb /dev/xvdf Files /dev/xvdb and /dev/xvdf are identical ※オプションについて --brief:ファイルに差分があるかどうかだけ出力する。 --report-identical-files:ファイルが同じ場合も出力する。 # ddコマンドで全面にダミーライト $ dd if=/dev/zero of=/dev/xvdb obs=1M dd: writing to '/dev/xvdb': No space left on device 20973568+0 records in 10240+0 records out 10737418240 bytes (11 GB, 10 GiB) copied, 167.093 s, 64.3 MB/s # ファイルに差分があることを確認 $ diff --brief --report-identical-files /dev/xvdb /dev/xvdf Files /dev/xvdb and /dev/xvdf differ |