http://diary-of-paddy.blogspot.jp/2011/06/lessfs.html
make menuconfig。
file system => fuse
< # CONFIG_FUSE_FS is not set --- > CONFIG_FUSE_FS=m > # CONFIG_CUSE is not set
インストールオプション。
$ grep lessfs /etc/portage/package.use/x86_64-pc-linux-gnu sys-fs/lessfs lzo
インストール。
sudo emerge --oneshot -avt sys-fs/lessfs
modprobe fuse起動設定。
sudo /etc/init.d/fuse restart sudo rc-update add fuse default
初期化。
sudo mkdir -p /data/master/mta sudo mklessfs -c /etc/lessfs.cfg sudo lessfs /etc/lessfs.cfg /mnt/lessfs/
確認。
$ mount |grep less lessfs on /mnt/lessfs type fuse.lessfs (rw,nosuid,nodev,max_read=131072,default_permissions,allow_other)
テスト。128MBの\0だらけのデータを10個。
$ cd /mnt/lessfs/ $ df | grep ^/dev/sda1 /dev/sda1 20641404 6630052 12962828 34% / $ sudo dd if=/dev/zero of=/var/tmp/dummy.data bs=128M count=1 1+0 レコード入力 1+0 レコード出力 134217728 バイト (134 MB) コピーされました、 0.15713 秒、 854 MB/秒 $ df | grep ^/dev/sda1 /dev/sda1 20641404 6761512 12831368 35% / $ sudo cp -i /var/tmp/dummy.data . $ df | grep ^/dev/sda1 /dev/sda1 20641404 6761268 12831612 35% / $ for num in $(seq 1 10); do df | grep ^/dev/sda1; sudo cp -i dummy.data dummy.data.$num; done /dev/sda1 20641404 6761264 12831616 35% / /dev/sda1 20641404 6761372 12831508 35% / /dev/sda1 20641404 6761540 12831340 35% / /dev/sda1 20641404 6761676 12831204 35% / /dev/sda1 20641404 6761808 12831072 35% / /dev/sda1 20641404 6762180 12830700 35% / /dev/sda1 20641404 6762312 12830568 35% / /dev/sda1 20641404 6762452 12830428 35% / /dev/sda1 20641404 6762564 12830316 35% / /dev/sda1 20641404 6762696 12830184 35% / $ cd .. $ sudo umount /mnt/lessfs/ $ du -sh /data/ 16M /data/
テスト。カーネルのファイルを10個。
$ sudo lessfs /etc/lessfs.cfg /mnt/lessfs/ $ cd /mnt/lessfs/ $ find /mnt/lessfs/ -name "dummy*" -exec md5sum {} \; | awk '{print $1}' | sort | uniq -c 11 fde9e0818281836e4fc0edfede2b8762 $ sudo cp -i /usr/portage/distfiles/linux-3.5.tar.bz2 . $ df | grep ^/dev/sda1 /dev/sda1 20641404 6924292 12668588 36% / $ for num in $(seq 1 10); do df | grep ^/dev/sda1; sudo cp -i linux-3.5.tar.bz2 linux-3.5.tar.bz2.$num; done /dev/sda1 20641404 6923292 12669588 36% / /dev/sda1 20641404 6923516 12669364 36% / /dev/sda1 20641404 6923744 12669136 36% / /dev/sda1 20641404 6923964 12668916 36% / /dev/sda1 20641404 6924180 12668700 36% / /dev/sda1 20641404 6924368 12668512 36% / /dev/sda1 20641404 6924628 12668252 36% / /dev/sda1 20641404 6924720 12668160 36% / /dev/sda1 20641404 6925084 12667796 36% / /dev/sda1 20641404 6925300 12667580 36% / $ cd .. $ sudo umount /mnt/lessfs/ $ du -sh /data/ 175M /data/
テスト。1280MBの\0だらけのデータを10個。
$ sudo rm -rf dummy.data* $ sudo rm -f /var/tmp/dummy.data $ sudo dd if=/dev/zero of=/var/tmp/dummy.data bs=128M count=10 10+0 レコード入力 10+0 レコード出力 1342177280 バイト (1.3 GB) コピーされました、 16.7565 秒、 80.1 MB/秒 $ df | grep ^/dev/sda1 /dev/sda1 20641404 8121448 11471432 42% / $ for num in $(seq 1 10); do df | grep ^/dev/sda1; sudo cp -i /var/tmp/dummy.data dummy.data.$num; done /dev/sda1 20641404 8117592 11475288 42% / /dev/sda1 20641404 8121488 11471392 42% / /dev/sda1 20641404 8128460 11464420 42% / /dev/sda1 20641404 8132088 11460792 42% / /dev/sda1 20641404 8146808 11446072 42% / /dev/sda1 20641404 8147228 11445652 42% / /dev/sda1 20641404 8151012 11441868 42% / /dev/sda1 20641404 8154648 11438232 42% / /dev/sda1 20641404 8160748 11432132 42% / cp: `dummy.data.9' を書き込んでいます: ソフトウェアが接続を中断しました cp: `dummy.data.9' の拡張に失敗しました: ソフトウェアが接続を中断しました df: `/mnt/lessfs': 通信端点が接続されていません /dev/sda1 20641404 8169424 11423456 42% / cp: `dummy.data.10' にアクセス中: 通信端点が接続されていません $ df | grep ^/dev/sda1 df: `/mnt/lessfs': 通信端点が接続されていません /dev/sda1 20641404 8166600 11426280 42% / $ ls -al /mnt/lessfs ls: /mnt/lessfs にアクセスできません: 通信端点が接続されていません $ cd .. bash: cd: ..: 通信端点が接続されていません $ cd /mnt/ $ sudo umount /mnt/lessfs/ $ df | grep ^/dev/sda1 /dev/sda1 20641404 8166604 11426276 42% / $ sudo rm -f /var/tmp/dummy.data $ df | grep ^/dev/sda1 /dev/sda1 20641404 6855880 12737000 35% / $ sudo lessfs /etc/lessfs.cfg /mnt/lessfs/ $ cd lessfs/ $ df | grep ^lessfs lessfs 20641404 6856332 12736548 35% /mnt/lessfs $ ls -al 合計 6133384 drwxr-xr-x 4 root root 4096 2012-11-25 02:31:29 ./ drwxr-xr-x 7 root root 4096 2012-11-25 01:42:31 ../ drwxr-xr-x 4 root root 4096 2012-11-25 02:00:11 .lessfs/ -rw-r--r-- 1 root root 1342177280 2012-11-25 02:30:17 dummy.data.1 -rw-r--r-- 1 root root 1342177280 2012-11-25 02:30:53 dummy.data.2 -rw-r--r-- 1 root root 1342177280 2012-11-25 02:31:26 dummy.data.3 -rw-r--r-- 1 root root 1342177280 2012-11-25 02:31:29 dummy.data.4 -rw-r--r-- 1 root root 21102592 2012-11-25 02:31:29 dummy.data.5 -rw-r--r-- 1 root root 80978443 2012-11-25 02:21:01 linux-3.5.tar.bz2 -rw-r--r-- 1 root root 80978443 2012-11-25 02:21:56 linux-3.5.tar.bz2.1 -rw-r--r-- 1 root root 80978443 2012-11-25 02:22:20 linux-3.5.tar.bz2.10 -rw-r--r-- 1 root root 80978443 2012-11-25 02:21:58 linux-3.5.tar.bz2.2 -rw-r--r-- 1 root root 80978443 2012-11-25 02:22:02 linux-3.5.tar.bz2.3 -rw-r--r-- 1 root root 80978443 2012-11-25 02:22:05 linux-3.5.tar.bz2.4 -rw-r--r-- 1 root root 80978443 2012-11-25 02:22:07 linux-3.5.tar.bz2.5 -rw-r--r-- 1 root root 80978443 2012-11-25 02:22:11 linux-3.5.tar.bz2.6 -rw-r--r-- 1 root root 80978443 2012-11-25 02:22:11 linux-3.5.tar.bz2.7 -rw-r--r-- 1 root root 80978443 2012-11-25 02:22:13 linux-3.5.tar.bz2.8 -rw-r--r-- 1 root root 80978443 2012-11-25 02:22:17 linux-3.5.tar.bz2.9 $ du -sh /data/ 236M /data/
テスト。大きいファイルをダイレクトに作成。
$ sudo dd if=/dev/zero of=dummy.data.big bs=128M count=80 dd: `dummy.data.big' を書き込んでいます: 通信端点が接続されていません 44+0 レコード入力 43+0 レコード出力 5772410880 バイト (5.8 GB) コピーされました、 12.5095 秒、 461 MB/秒 $ ls ls: ディレクトリ . を開くことが出来ません: 通信端点が接続されていません $ cd .. bash: cd: ..: 通信端点が接続されていません $ cd /mnt/ $ sudo umount /mnt/lessfs/ $ sudo lessfs /etc/lessfs.cfg /mnt/lessfs/ $ cd lessfs/ $ ls -alh dummy.data.big -rw-r--r-- 1 root root 1.6G 2012-11-25 02:47:14 dummy.data.big
テスト。でかいファイルをコピーする。
$ sudo rm -i dummy.data.big $ df -h | grep ^/dev/sda1 /dev/sda1 20G 6.6G 13G 36% / $ sudo dd if=/dev/zero of=/var/tmp/dummy.data.big bs=1G count=10 10+0 レコード入力 10+0 レコード出力 10737418240 バイト (11 GB) コピーされました、 72.1913 秒、 149 MB/秒 $ df -h | grep ^/dev/sda1 /dev/sda1 20G 17G 2.2G 89% / $ sudo cp -i /var/tmp/dummy.data.big . cp: `./dummy.data.big' を書き込んでいます: ソフトウェアが接続を中断しました cp: `./dummy.data.big' の拡張に失敗しました: ソフトウェアが接続を中断しました cp: `./dummy.data.big' を閉じています: 通信端点が接続されていません $ cd /mnt/ $ sudo umount /mnt/lessfs/ umount /mnt/lessfs: デバイスがビジーです。 (このデバイスがプロセスによって使われているのであれば、lsof(8)やfuser(1)を使って調査するのが有益かもしれません) $ sudo rm -f /var/tmp/dummy.data.big $ sudo lsof lessfs lsof: WARNING: can't stat() fuse.lessfs file system /mnt/lessfs Output information may be incomplete. lsof: status error on lessfs: Transport endpoint is not connected lsof 4.85 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s] [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [-o [o]] [-p s] [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names] Use the ``-h'' option to get more help information. 再起動後、マウントする。 $ ls -alh dummy.data.big -rw-r--r-- 1 root root 5.0G 2012-11-25 03:02:59 dummy.data.big
ディスクフルギリギリまで詰め込んで運用していると、不味いシナリオが発生しそう...と、参考サイトに書いてあるので、残りのディスク容量が少ない時にそれ以上ぐらいのサイズのファイルをコピーするとダメっぽい。
rsync の --link-dest より小さくなりそうな気がするが、なにかあった時に、どうやって取り出したらいいのかわからないので正常にマウントできる/data/をバックアップしたらいいのかもしれない。
バックアップファイルの管理が適当で同じファイルや未圧縮が多く複数人が保存している場合とても圧縮できるという物なのかもしれない。