せいさくちゅう

btrfsの本家様 https://btrfs.readthedocs.io/en/latest/ 旧サイト https://btrfs.wiki.kernel.org/index.php/Main_Page

透過的ファイル圧縮やスナップショット機能を有するファイルシステム. zfsみたいにストレージプールから切り出してファイルシステムにすることができる.
LVMでも同様だけどファイルシステム自体で行うことが違いかな. LVMはその上にファイルシステムを作る事になりますからね

ここでは RockyLinux 9 btrfsのボリューム作成、透過的圧縮について記す

RockyLinuxで btrfs

CentOS7の場合は追加パッケージで使えてたのですが、RockyLinux9ではパッケージが提供されていないです.
なのでカーネルから調整するとかになる. ここでは ELRepo リポジトリで提供している OS のパッケージを入れて btrfs 対応にしてみたいと思います

[root@rockylinux9 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@rockylinux9 ~]# dnf install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm -y
 
[root@rockylinux9 ~]# dnf --enablerepo=elrepo-kernel install kernel-ml kernel-ml-core kernel-ml-devel kernel-ml-devel-matched kernel-ml-modules kernel-ml-modules-extra kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel -y
[root@rockylinux9 ~]# reboot

これでOSのupdateは完了

次にbtrfsの関連コマンドを入れます. こちらはコンパイルですね.

[root@rockylinux9 ~]# git clone https://github.com/kdave/btrfs-progs
 
[root@rockylinux9 ~]# dnf --enablerepo=crb,devel install python3-sphinx e2fsprogs-devel libblkid-devel uuid-devel libuuid-devel libgudev-devel python3-devel lzo-devel libaio-devel liburing-devel
[root@rockylinux9 ~]# cd btrfs-progs
 
[root@rockylinux9 btrfs-progs]# ./autogen.sh
 
Generate build-system by:
   aclocal:    aclocal (GNU automake) 1.16.2
   autoconf:   autoconf (GNU Autoconf) 2.69
   autoheader: autoheader (GNU Autoconf) 2.69
   automake:   automake (GNU automake) 1.16.2
 
Now type './configure' and 'make' to compile.
 
[root@rockylinux9 btrfs-progs]# 
[root@rockylinux9 btrfs-progs]# ./configure
 :
 :
        btrfs-progs:        v6.5.2
        libbtrfs:           0.1.2 (deprecated)
        libbtrfsutil:       1.2.0
 
        prefix:             /usr/local
        exec prefix:        ${prefix}
 
        bindir:             ${exec_prefix}/bin
        libdir:             ${exec_prefix}/lib
        includedir:         ${prefix}/include
        pkgconfigdir:       ${libdir}/pkgconfig
 
        compiler:           gcc
        CFLAGS:             -g -O1 -Wall -D_FORTIFY_SOURCE=2
        LDFLAGS:
 
        programs:           yes
        shared libraries:   yes
        static libraries:   yes
        documentation:      yes
        doc generator:      sphinx
        backtrace support:  yes
        btrfs-convert:      yes (ext2)
        zstd support:       yes
        lzo support:        yes
        fsverity support:   yes
        Python bindings:    yes
        Python interpreter: /usr/bin/python
        crypto provider:    builtin
        libudev:            yes
        zoned device:       yes
 
        Type 'make' to compile.
 
[root@rockylinux9 btrfs-progs]# make; make test; make install

mkfs.btrfs

可能ならばOSのsystem領域から btrfs にしてみたいが、ここらはディストリビューター側で用意されるか否かになる. RockyLinuxは未対応.
なので追加したストレージデバイスに対して btrfs でフォーマットしてみる

[root@rockylinux9 ~]# cat /etc/redhat-release
Rocky Linux release 9.2 (Blue Onyx)
 
[root@rockylinux9 ~]# cat /proc/version
Linux version 6.5.5-1.el9.elrepo.x86_64 (mockbuild@391cbd5c70a749809f5fdc4e883d88ef) (gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4), GNU ld version 2.35.2-37.el9) #1 SMP PREEMPT_DYNAMIC Sat Sep 23 12:43:41 EDT 2023
 
[root@rockylinux9 ~]# cat /proc/partitions
major minor  #blocks  name
 
   8        0  167772160 sda
   8        1      51200 sda1
   8        2    2097152 sda2
   8        3     524288 sda3
   8        4  165097472 sda4
   8       16   33554432 sdb
   8       32   67108864 sdc
  11        0    9234624 sr0
[root@rockylinux9 ~]#

使うコマンドは mkfs.btrfs です. デバイスのパーティションを切るかどうかですが、分けないのでそのまま使います. ここでは2つの領域(/dev/sdbと/dev/sdc)に対して行います

[root@rockylinux9 ~]# mkfs.btrfs /dev/sdb                                       [root@rockylinux9 ~]# mkfs.btrfs /dev/sdc
btrfs-progs v6.5.2                                                              btrfs-progs v6.5.2
See https://btrfs.readthedocs.io for more information.                          See https://btrfs.readthedocs.io for more information.
                                                                                
NOTE: several default settings have changed in version 5.15, please make sure   NOTE: several default settings have changed in version 5.15, please make sure
      this does not affect your deployments:                                          this does not affect your deployments:
      - DUP for metadata (-m dup)                                                     - DUP for metadata (-m dup)
      - enabled no-holes (-O no-holes)                                                - enabled no-holes (-O no-holes)
      - enabled free-space-tree (-R free-space-tree)                                  - enabled free-space-tree (-R free-space-tree)
                                                                                
Label:              (null)                                                      Label:              (null)
UUID:               cc0a221b-f8bf-4b28-83dc-bc4d150744f3                        UUID:               76136264-670c-45da-a597-3cb6bcdd7286
Node size:          16384                                                       Node size:          16384
Sector size:        4096                                                        Sector size:        4096
Filesystem size:    64.00GiB                                                    Filesystem size:    32.00GiB
Block group profiles:                                                           Block group profiles:
  Data:             single            8.00MiB                                     Data:             single            8.00MiB
  Metadata:         DUP               1.00GiB                                     Metadata:         DUP             256.00MiB
  System:           DUP               8.00MiB                                     System:           DUP               8.00MiB
SSD detected:       yes                                                         SSD detected:       yes
Zoned device:       no                                                          Zoned device:       no
Incompat features:  extref, skinny-metadata, no-holes, free-space-tree          Incompat features:  extref, skinny-metadata, no-holes, free-space-tree
Runtime features:   free-space-tree                                             Runtime features:   free-space-tree
Checksum:           crc32c                                                      Checksum:           crc32c
Number of devices:  1                                                           Number of devices:  1
Devices:                                                                        Devices:
   ID        SIZE  PATH                                                            ID        SIZE  PATH
    1    64.00GiB  /dev/sdb                                                         1    32.00GiB  /dev/sdc
                                                                                
[root@rockylinux9 ~]#                                                           [root@rockylinux9 ~]#

UUIDは「btrfs filesystem show /dev/sdb」とかでも表示される
ストレージのサイズの違いで、「Metadata」のサイズが異なるようです.

LABEL

ext4なら e2label、xfsなら xfs_admin で設けられるが、btrfsの場合は「btrfs」コマンドで設けれる. /etc/fstabに記載方法としてUUIDもいいがそのデバイスが何であるかと明示した方がいいのでLABELを使ってます

[root@rockylinux9 ~]# btrfs filesystem label /dev/sdb cryo
 
[root@rockylinux9 ~]# btrfs filesystem show
Label: 'cryo'  uuid: cc0a221b-f8bf-4b28-83dc-bc4d150744f3
        Total devices 1 FS bytes used 144.00KiB
        devid    1 size 64.00GiB used 2.02GiB path /dev/sdb
 
Label: none  uuid: 76136264-670c-45da-a597-3cb6bcdd7286
        Total devices 1 FS bytes used 144.00KiB
        devid    1 size 32.00GiB used 536.00MiB path /dev/sdc
 
[root@rockylinux9 ~]#

mount

mkfs.btrfsでフォーマットしたHDDをシステムにマウントします。
透過的圧縮を使うなら「-o compress=」を使います. 圧縮アルゴリズムが複数あって zstd がいいみたい. 付随する数値は圧縮レベルです. 数値が高いと圧縮を強めようとしますが、CPU時間をより消費します
参照先: https://btrfs.readthedocs.io/en/latest/Compression.html

