rsync
を使用して、シンボリックリンク、ハードリンク、権限、宛先上のファイルの削除などを含むフォルダーをコピーしました。それらはかなり同一でなければなりません。
1つのフォルダーはUSBドライブにあり、もう1つのフォルダーはローカルディスクにあります。
両方のフォルダでdu -bls
を実行すると、サイズがわずかに異なります。
私のdu
は--apparent-size
をサポートしており、-s
によって適用され、-l
はハードリンクのコンテンツをカウントする必要があります。
この違いはどのように説明でき、実際の合計をどのように取得できますか?
どちらのファイルシステムもext4です。唯一の違いは、USBドライブが暗号化されていることです。
編集:
私は実際に異なっていたフォルダーを探して掘り下げました、1つを見つけました、そしてその内容は特別ではありません(ブロックデバイス、パイプ、ハードまたはシンボリックリンク、ゼロバイトファイルなし)、その中にいくつかの小さなファイルがある可能性があります。違いは、この特定のフォルダーの872830と881022です。
また、両方のフォルダでdu -blsc
を実行しましたが、この場合の結果は同じです。
使用したコマンドの詳細:
$ du -Pbsl $LOCALDIR $USBDIR | cut -f1
872830
881022
$ du -Pbslc $LOCALDIR/*
[...]
868734 total
$ du -Pbslc $USBDIR/*
[...]
868734 total
$ ls -la $USBDIR | wc
158 1415 9123
$ ls -la $LOCALDIR | wc
158 1415 9123
$ diff -sqr --no-dereference $LOCALDIR $USBDIR | grep -v identical
[No output and all identical if I remove the grep]
rsync
を使用してファイルをコピーし、diff
を使用して2つのファイルセットを比較したため、diff
は違いを報告しないため、2つのファイルセットは同一です。
サイズの違いは、おそらく2つのディレクトリ構造内の実際のディレクトリノードのサイズによって説明できます。一部のファイルシステムでは、ファイルまたはサブディレクトリが削除されてもディレクトリが切り捨てられず、実際に必要なものよりわずかに大きいディレクトリノードが残ります。
ある時点で、後で削除された多くのファイルを保持している場合、大きなディレクトリノードが残っている可能性があります。
例:
$ mkdir dir
$ ls -ld dir
drwxr-xr-x 2 kk wheel 512 May 11 17:09 dir
$ touch dir/file-{1..1000}
$ ls -ld dir
drwxr-xr-x 2 kk wheel 20480 May 11 17:09 dir
$ rm dir/*
$ ls -ld dir
drwxr-xr-x 2 kk wheel 20480 May 11 17:09 dir
$ du -h .
20.0K ./dir
42.0K .
$ ls -R
dir
./dir:
作成した1000個のファイルを削除したにもかかわらず、dir
ディレクトリが20 KBを使用していることに注意してください。
ファイルシステムのブロックサイズを確認しましたか?両方のデバイスが同じファイルシステムを使用している場合でも、ブロックサイズが異なる可能性があり、これにより「わずかに異なる」サイズが説明される可能性があります。
たとえば、8KiBのブロックサイズを使用するようにファイルシステムが設定されているデバイスに1KiBのファイルの束を保存すると、使用されるブロックごとに7KiBの無駄が生じます。ファイルがディスクから取得している実際のサイズは、使用されているブロックのサイズであり、この場合はファイル自体のサイズではありません(ブロックごとに複数のファイルを保存するための何らかのツールがない限り)。以下のコマンドを使用して、さまざまなデバイスのブロックサイズを確認してください。
# blockdev --getbsz <DEVICE>