-->

2012-11-25

sys-fs/lessfs

参考サイト。
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/をバックアップしたらいいのかもしれない。

バックアップファイルの管理が適当で同じファイルや未圧縮が多く複数人が保存している場合とても圧縮できるという物なのかもしれない。

0 件のコメント: