mdconfig -o compress ??? ― 2006年04月13日 10時12分30秒
mdconfig に compress のオプションがあったのを思いだし、試してみることにした。
# dd if=/dev/zero of=current-obj.cmp.md seek=999 count=1 bs=1M
# mdconfig -a -t vnode -o compress -f current-obj.cmp.md
md1
# newfs -U /dev/md1
# mount /dev/md1 /mnt/sys
ファイルを作って、mdconfig を -o compress を付けて試す。
# mdconfig -a -t vnode -f current-obj.md
md2
# cd /mnt/sys
# dump -f - -0 /dev/md2 | restore -r -f -
# df | grep md1
/dev/md1 988398 779732 129596 86% /mnt/sys
current-obj を試してみる。デバイス上には元と同じぐらいの書き込みがあった。そこで、ファイルの大きさを比べてみる。
# umount /mnt/sys
# mdconfig -d -u 1
# ls -lsa current-obj.cmp.md
798176 ... 1048576000 Apr 12 21:06 current-obj.cmp.md
# mount /dev/md2 /mnt/sys
dynabook-freebsd# df | grep md2
/dev/md2 988398 779700 129628 86% /mnt/sys
mdconfig を detach して、ls で大きさを見ても、元とほとんど変わっていない。
mdconfig の -o compress は動かないということだろうか。 とりあえず、ソースを見てみる。which mdconfig で /sbin/mdconfig と出て来るので、src/sbin/mdconfig にあるということだ。
case 't':
if (cmdline != 1)
usage();
if (!strcmp(optarg, "malloc")) {
mdio.md_type = MD_MALLOC;
mdio.md_options = MD_AUTOUNIT | MD_COMPRESS;
} else if (!strcmp(optarg, "preload")) {
mdio.md_type = MD_PRELOAD;
mdio.md_options = 0;
} else if (!strcmp(optarg, "vnode")) {
mdio.md_type = MD_VNODE;
mdio.md_options = MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS;
} else if (!strcmp(optarg, "swap")) {
mdio.md_type = MD_SWAP;
mdio.md_options = MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS;
} else {
usage();
}
cmdline=2;
break;
とあるので、preload 以外は既に圧縮がかかっているということか。-o nocompress を後日試して、検証してみることにする。
最近のコメント