btrfsの本家様 https://btrfs.wiki.kernel.org/index.php/Main_Page

透過的ファイル圧縮やスナップショット機能を有するファイルシステム。CentOS 7で標準として使用可能
ここではこのbtrfsのボリューム作成、透過的圧縮について記す

btrfs/RAID

btrfsツール

CentOS 7では標準で btrfs-progs パッケージがインストールされ

/usr/sbin/btrfs
/usr/sbin/btrfs-convert
/usr/sbin/btrfs-debug-tree
/usr/sbin/btrfs-find-root
/usr/sbin/btrfs-image
/usr/sbin/btrfs-map-logical
/usr/sbin/btrfs-select-super
/usr/sbin/btrfs-show-super
/usr/sbin/btrfs-zero-log
/usr/sbin/btrfsck
/usr/sbin/btrfstune
/usr/sbin/fsck.btrfs
/usr/sbin/mkfs.btrfs

らが利用可能である

mkfs.btrfs

HDDにパーティションを設けるか(/dev/sdb1)、設けないでそのまま(/dev/sdb)使うか迷う。

btrfsは、複数のHDDを記憶域プールのような場所に置いて、必要な分だけ切り出して使うことができるので、下地のHDDにパーティションを設けることにあまり意味はないと思っている。ここではパーティションを設けずそのまま使うことにした。

フォーマットは、mkfs.btrfsを使う。
*既に別の規格でフォーマットされたHDDには-fフラグで強制的にフォーマットを行う

[root@btrfs ~]# mkfs.btrfs -f /dev/sdb
btrfs-progs v4.4.1
See http://btrfs.wiki.kernel.org for more information.
 
Label:              (null)
UUID:               944de19b-85a8-4c7b-86c6-18cf2fbfbc09
Node size:          16384
Sector size:        4096
Filesystem size:    8.00GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         DUP             417.56MiB
  System:           DUP              12.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1     8.00GiB  /dev/sdb
 
[root@btrfs ~]#

次にmount

シングルボリュームで

mkfs.btrfsでフォーマットしたHDDをシステムにマウントします。
この際、透過的圧縮のオプションとして、zlib、lzoがある
参照:https://btrfs.wiki.kernel.org/index.php/Compression

マシンへのマウントは mount コマンドなら下記のようにする

[root@btrfs ~]# mkdir /home1
[root@btrfs ~]# mount -t btrfs -o compress=lzo,rw /dev/sdb /home1
 
[root@btrfs ~]# mount |grep "/dev/sdb"
/dev/sdb on /home1 type btrfs (rw,relatime,seclabel,compress=lzo,space_cache,subvolid=5,subvol=/)
 
[root@btrfs ~]#

/etc/fstabへの記述は

/dev/sdb /home1 btrfs compress=lzo,rw,defaults 0 0

とするか、UUIDを指定したいのなら、そのUUIDはbtrfsコマンドで得られる。

[root@btrfs ~]# btrfs filesystem show /dev/sdb
Label: none  uuid: 944de19b-85a8-4c7b-86c6-18cf2fbfbc09
        Total devices 1 FS bytes used 192.00KiB
        devid    1 size 8.00GiB used 843.12MiB path /dev/sdb
 
[root@btrfs ~]# cat /etc/fstab
 :
UUID=944de19b-85a8-4c7b-86c6-18cf2fbfbc09 /home1 btrfs compress=lzo,rw,defaults 0 0
 
[root@btrfs ~]#

mountオプションはここを参照 https://btrfs.wiki.kernel.org/index.php/Mount_options
デフォルトで透過的圧縮が有効で、compress=zlibが適用さているそうな。

透過的圧縮

2種の圧縮方法(zlib、lzo)と無圧縮でそれぞれマシンにmountしてみる。
そこにファイルを置いて圧縮状況を見てみた

[root@btrfs ~]# mount -t btrfs -o compress=zlib /dev/sdb /home1
[root@btrfs ~]# mount -t btrfs -o compress=lzo /dev/sdc /home2
[root@btrfs ~]# mount -t btrfs -o compress=no /dev/sdd /home3
 
[root@btrfs ~]# mount
  :
/dev/sdb on /home1 type btrfs (rw,relatime,seclabel,compress=zlib,space_cache,subvolid=5,subvol=/)
/dev/sdc on /home2 type btrfs (rw,relatime,seclabel,compress=lzo,space_cache,subvolid=5,subvol=/)
/dev/sdd on /home3 type btrfs (rw,relatime,seclabel,space_cache,subvolid=5,subvol=/)
[root@btrfs ~]#

ファイルを置く前の状況

