Кентавр/Btrfs/Вторая Попытка
зачем 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 sh failed to read /dev/sr0 Label: 'pool' uuid: e4ec3a31-5726-4f78-b324-5881fd22af40 Total devices 2 FS bytes used 41.19GB devid 1 size 232.31GB used 62.04GB path /dev/sdb6
devid 2 size 232.31GB used 62.09GB path /dev/sda6
http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg14365.html
Замена диска
Добавляем новый диск к файловой системе
btrfs device add /dev/sdY /btrfs
Удаляем из файловой системы старый диск
btrfs device del /dev/sdX /btrfs
Смотрим во второй консоли:
watch btrfs filesystem show
Ограничение размера 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