BTRFS, FileSystem pour Linux par Oracle, et Ubuntu Hardy-Heron

BTRFS sans doute un des « next big things » de Linux. Le système de fichiers développé initialement par Chris Mason (cf podcast) d’Oracle (http://oss.oracle.com/projects/btrfs) est maintenant Mainline dans le noyau Linux et sera disponible à partir de 2.6.29, encore RC2 aujourd’hui. Il fait déjà des petits puisque Coherent Remote FileSystem s’appuie sur BTRFS. Pour tout savoir, connectez-vous sur le site associé : http://btrfs.wiki.kernel.org.

Parmi ces nombreuses fonctionnalités, les snapshots permettent de créer différentes versions du même systèmes de fichiers, en lecture ET écriture; Si vous connaissez les technologies de Netapp, ces snapshots sont un peu comme autant de FlexClone, sur un système de fichier Open-Source. En substance: « BTRFS rocks! »

Il reste sans doute encore du chemin pour que BTRFS remplace EXT3 ou EXT4. C’est d’autant plus vrai que EXT4 est tout juste stable depuis 2.6.28 qui ne sera disponible qu’avec Ubuntu Jaunty Jackalope… Enfin, si vous voulez un avant goût de BTRFS, vous pouvez l’installer sur les versions précédentes, comme Hardy-Heron ; voici comment!

1. Installer BTRFS

Note:
Les versions au delà de 0.16 ne sont pas, pour l’instant, utilisables avec les noyaux autre que 2.6.29.

Installer BTRFS est plutôt simple d’autant que le noyau de Hardy Heron est normalement compilé avec CONFIG_LIBCRC32C=m. Pour commencer, installer uuid-dev comme ci-dessous:

apt-get install uuid-dev

Ensuite téléchargez BTRFS à l’URL qui suit, compilez-le et installez le btrfs.ko comme ci-dessous:

mkdir btrfs
cd btrfs

wget http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/btrfs-0.16.tar.bz2
tar -jxvf btrfs-0.16.tar.bz2
cd btrfs-0.16
make
sudo make modules_install

Vous pouvez le charger avec les modules du noyau:

modprobe libcrc32c
modprobe zlib_deflate
insmod btrfs.ko

lsmod |grep btrfs

Ensuite, installez les outils nécessaires pour utiliser BTRFS :

wget http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/btrfs-progs-0.16.tar.gz
tar -jxvf btrfs-progs-0.16.tar.gz
btrfs-progs-0.16
make
sudo make install

2. Créer un système de fichiers

Si vous n’avez pas de volumes pour créer un système de fichiers btrfs, vous pouvez créer un fichier et le monter sur un device comme loop0 avec losetup :

cd /
mkdir /disks
cd /disks
dd if=/dev/zero of=/disks/disk.btrfs bs=1024k count=512

losetup /dev/loop0 /disks/disk.btrfs
losetup -a

Une fois que vous avez un device, vous pouvez le formater pour btrfs et monter le système de fichier comme ci-dessous; Cette première section permet d’effacer le volume si vous vous en êtes déjà servi:

cd /
umount /btrfs
dd if=/dev/zero of=/dev/loop0 bs=1024k count=512

Pour formater le système de fichier et le monter, voici les commandes à utiliser:

mkfs -t btrfs /dev/loop0

mkdir /btrfs
mount -t btrfs -o compress,subvol=. /dev/loop0 /btrfs

df -h

Vous noterez que dans le cas de BTRFS, les snapshots sont publiés sous le forme de sous-volumes; l’option subvol=. indique donc de monter tous les snapshots sur le même point de montage. On peut également choisir de monter les snapshots séparément.

3. Illustrer l’utilisation des snapshots

Le snapshot default est le sous-volume par défaut; une fois le volume monté, vous pouvez écrire dans ce sous-volume:

cd /btrfs

find
.
./default

echo 1 > default/1

find
.
./default
./default/1

Vous pouvez créer un premier snapshot sur le sous-volume par défaut; vous constaterez que le snapshot est accessible en lecture et écriture:

btrfsctl -s snap1 /btrfs/default

find
.
./default
./default/1
./snap1
./snap1/1

echo 2 > default/2

echo 3 > snap1/3

find
.
./default
./default/1
./default/2
./snap1
./snap1/1
./snap1/3

Vous pouvez également créer un snapshot à partir d’un autre snapshot comme ci-dessous:

btrfsctl -s snap2 /btrfs/snap1

find
.
./default
./default/1
./default/2
./snap1
./snap1/1
./snap1/3
./snap2
./snap2/1
./snap2/3

rm default/1

echo 4 > snap2/4

find
.
./snap2
./snap2/1
./snap2/3
./snap2/4
./default
./default/2
./snap1
./snap1/1
./snap1/3

Je vous laisse imaginer ce qu’on peut faire avec ce genre de fonctionnalités et une base de données. Et imaginez que vous puissiez y accéder par un réseau; depuis des machines virtuelles. Et si (quand ?) BTRFS était plus performant que les systèmes de fichiers actuels?

5 réflexions sur “BTRFS, FileSystem pour Linux par Oracle, et Ubuntu Hardy-Heron”

  1. En fait, je ne l’avais pas encore fait! C’est corrigé maintenant!

    Ma compréhension, c’est que tant que ZFS est sous CDDL, il ne pourra jamais être Mainline. En plus, pour l’instant ZFS est porté avec Fuse, i.e dans la stack user.

    C’est la raison pour laquelle, même si Btrfs est encore loin, il présenté comme l’alternative à ZFS sur Linux. Il devrait donc être le filesystem de Linux plus que ZFS.

    Pour ce qui est du test:
    a) L’install sur Ubuntu Hardy Heron est expliquée ici

    b) Ensuite pour créer le Filesystem:
    zfs-fuse
    zpool create greg /dev/loop0
    zpool list
    zfs create greg/nyfs
    zfs snapshot greg/nyfs@snap0
    zfs clone snap0 greg/snap0

    root@arkzoyd-laptop:/greg/nyfs# df -h /greg/*
    Filesystem Size Used Avail Use% Mounted on
    greg/nyfs 472M 18K 472M 1% /greg/nyfs
    greg/snap0 472M 18K 472M 1% /greg/snap0

  2. Salut Grégory,

    As tu deja fait quelques essais avec ZFS sur linux ?

    ++
    -phil-

  3. # btrfsck /dev/loop0
    found 28672 bytes used err is 0
    total csum bytes: 0
    total tree bytes: 28672
    btree space waste bytes: 23833
    file data blocks allocated: 0
    referenced 0
    Btrfs Btrfs v0.18

  4. Vous pouvez aussi compiler le noyau 2.6.29-rc2 avec BTRFS comme décrit ici ! N’oubliez pas de sélectionner BTRFS dans la liste des systèmes de fichiers.

Les commentaires sont fermés.