[root@btrfs ~]# df -t btrfs
ファイルシス   1K-ブロック  使用  使用可 使用% マウント位置
/dev/sdb           8388608 16704 7532352    1% /home1
/dev/sdc           8388608 16704 7532352    1% /home2
/dev/sdd           8388608 16704 7532352    1% /home3
[root@btrfs ~]#

各/homeにAERSの四半期データ(総量 6.21 GB, data.tar)をコピーしてみた

[root@btrfs ~]# df -t btrfs
ファイルシス   1K-ブロック    使用  使用可 使用% マウント位置
/dev/sdb           8388608 6519080 1043256   87% /home1
/dev/sdc           8388608 5580424 1984216   74% /home2
/dev/sdd           8388608 6549240 1012776   87% /home3
[root@btrfs ~]#

すると zlib を適用している /home1 が無圧縮(/home3)とほぼ変わらない値になった。lzoの/home2は多少圧縮が効いた様である。
一枚のファイル(data.tar)でほぼディスクを埋めるような場合は圧縮が失敗するのだろうか。。

そこで強制的に圧縮を行わせるオプションに変更して

[root@btrfs ~]# umount /home1 /home2
[root@btrfs ~]# mount -t btrfs -o compress-force=zlib /dev/sdb /home1
[root@btrfs ~]# mount -t btrfs -o compress-force=lzo /dev/sdc /home2
[root@btrfs ~]# mount
  :
/dev/sdb on /home1 type btrfs (rw,relatime,seclabel,compress-force=zlib,space_cache,subvolid=5,subvol=/)
/dev/sdc on /home2 type btrfs (rw,relatime,seclabel,compress-force=lzo,space_cache,subvolid=5,subvol=/)
/dev/sdd on /home3 type btrfs (rw,relatime,seclabel,space_cache,subvolid=5,subvol=/)

再度data.tarをコピーしてみた

[root@btrfs ~]# df -t btrfs
ファイルシス   1K-ブロック    使用  使用可 使用% マウント位置
/dev/sdb           8388608 1756636 5812164   24% /home1
/dev/sdc           8388608 2772060 4798404   37% /home2
/dev/sdd           8388608 6549240 1012776   87% /home3
[root@btrfs ~]#

zlibも圧縮が効いた様である。
lzoもオプション変更でより圧縮が効いた様であるが、1枚のファイルに対する圧縮率が状況によって変化するのか?

留意 一応、compress=zlib/lzoのままで手動で圧縮を掛けることはできるみたいだが、、

[root@btrfs ~]# btrfs filesystem defragment -r -v -czlib /home1

としても変化なかった

透過的圧縮(小さめなファイルにて)

8GBのHDDに対して6GBの1枚ファイルを置くのではなく、data.tarを展開して配置してみた(ファイル数: 2073; ディレクトリ数:84 )圧縮オプションは、「compress」を使います

/dev/sdb on /home1 type btrfs (rw,relatime,seclabel,compress=zlib,space_cache,subvolid=5,subvol=/)
/dev/sdc on /home2 type btrfs (rw,relatime,seclabel,compress=lzo,space_cache,subvolid=5,subvol=/)
/dev/sdd on /home3 type btrfs (rw,relatime,seclabel,space_cache,subvolid=5,subvol=/)

その結果、

[root@btrfs ~]# df -t btrfs
ファイルシス   1K-ブロック    使用  使用可 使用% マウント位置
/dev/sdb           8388608 2353108 5220012   32% /home1
/dev/sdc           8388608 2776352 4799360   37% /home2
/dev/sdd           8388608 6549240 1012776   87% /home3
[root@btrfs ~]#

といけた。これはテキストファイルだけだけど、半分以上に圧縮されるみたい。

透過的圧縮(MRCファイルで)

mrcファイル200枚(6.25GB)をそれぞれに移してみた
「compress」

[root@btrfs ~]# df -t btrfs
ファイルシス   1K-ブロック    使用  使用可 使用% マウント位置
/dev/sdb           8388608 4550376 3024568   61% /home1
/dev/sdc           8388608 6589984  976416   88% /home2
/dev/sdd           8388608 6586144  976416   88% /home3
[root@btrfs ~]#

「compress-force」なら

[root@btrfs ~]# df -t btrfs
ファイルシス   1K-ブロック    使用  使用可 使用% マウント位置
/dev/sdb           8388608 4550408 3024568   61% /home1
/dev/sdc           8388608 6590112  976416   88% /home2
/dev/sdd           8388608 6586144  976416   88% /home3
[root@btrfs ~]#

となった。compressの規定である zlib が最良であった

(めも)ファイル削除

btrfsでファイル削除を行って df コマンドを叩くと、減ってないように見えるときがある。
どうやら瞬時には反映されないようで多少待ちます。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-02-04 (土) 16:48:32 (167d)