[root@rockylinux9 ~]# mkdir /cryo
 
[root@rockylinux9 ~]# mount -t btrfs -o compress=zstd:3 /dev/sdb   /cryo
(あるいは)
[root@rockylinux9 ~]# mount -t btrfs -o compress=zstd:3 LABEL=cryo /cryo
 
[root@rockylinux9 ~]# mount |grep "/dev/sdb"
/dev/sdb on /cryo type btrfs (rw,relatime,seclabel,compress=zstd:3,ssd,space_cache=v2,subvolid=5,subvol=/)
[root@rockylinux9 ~]#

サブボリューム

後述のスナップショットを作成する際に便利かな
/cryoの中に raw と progress のディレクトリを生やします. マウントポイント(/cryo)を含んで指定します.

[root@rockylinux9 ~]# btrfs subvolume create /cryo/raw
Create subvolume '/cryo/raw'
 
[root@rockylinux9 ~]# btrfs subvolume create /cryo/progress
Create subvolume '/cryo/progress'
 
[root@rockylinux9 ~]# df -t btrfs
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sdb        33554432  5952  33012736   1% /cryo
 
[root@rockylinux9 ~]# ls -l /cryo/
total 0
drwxr-xr-x. 1 root root 0 Oct  5 10:18 progress
drwxr-xr-x. 1 root root 0 Oct  5 10:18 raw
 
[root@rockylinux9 ~]# btrfs subvolume list /cryo -t
ID      gen     top level       path
--      ---     ---------       ----
257     17      5               raw
258     17      5               progress
[root@rockylinux9 ~]#

削除はdeleteを交えて行う. 削除対象のsubvolumeにデータがあっても即座に削除されるので注意. 警告なし

[root@rockylinux9 ~]# btrfs subvolume create /cryo/sample
Create subvolume '/cryo/sample'
[root@rockylinux9 ~]# btrfs subvolume delete /cryo/sample
Delete subvolume (no-commit): '/cryo/sample'
[root@rockylinux9 ~]#

スナップショット

前段のサブボリュームは単にmkdirでフォルダを作っているように見えるが、スナップショットの作成においてはそこが起点となる.

[root@rockylinux9 ~]# echo abc > /cryo/progress/proteinA
 
[root@rockylinux9 ~]# btrfs subvolume snapshot /cryo/progress /cryo/progress/@GMT-`TZ=GMT date +%Y.%m.%d-%H.%M.%S`
Create a snapshot of '/cryo/progress' in '/cryo/progress/@GMT-2023.10.05-01.34.07'
 
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# echo def >> /cryo/progress/proteinA

そうしてproteinAの中身をチェック

[root@rockylinux9 ~]# cat /cryo/progress/proteinA
abc
def
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# cat /cryo/progress/@GMT-2023.10.05-01.34.07/proteinA
abc
[root@rockylinux9 ~]#

スナップショットの削除

[root@rockylinux9 ~]# btrfs subvolume delete /cryo/progress/@GMT-2023.10.05-01.34.07/
Delete subvolume (no-commit): '/cryo/progress/@GMT-2023.10.05-01.34.07'
[root@rockylinux9 ~]#

このスナップショットとsambaのshadow_copy機能を組み合わせると「以前のバージョン」が使えます samba/btrfs

最新の60件
2024-09-16 2024-09-14 2024-09-12 2024-09-09 2024-09-08 2024-09-06 2024-09-05 2024-09-04 2024-09-02 2024-09-01 2024-08-31 2024-08-28 2024-08-21 2024-08-18 2024-08-17 2024-08-16 2024-08-15 2024-08-14 2024-08-11 2024-08-09 2024-08-01 2024-07-27 2024-07-26 2024-07-16 2024-07-15 2024-07-12 2024-07-07 2024-06-22 2024-06-21 2024-06-17 2024-06-14 2024-06-11 2024-06-10 2024-06-08 2024-06-07 2024-06-02 2024-06-01 2024-05-30 2024-05-16 2024-04-26 2024-04-15 2024-04-11

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-10-15 (日) 00:03:19