2016年3月10日木曜日

CentOS 7 で Btrfs のシングル構成を raid1 に変換

CentOS 7 で Btrfs のシングル構成で利用していた領域を、raid1 に変換しました。
その際、スペースに余裕があるように見えるのに ENOSPC になったので、メモです。

もともと sdb5 のみのシングル構成で、CentOS 7.2 の OS インストール領域として使っていました。これに、sda5 を add しました。
[root@hoge ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@hoge ~]# uname -a
Linux hoge 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@hoge ~]# btrfs device add /dev/sda5 /    ※もともとsdb5のシングルだった
[root@hoge ~]# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sdb5         40G  8.0G   31G   21% /
devtmpfs         7.9G     0  7.9G    0% /dev
tmpfs            7.9G  220K  7.9G    1% /dev/shm
tmpfs            7.9G  9.1M  7.9G    1% /run
tmpfs            7.9G     0  7.9G    0% /sys/fs/cgroup
tmpfs            1.6G  8.0K  1.6G    1% /run/user/0
[root@hoge ~]# btrfs fi show -m
Label: none  uuid: 73fd9fe0-6681-4389-abe5-05b7db9d5fe8
 Total devices 2 FS bytes used 7.79GiB
 devid    1 size 19.53GiB used 19.53GiB path /dev/sdb5
 devid    2 size 19.53GiB used 0.00B path /dev/sda5

btrfs-progs v3.19.1
次に、raid1 への変換を試みましたが、失敗。
[root@hoge ~]# btrfs device usage /
/dev/sda5, ID: 2
   Device size:            19.53GiB
   Unallocated:            19.53GiB

/dev/sdb5, ID: 1
   Device size:            19.53GiB
   Data,single:            18.74GiB
   Metadata,single:       776.00MiB
   System,single:          32.00MiB
   Unallocated:             1.00MiB

[root@hoge ~]# btrfs fi df /
Data, single: total=18.74GiB, used=7.42GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=776.00MiB, used=374.86MiB
GlobalReserve, single: total=128.00MiB, used=0.00B
[root@hoge ~]# btrfs balance start -dconvert=raid1 -mconvert=raid1 /
ERROR: error during balancing '/' - No space left on device
There may be more info in syslog - try dmesg | tail
[root@hoge ~]# dmesg | tail
[   30.408740] Bluetooth: RFCOMM TTY layer initialized
[   30.408752] Bluetooth: RFCOMM socket layer initialized
[   30.408817] Bluetooth: RFCOMM ver 1.11
[   54.279442] EXT4-fs (sda5): mounting ext3 file system using the ext4 subsystem
[   54.280985] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null)
[   54.281113] SELinux: initialized (dev sda5, type ext3), uses xattr
[  461.381125] SELinux: initialized (dev tmpfs, type tmpfs), uses transition SIDs
[  529.804577] SELinux: initialized (dev tmpfs, type tmpfs), uses transition SIDs
[ 1076.279348] BTRFS info (device sdb5): disk added /dev/sda5
[ 1720.107266] BTRFS info (device sdb5): 26 enospc errors during balance
たぶん、いったんは、このままリバランス(sdb5 のデータの半分を sda5 へ転送)してから、再実行すれば、上手くいくものと推察し、やってみたら案の定うまくいきました。
[root@hoge ~]# btrfs balance start /
Done, had to relocate 26 out of 26 chunks
[root@hoge ~]# btrfs balance start -dconvert=raid1 -mconvert=raid1 /
Done, had to relocate 12 out of 12 chunks
[root@hoge ~]# btrfs device usage /
/dev/sda5, ID: 2
   Device size:            19.53GiB
   Data,RAID1:              8.00GiB
   Metadata,RAID1:        768.00MiB
   System,RAID1:           32.00MiB
   Unallocated:            10.75GiB

/dev/sdb5, ID: 1
   Device size:            19.53GiB
   Data,RAID1:              8.00GiB
   Metadata,RAID1:        768.00MiB
   System,RAID1:           32.00MiB
   Unallocated:            10.75GiB

[root@hoge ~]#
コーナーケースでしょうけれど、このあたりがレッドハットが未だに Btrfs を Technology Preview 扱いにしている理由かもしれませんね。
人気ブログランキングへ にほんブログ村 IT技術ブログへ