参照されたリンクファイルを含むXFSフォルダのディスク使用量をどのように確認できますか?

参照されたリンクファイルを含むXFSフォルダのディスク使用量をどのように確認できますか?

XFSはCoW(記録中のコピー)をサポートしているため、一部のduバイトがファイル間で共有されている場合に何が起こるかは完全にはわかりません。共有バイトを何度も計算せずに、フォルダが使用するディスク容量、つまりディスクの実際の使用量を確認する方法を探したいと思います。

xfs_estimateduどちらも私が必要なことをしていないようです。

$ mkdir testfolder
$ cd testfolder 
$ dd if=/dev/zero of=testfile  bs=1M count=500 status=progress
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 0,158889 s, 3,3 GB/s
$ cp --reflink=always testfile testfile2                      
$ xfs_estimate .                         
. will take about 1004,4 megabytes
$ du -hs .      
1000M   .

私が期待しているのは、いくつかのツールでフォルダが500MBしか使用していないと言うことです。

dfcpplainを使用すると、ディスクの空き容量が500MB少なく表示されますが、cp --reflink=always再接続すると機能しているように見えますが、dfディスクがかなり大きく、やや小さいフォルダの実際のサイズを確認したかったので、実際には役に立ちません。

私はこれがBTRFSにも有効な質問だと思います。しかし、私の場合は、XFSと互換性のあるソリューションが必要です。

ベストアンサー1

基本的にこれを行うツールがあるはずですが、そのようなツールがあるかどうか覚えていません。

filefrag(通常、FIEMAP ioctl)または(XFS固有)を使用してxfs_bmapファイル範囲を照会できます。これにより、コミュニティ(重複)を一度だけ計算するか、まったく計算しないかを選択できます。

# filefrag -e -k testfile
Filesystem type is: 58465342
File size of testfile is 5242880 (5120 blocks of 1024 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..    5119:         96..      5215:   5120:             last,shared,eof
testfile: 1 extent found

この例では、filefragスコープが共有されていることを知って表示することは(必ずしもそのディレクトリ内である必要はありませんが、ファイルシステムのどこでも)次のことはxfs_bmap行いません。

# xfs_bmap -l testfile
testfile:
    0: [0..10239]: 192..10431 10240 blocks

ただし、デフォルトでは、これは独自のスクリプトを作成するために使用できる重要な要素です。

可能なすべての共有範囲を表示します。

# find . -xdev -type f -exec filefrag -e -k {} + | grep shared
   0:        0..    5119:         96..      5215:   5120:             last,shared,eof
   0:        0..    5119:       5216..     10335:   5120:             last,shared,eof
   0:        0..    5119:         96..      5215:   5120:             last,shared,eof

共有(ディレクトリ内の重複)範囲の使用法xfs_bmap

# find . -xdev -type f -exec xfs_bmap -l {} + | grep 'blocks$' | grep -v ': hole' | sort | uniq -d
0: [0..10239]: 192..10431 10240 blocks

各ブロックは、1024バイト(オプションを含む)またはファイルシステムのブロックサイズ(4096バイトなど)xfs_bmapではなく512バイトを使用します。filefrag-k

以下を使用して繰り返し範囲を共有しますfilefrag

# find . -xdev -type f -exec filefrag -ek {} + | grep shared | sort | uniq -d
   0:        0..    5119:         96..      5215:   5120:             last,shared,eof

したがって、この場合、du -cks .結果から5120を減算する必要があります。

おすすめ記事