btrfsのファイルが書き込み中にコピーされているかどうかを確認するには?

btrfsのファイルが書き込み中にコピーされているかどうかを確認するには?

フルコピーと記録中にコピー「コピー」を制御するcpオプションがあることを知っています。--reflink

lsbtrfsでファイルが他のファイルといくつかのリポジトリを共有するか(記録中のコピーの意味で)確認するために(または他のコマンド)を使用できますか?

編集:@StéphaneChazelasが私に指摘しましたがfilefrag失敗しました。

root@void:/tmp/mount# mount | tail -1
/tmp/back on /tmp/mount type btrfs (rw,relatime,space_cache)
root@void:/tmp/mount# df -h | tail -1
/dev/loop0       32M   13M   20M  38% /tmp/mount
root@void:/tmp/mount# ls -lh
total 8.0M
-rw-r--r-- 1 root root 8.0M Jan 19 08:43 one
root@void:/tmp/mount# cp --reflink=always one two
root@void:/tmp/mount# sync
root@void:/tmp/mount# ls -lh
total 16M
-rw-r--r-- 1 root root 8.0M Jan 19 08:43 one
-rw-r--r-- 1 root root 8.0M Jan 19 08:45 two
root@void:/tmp/mount# df -h | tail -1
/dev/loop0       32M   13M   20M  38% /tmp/mount
root@void:/tmp/mount# filefrag -kvx one 
Filesystem type is: 9123683e
File size of one is 8388608 (8192 blocks of 1024 bytes)
FIEMAP failed with unknown flags 2
one: FIBMAP unsupported
root@void:/tmp/mount# uname -a
Linux void 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux

ベストアンサー1

アップデート(2021年1月):@bitinerantのコメントをご覧ください。"btrfs-debug-treeは廃止されました。btrfs inform-internal dump-treeを使用してください。"


コマンドで見つける方法がわかりませんls。でも本当に欲しいなら使えますbtrfs-progs/btrfs-デバッグ-ツリー

そして引用リンク=常に、ファイルは共通データブロックを共有します。この共通データブロック(拡張とも呼ばれる)への参照数が1を超えています。

  1. まず、ファイル1とファイル2のobjectidを見つける必要があります。

     #./btrfs-debug-tree  /dev/xvdc
     (Check under FS_TREE)
       <snip>
         item 8 key (256 DIR_INDEX 4) itemoff 15842 itemsize 33
             location key (259 INODE_ITEM 0) type FILE
             namelen 3 datalen 0 name: one
         item 9 key (256 DIR_INDEX 5) itemoff 15809 itemsize 33
             location key (260 INODE_ITEM 0) type FILE
             namelen 3 datalen 0 name: two
       </snip>
    

上から我々はそれを見ることができます259(1)そして260(2)

  1. 今、その参照を見つけます。範囲木から。次のコマンドは、2つのファイル間で共有されるデータブロックを探します。

     # ./btrfs-debug-tree  /dev/xvdc | grep -A2 "refs 2"
             extent refs 2 gen 9 flags DATA
             extent data backref root 5 objectid 260 offset 0 count 1
             extent data backref root 5 objectid 259 offset 0 count 1
    

ボーナス:別の参照を作成してください。

# cp --reflink=always one three

参照数が1ずつ増加することを確認してください。

# ./btrfs-debug-tree   /dev/xvdc | grep -A3 "refs 3"
        extent refs 3 gen 9 flags DATA
        extent data backref root 5 objectid 260 offset 0 count 1
        extent data backref root 5 objectid 261 offset 0 count 1
        extent data backref root 5 objectid 259 offset 0 count 1

このデータブロックは、objectid が指す 3 つのファイル間で共有されます。259,260,261

おすすめ記事