Linuxで重複排除【xfs編】

Linuxで重複排除を実行して空き容量を増やそう!!【xfs編】

Linuxには一部のファイルシステムで
重複排除という機能を利用することが可能です。

説明は省きますが
今回はその手順を書いていきます。

主に使われているファイルシステムで
重複排除が可能なのはbtrfsとxfsの二種類です。

このうち、xfsに関してはフォーマット時にオプションを設定していた場合のみ重複排除が可能となっています。
古いオプションでフォーマットしているxfsの場合には重複排除は利用できないので注意してください。

今回はDebian上での実行を前提として解説します。

まずはduperemoveをインストール

重複排除にはduperemoveというパッケージが必要になるのでaptでインストールしておきましょう。

sudo apt install duperemove

重複しているファイルを洗い出す

重複排除を実行する前に
どの程度のファイルが重複をしているのか確認をすることが可能です。

sudo duperemove -hr /

大量に出てくる
これらのファイルが重複ファイルです

重複排除を実行

結果に納得をしたら早速、重複排除のファイルを実行します。

sudo duperemove -dhr /

私の環境の場合、約3.2GBの重複ファイルが存在したようです。

Comparison of extent info shows a net change in shared extents of: 3.2G

認識されるサイズはそのままに
ディスクの空き容量が増えていることが分かります。

デフォルトのcpを参照コピーにする

せっかく重複排除でファイルの容量を削減しても

リアルタイムでの重複排除は行われないため
cpコマンド等では毎回実体のコピーが行われてしまいます。

そこでデフォルトのcpコマンドを改造して
毎回参照コピーにするような設定を紹介します。

もちろん、これが可能なのはbtrfsとオプション付きでフォーマットしたxfsだけです。

Linuxのcpコマンドを参照コピーに改造する

ここはLinuxらしくソースコードを引っ張ってきて
cpの動作そのものを改造してしまいましょう。

そのほうが先程の方法よりもかえって安全です。

まずはソースコードのリポジトリを有効化

sudoedit /etc/apt/sources.list

deb http://ftp.jp.debian.org/debian/ buster main non-free contrib
deb-src http://ftp.jp.debian.org/debian/ buster main non-free contrib

cpのソースコードとビルド用の依存関係を引っ張ってくる

apt source coreutils

sudo apt build-dep coreutils

sudo apt install devscripts

cpのソースコードを調整する

src/cp.cを開いて

x->reflink_mode = REFLINK_NEVER;

上記のコードを

x->reflink_mode = REFLINK_AUTO;

このように修正しておきます

パッケージ化してインストール

修正が完了したら早速ビルドしましょう

debuild -b -uc -us

あとは出来上がったパッケージをインストールするだけです。

参考記事:https://knowledge.sakura.ad.jp/1123/

 

もちろん実行は自己責任でお願いします。