R. Ayanokouzi et al.

[rdfind] ハードリンク化されたファイル群に対してrdfindを実行すると正しくハードリンク化されない

rdfindはハードリンク化されているファイル郡に対する処理が期待通りでなかった。

まずはテスト用の移動元ディレクトリとハードリンク化されるファイルを作成。

$ rm -fr ./tmp/rdfind_test_dir
$ mkdir -p ./tmp/rdfind_test_dir
$ for J in $(seq 0 1); do for I in $(seq 0 1); do echo ${J} > ./tmp/rdfind_test_dir/rdfind_inode_group${J}_${I}; done; done;
$ ls -li ./tmp/rdfind_test_dir
total 16
241259 -rw-r--r-- 1 **** **** 2 Feb 12 11:22 rdfind_inode_group0_0
241261 -rw-r--r-- 1 **** **** 2 Feb 12 11:22 rdfind_inode_group0_1
241262 -rw-r--r-- 1 **** **** 2 Feb 12 11:22 rdfind_inode_group1_0
241263 -rw-r--r-- 1 **** **** 2 Feb 12 11:22 rdfind_inode_group1_1

これに対して rdfind を実行。期待通り、group毎に同じinodeに変わった。

$ rdfind -makehardlinks true ./tmp/rdfind_test_dir
Now scanning "./tmp/rdfind_test_dir", found 4 files.
Now have 4 files in total.
Removed 0 files due to nonunique device and inode.
Now removing files with zero size from list...removed 0 files
Total size is 8 bytes or 8 b
Now sorting on size:removed 0 files due to unique sizes from list.4 files left.
Now eliminating candidates based on first bytes:removed 0 files from list.4 files left.
Now eliminating candidates based on last bytes:removed 0 files from list.4 files left.
Now eliminating candidates based on md5 checksum:removed 0 files from list.4 files left.
It seems like you have 4 files that are not unique
Totally, 4 b can be reduced.
Now making results file results.txt
Now making hard links.
Making 2 links.
$ ls -li ./tmp/rdfind_test_dir
total 16
241259 -rw-r--r-- 2 **** **** 2 Feb 12 11:22 rdfind_inode_group0_0
241259 -rw-r--r-- 2 **** **** 2 Feb 12 11:22 rdfind_inode_group0_1
241263 -rw-r--r-- 2 **** **** 2 Feb 12 11:22 rdfind_inode_group1_0
241263 -rw-r--r-- 2 **** **** 2 Feb 12 11:22 rdfind_inode_group1_1

以下のケースを考える。すなわち、同じinodeを持つrdfind_inode_group0_{0,1}と、同じinodeを持つrdfind_inode_group1_{0,1}が存在し、これらの内容が全て同じ場合である。これを rdfind で処理した結果を見るとrdfind_inode_group1_?に含まれるファイルに対するリンクが漏れている事がわかる。

$ rm -fr ./tmp/rdfind_test_dir
$ mkdir -p ./tmp/rdfind_test_dir
$ for I in $(seq 0 1); do echo 0 > ./tmp/rdfind_test_dir/rdfind_inode_group${I}_0; ln -f ./tmp/rdfind_test_dir/rdfind_inode_group${I}_{0,1}; done;
$ ls -li ./tmp/rdfind_test_dir
total 16
241259 -rw-r--r-- 2 de de 2 Feb 12 11:40 rdfind_inode_group0_0
241259 -rw-r--r-- 2 de de 2 Feb 12 11:40 rdfind_inode_group0_1
241261 -rw-r--r-- 2 de de 2 Feb 12 11:40 rdfind_inode_group1_0
241261 -rw-r--r-- 2 de de 2 Feb 12 11:40 rdfind_inode_group1_1
$ rdfind -makehardlinks true ./tmp/rdfind_test_dir
Now scanning "./tmp/rdfind_test_dir", found 4 files.
Now have 4 files in total.
Removed 2 files due to nonunique device and inode.
Now removing files with zero size from list...removed 0 files
Total size is 4 bytes or 4 b
Now sorting on size:removed 0 files due to unique sizes from list.2 files left.
Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left.
It seems like you have 2 files that are not unique
Totally, 2 b can be reduced.
Now making results file results.txt
Now making hard links.
Making 1 links.
$ ls -li ./tmp/rdfind_test_dir
total 16
241259 -rw-r--r-- 3 **** **** 2 Feb 12 11:40 rdfind_inode_group0_0
241259 -rw-r--r-- 3 **** **** 2 Feb 12 11:40 rdfind_inode_group0_1
241261 -rw-r--r-- 1 **** **** 2 Feb 12 11:40 rdfind_inode_group1_0
241259 -rw-r--r-- 3 **** **** 2 Feb 12 11:40 rdfind_inode_group1_1

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2008-04-20T12:10:41+09:00
  2. Modified: 2008-04-20T12:10:41+09:00
  3. Generated: 2021-03-31T07:51:29+09:00