Кентавр/Btrfs/Вторая Попытка

Материал из ALT Linux Wiki

зачем btrfs

 Жили замечательно на md-raid, снапшотов <skiped> захотелось... Да и комресии для всяких
 /usr и /home/src.... (выразано цензурой).

Было

 /md0 - /boot
 /md2 - /

Нужные пакеты

Для p6: kernel-image-el-uek-2.6.39.100.5.1-alt1

Для Sisyphus можно собрать kernel-image-el-uek-2.6.39.100.5.1-alt1, а можно не заморачиваться и пробовать ветки 3.4 и даже 3.5

btrfs-progs можно взять тот что есть (он везде бородатого года) но более правильно повесить багу на его обновление до 0.19-26 из исходников oracle.

Бинарные сборки и исходники как-есть (Для p6 и Sisyphus (2012-08-23)): тут.

Выделим место для перезда

 # mdadm /dev/md2 --fail /dev/sdb3
 # mdadm /dev/md2 --remove /dev/sdb3
 
 С помощью fdisk меняем тип раздела 3 на sdb с 0xFD на 0x83.

mkfs

 ] # mkfs -t btrfs -L pool /dev/sdb3
 ] # mkdir /mnt/btrfs /mnt/btrfs-active
 ] # blkid

добавить строки в fstab (UUID берем из blkid):

 UUID=deb3c552-be00-4102-9912-xxxxxxxxxxxx /mnt/btrfs              btrfs  defaults,noatime,discard 0 0
 UUID=deb3c552-be00-4102-9912-xxxxxxxxxxxx /mnt/btrfs-active       btrfs defaults,discard,noatime,subvol=_active     0 0
 UUID=deb3c552-be00-4102-9912-xxxxxxxxxxxx /mnt/btrfs-active/usr   btrfs defaults,compress=lzo,discard,noatime,subvol=_active/usr 0 0
 ] # mount /mnt/btrfs
 ] # cd /mnt/btrfs 
 ] # mkdir _snapshot
 ] # btrfs subvolume create _active
 ] # btrfs subvolume create _active/usr
 ] # btrfs subvolume create _active/var
 ] # btrfs subvolume create _active/home
 ] # mount -a -t btrfs

можно переходить к переносу данных с помощью rsync, tar, cpio....

rsync

 ] # rsync -avhHPS --exclude={boot,dev,sys,proc,mnt,tmp,media,var/resolv,var/lib/mysql,var/spool,var/lib} / .
 ] # rsync -avhPS --exclude={tmp} /var/ /mnt/btrfs-active/var/
 ] # mkdir var/tmp dev sys proc mnt tmp media boot
 ] # /etc/init.d/udevd umount
 ] # umount /dev/pts
 ] # rsync -PavH /dev/ /mnt/btrfs-active/dev/
 ] # /etc/init.d/udevd start ; mount /dev/pts

chroot

 ] # cd /mnt/btrfs-avtive 
 btrfs-active]# mount -o bind /boot boot
 btrfs-active]# mount -o bind /proc proc
 btrfs-active]# mount -o bind /sys sys
 btrfs-active]# mount -o bind /dev dev
 btrfs-active]# cdroot . /bin/bash
 
 Скопировать ядро и initrd для того чтобы можно было взлететь на старой системе
 /] # cd /boot
 boot]# cp vmlinuz-2.6.39.100.5.1-el-uek-alt1 vmlinuz-2.6.39.100.5.1-el-uek-alt1-old
 boot]# cp config-2.6.39.100.5.1-el-uek-alt1 config-2.6.39.100.5.1-el-uek-alt1-old
 
 # /etc ; rm -f mtab ; egrep '(btrfs|boot)' /proc/mounts > mtab
 
 Правим fstab:
 UUID=deb3c552-be00-4102-9912-xxxxxxxxxxxx /       btrfs defaults,discard,noatime,subvol=_active     0 0
 UUID=deb3c552-be00-4102-9912-xxxxxxxxxxxx /usr    btrfs defaults,compress=lzo,discard,noatime,subvol=_active/usr 0 0
 UUID=deb3c552-be00-4102-9912-xxxxxxxxxxxx /btrfs  btrfs  defaults,noatime,discard 0 0
 При этом не забываем комментировать лишние строки... 
 
 initrd:
 
 # make-initrd
 
 /etc/sysconfig/grub2:
 в переменной GRUB_CMDLINE_LINUX_DEFAULT добавить "fastboot rootflags=subvol=_active" 
 
 # grub-mkconfig -o /boot/grub/grub.cfg
 # vim /boot/grub/grub.cfg
 
 Ищем "linux   /vmlinuz-2.6.39.100.5.1-el-uek-alt1-old root=" и правим root=/dev/sdb3 на старый root.
 Удаляем "fastboot rootflags=subvol=_active". Это нужно только для того чтобы иметь возможность загрузить
 старую ОС если были допущены ошибки. 
 

Покидаем chroot

 # exit
 # reboot

=== after reboot

пришибить остатки рейда и сказать:

 # btrfs device add /dev/sda3 /
 # btrfs filesystem balance /
 

Для тех у кого btrfs-progs от oracle:

   # btrfs scrub start

По завершению scrub можно:

 # btrfs filesystem defragment /

О балансировке с данными в raid1 и не только

- в kernel-image-el-uek нету.

std-def 3.5 из сизфа, проверено работает:

 # btrfs dev  balance start -dconvert=raid1 /btrfs

проверяем:

 # btrfs  fi df /btrfs/
 Data, RAID1: total=52.00GB, used=40.87GB
 System, RAID1: total=32.00MB, used=16.00KB
 System, DUP: total=32.00MB, used=0.00
 System: total=4.00MB, used=0.00
 Metadata, RAID1: total=10.00GB, used=324.06MB

http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg14365.html https://btrfs.wiki.kernel.org/index.php/Balance_Filters

Замена диска

Добавляем новый диск к файловой системе

 btrfs device add /dev/sdY /btrfs

Удаляем из файловой системы старый диск

 btrfs device del /dev/sdX /btrfs

Смотрим во второй консоли:

 watch btrfs filesystem show


Как разобрать RAID1

Q: Зачем

A: Нада, сказал главный ёжик (с портала ёжиков)


 # mount -o remount,degraded /
 # mount -o remount,degraded /btrfs
 # mount -o remount,degraded /usr
 # btrfs bal start -dconvert=single /btrfs
 # btrfs bal start -mconvert=single --force /btrfs
 # btrfs dev remove /dev/${partition} /btrfs
 
 типа того, летим на btrfs без массива :)

Ограничение размера subvolume

- Судя по history http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git будет из коробки в 3.6.

- btrfs-progs тоже нужно будут патчить.

Полезно почитать

http://www.seedsofgenius.net/uncategorized/zfs-vs-btrfs-a-reference

https://btrfs.wiki.kernel.org/index.php/Mount_options

https://wiki.archlinux.org/index.php/Installing_on_Btrfs_root

http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg14365.html