raid:/# uname -a
Linux raid 2.6.26-1-amd64 #1 SMP Thu Oct 9 14:16:53 UTC 2008 x86_64 GNU/Linux

raid:/# cat /proc/partitions
major minor  #blocks  name

   8     0    4194304 sda
   8     1    3951958 sda1
   8     2          1 sda2
   8     5     240943 sda5
   8    16    2097152 sdb
   8    17     489951 sdb1
   8    18     489982 sdb2
   8    19     489982 sdb3
   8    20     626535 sdb4

Le disque sdb de 2Go va servir aux tests. chacune des partitions disposera d'un système de fichiers différent.

raid:/# apt-get install linux-headers-2.6.26-1-amd64




EXT4DEV

A noter que sur le noyau 2.6.28-rc3 que j'ai compilé sur cette même machine EXT4DEV devient EXT4: signe de
maturation ?
Par contre je n'ai pu installer btrfs en 2.6.28, me prenant systématiquement une erreur de type implicit_declaration
lors de la compil. On verra plus tard :)

Pour ext4dev c'est en natif dans le noyau debian donc pas besoin de se casser la tête:

raid:/# mkfs.ext4dev /dev/sdb1
mke2fs 1.41.2 (02-Oct-2008)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=1024 (log=0)
Taille de fragment=1024 (log=0)
122880 i-noeuds, 489948 blocs
24497 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=1
Nombre maximum de blocs du système de fichiers=67633152
60 groupes de blocs
8192 blocs par groupe, 8192 fragments par groupe
2048 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
    8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Écriture des tables d'i-noeuds : complété                        
Création du journal (8192 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Le système de fichiers sera automatiquement vérifié tous les 21 montages ou
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
pour écraser la valeur.

raid:/# tune2fs -l /dev/sdb1 | grep features
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize

Comparé à de l'ext3 :

raid:/# tune2fs -l /dev/sda1 | grep features
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file





XFS

raid:/# mkfs.xfs /dev/sdb3
meta-data=/dev/sdb3              isize=256    agcount=4, agsize=30624 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=122495, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096  
log      =internal log           bsize=4096   blocks=1200, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=0
realtime =none                   extsz=4096   blocks=0, rtextents=0






REISERFS

raid:/# mkfs.reiserfs /dev/sdb4
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
BigStorage  (www.bigstorage.com)  contributes to our general fund  every month,
and has done so for quite a long time.

Alexander Zarochentcev  (zam)  wrote the high low priority locking code, online
resizer for V3 and V4, online repacker for V4, block allocation code, and major
parts of  the flush code,  and maintains the transaction manager code.  We give
him the stuff  that we know will be hard to debug,  or needs to be very cleanly
structured.


Guessing about desired format.. Kernel 2.6.26-1-amd64 is running.
Format 3.6 with standard journal
Count of blocks on the device: 156624
Number of blocks consumed by mkreiserfs formatting process: 8216
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: b9683bc4-ac6a-46a5-a88a-fa03df0d8081
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
    ALL DATA WILL BE LOST ON '/dev/sdb4'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/sdb4.


raid:/# reiserfstune /dev/sdb4
reiserfstune: Journal device has not been specified. Assuming journal is on the main device (/dev/sdb4).

Current parameters:

Filesystem state: consistent

Reiserfs super block in block 16 on 0x814 of format 3.6 with standard journal
Count of blocks on the device: 156624
Number of bitmaps: 5
Blocksize: 4096
Free blocks (count of blocks - used [journal, bitmaps, data, reserved] blocks): 148408
Root block: 8211
Filesystem is clean
Tree height: 2
Hash function used to sort names: "r5"
Objectid map size 2, max 972
Journal parameters:
    Device [0x0]
    Magic [0x19440fa8]
    Size 8193 blocks (including 1 for journal header) (first block 18)
    Max transaction length 1024 blocks
    Max batch size 900 blocks
    Max commit age 30
Blocks reserved by journal: 0
Fs state field: 0x0:
sb_version: 2
inode generation number: 0
UUID: b9683bc4-ac6a-46a5-a88a-fa03df0d8081
LABEL:
Set flags in SB:
    ATTRIBUTES CLEAN




BTRFS  Ah ah là ça devient plus drôle...

raid:/usr/src# apt-get install btrfs-tools

raid:/usr/src# dpkg -L btrfs-tools
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/btrfs-tools
/usr/share/doc/btrfs-tools/README.Debian
/usr/share/doc/btrfs-tools/copyright
/usr/share/doc/btrfs-tools/changelog.Debian.gz
/usr/bin
/usr/bin/btrfsck
/usr/bin/btrfsctl
/usr/bin/debug-tree
/usr/bin/btrfs-show
/usr/bin/mkfs.btrfs
/usr/bin/btrfs-vol


Je récupère directement chez l'auteur pour être sûr d'avoir la dernière release:

raid:/usr/src# wget http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/btrfs-0.16.tar.gz

raid:/usr/src# tar zxvf btrfs-0.16.tar.gz

raid:/usr/src/btrfs-0.16# less INSTALL

raid:/usr/src/btrfs-0.16# modprobe libcrc32c


raid:/usr/src/btrfs-0.16# make
make -C /lib/modules/`uname -r`/build M=`pwd` clean
make[1]: entrant dans le répertoire « /usr/src/linux-headers-2.6.26-1-amd64 »
  CLEAN   /usr/src/btrfs-0.16/.tmp_versions
make[1]: quittant le répertoire « /usr/src/linux-headers-2.6.26-1-amd64 »
raid:/usr/src/btrfs-0.16# make
make -C /lib/modules/`uname -r`/build M=`pwd` modules
make[1]: entrant dans le répertoire « /usr/src/linux-headers-2.6.26-1-amd64 »
  CC [M]  /usr/src/btrfs-0.16/super.o
  CC [M]  /usr/src/btrfs-0.16/ctree.o
  CC [M]  /usr/src/btrfs-0.16/extent-tree.o
  CC [M]  /usr/src/btrfs-0.16/print-tree.o
  CC [M]  /usr/src/btrfs-0.16/root-tree.o
  CC [M]  /usr/src/btrfs-0.16/dir-item.o
  CC [M]  /usr/src/btrfs-0.16/hash.o
  CC [M]  /usr/src/btrfs-0.16/file-item.o
  CC [M]  /usr/src/btrfs-0.16/inode-item.o
  CC [M]  /usr/src/btrfs-0.16/inode-map.o
  CC [M]  /usr/src/btrfs-0.16/disk-io.o
  CC [M]  /usr/src/btrfs-0.16/transaction.o
  CC [M]  /usr/src/btrfs-0.16/bit-radix.o
  CC [M]  /usr/src/btrfs-0.16/inode.o
  CC [M]  /usr/src/btrfs-0.16/file.o
  CC [M]  /usr/src/btrfs-0.16/tree-defrag.o
  CC [M]  /usr/src/btrfs-0.16/extent_map.o
  CC [M]  /usr/src/btrfs-0.16/sysfs.o
  CC [M]  /usr/src/btrfs-0.16/struct-funcs.o
  CC [M]  /usr/src/btrfs-0.16/xattr.o
  CC [M]  /usr/src/btrfs-0.16/ordered-data.o
  CC [M]  /usr/src/btrfs-0.16/extent_io.o
  CC [M]  /usr/src/btrfs-0.16/volumes.o
  CC [M]  /usr/src/btrfs-0.16/async-thread.o
  CC [M]  /usr/src/btrfs-0.16/ioctl.o
  CC [M]  /usr/src/btrfs-0.16/locking.o
  CC [M]  /usr/src/btrfs-0.16/orphan.o
  CC [M]  /usr/src/btrfs-0.16/ref-cache.o
  CC [M]  /usr/src/btrfs-0.16/acl.o
  LD [M]  /usr/src/btrfs-0.16/btrfs.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /usr/src/btrfs-0.16/btrfs.mod.o
  LD [M]  /usr/src/btrfs-0.16/btrfs.ko
make[1]: quittant le répertoire « /usr/src/linux-headers-2.6.26-1-amd64 »

raid:/usr/src/btrfs-0.16# make install

raid:/usr/src/btrfs-0.16# depmod -aq

raid:/usr/src/btrfs-0.16# mobprobe btrfs



raid:~# mkfs.btrfs /dev/sdb2
fs created label (null) on /dev/sdb2
    nodesize 4096 leafsize 4096 sectorsize 4096 size 478.50MB
Btrfs Btrfs v0.16

raid:/srv/sdb2# btrfs-show /dev/sdb2
failed to read /dev/hda
failed to read /dev/fd0
Label: none  uuid: 397be875-dc28-405a-91e3-676118abef06
    Total devices 1 FS bytes used 40.00KB
    devid    1 size 478.50MB used 100.00MB path /dev/sdb2

Btrfs Btrfs v0.16

raid:/srv/sdb2# mount -t btrfs /dev/sdb2 /srv/sdb2

raid:/srv/sdb2# df -hTa
Sys. de fich. Type Tail. Occ. Disp. %Occ. Monté sur
/dev/sda1 ext3 3,8G 1,4G 2,2G 40% /
tmpfs tmpfs 124M 0 124M 0% /lib/init/rw
proc proc 0 0 0 - /proc
sysfs sysfs 0 0 0 - /sys
procbususb usbfs 0 0 0 - /proc/bus/usb
udev tmpfs 10M 100K 10M 1% /dev
tmpfs tmpfs 124M 0 124M 0% /dev/shm
devpts devpts 0 0 0 - /dev/pts
/dev/sdb2 btrfs 479M 40K 479M 1% /srv/sdb2
/dev/sdb1 ext4dev 464M 11M 430M 3% /srv/sdb1
/dev/sdb3 xfs 474M 4,2M 470M 1% /srv/sdb3
/dev/sdb4 reiserfs 612M 33M 580M 6% /srv/sdb4

Il est intéressant de constater que la place occupée par les différents fs après un simple formattage varie de façon conséquente.

Je teste rapidement quelques copies de fichiers sur les fs ext4dev, reiserfs et xfs.

raid:/var/cache/apt/archives# cp linux-* /srv/sdb1
raid:/var/cache/apt/archives# cp linux-* /srv/sdb3
raid:/var/cache/apt/archives# cp linux-* /srv/sdb4



Et je monte un subvolume btrfs:

raid:/# mount -t btrfs -o subvol=. /dev/sdb2 /srv/sdb2sub/

raid:/# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sdb2 on /srv/sdb2 type btrfs (rw)
/dev/sdb1 on /srv/sdb1 type ext4dev (rw)
/dev/sdb3 on /srv/sdb3 type xfs (rw)
/dev/sdb4 on /srv/sdb4 type reiserfs (rw)
/dev/sdb2 on /srv/sdb2sub type btrfs (rw,subvol=.)


raid:/# cd /srv/sdb2
raid:/srv/sdb2# dd if=/dev/zero of=./fichier1 bs=1024 count=100
100+0 enregistrements lus
100+0 enregistrements écrits
102400 bytes (102 kB) copied, 0,000715869 s, 143 MB/s

raid:/srv/sdb2# ll
total 111
dr-xr-xr-x 1 root root     16 nov  8 00:31 .
drwxr-xr-x 7 root root   4096 nov  7 23:51 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1

raid:/srv/sdb2# ll ../sdb2sub/
total 5
dr-xr-xr-x 1 root root    0 jan  1  1970 .
drwxr-xr-x 7 root root 4096 nov  7 23:51 ..
dr-xr-xr-x 1 root root   16 nov  8 00:31 default

raid:/srv/sdb2# ll ../sdb2sub/default/
total 107
dr-xr-xr-x 1 root root     16 nov  8 00:31 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1

Le fichier existe dans le subvolume

Je crée ensuite un fichier dans le subvolume cette fois


raid:/srv/sdb2sub# dd if=/dev/zero of=./fichier2 bs=1024 count=100


dd: ouverture de `./fichier2': Permission non accordée

Arf il faut être dans "la racine" du subvolume

raid:/srv/sdb2sub# ll
total 5
dr-xr-xr-x 1 root root    0 jan  1  1970 .
drwxr-xr-x 7 root root 4096 nov  7 23:51 ..
dr-xr-xr-x 1 root root   16 nov  8 00:31 default

raid:/srv/sdb2sub# cd default/
raid:/srv/sdb2sub/default# ll
total 107
dr-xr-xr-x 1 root root     16 nov  8 00:31 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1

raid:/srv/sdb2sub/default# dd if=/dev/zero of=./fichier2 bs=1024 count=100
100+0 enregistrements lus
100+0 enregistrements écrits
102400 bytes (102 kB) copied, 0,0008518 s, 120 MB/s
raid:/srv/sdb2sub/default# ll
total 213
dr-xr-xr-x 1 root root     32 nov  8 00:34 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1
-rw-r--r-- 1 root root 102400 nov  8 00:34 fichier2

Le fichier existe dans le volume

raid:/srv/sdb2sub/default# ll /srv/sdb2
total 217
dr-xr-xr-x 1 root root     32 nov  8 00:34 .
drwxr-xr-x 7 root root   4096 nov  7 23:51 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1
-rw-r--r-- 1 root root 102400 nov  8 00:34 fichier2

raid:/srv/sdb2sub/default# cd /srv/sdb2
raid:/srv/sdb2# ll
total 217
dr-xr-xr-x 1 root root     32 nov  8 00:34 .
drwxr-xr-x 7 root root   4096 nov  7 23:51 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1
-rw-r--r-- 1 root root 102400 nov  8 00:34 fichier2

Je supprime un fichier dans le volume

raid:/srv/sdb2# rm fichier2
raid:/srv/sdb2# ll ../sdb2sub/default/
total 107
dr-xr-xr-x 1 root root     16 nov  8 00:34 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1

Il est également supprimé du subvolume

Je crée un snapshot du subvolume

raid:/srv/sdb2# btrfsctl -s snapshot_default /srv/sdb2sub/default/
operation complete
Btrfs Btrfs v0.16

raid:/srv/sdb2# ll /srv/sdb2sub/default/
total 107
dr-xr-xr-x 1 root root     16 nov  8 00:34 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1

raid:/srv/sdb2# ll
total 111
dr-xr-xr-x 1 root root     16 nov  8 00:34 .
drwxr-xr-x 7 root root   4096 nov  7 23:51 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1

Je recrée un fichier dans le volume

raid:/srv/sdb2# dd if=/dev/zero of=./fichier2 bs=1024 count=100
100+0 enregistrements lus
100+0 enregistrements écrits
102400 bytes (102 kB) copied, 0,000830975 s, 123 MB/s

raid:/srv/sdb2# ll
total 217
dr-xr-xr-x 1 root root     32 nov  8 00:36 .
drwxr-xr-x 7 root root   4096 nov  7 23:51 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1
-rw-r--r-- 1 root root 102400 nov  8 00:36 fichier2

raid:/srv/sdb2# ll /srv/sdb2sub/
total 6
dr-xr-xr-x 1 root root    0 jan  1  1970 .
drwxr-xr-x 7 root root 4096 nov  7 23:51 ..
dr-xr-xr-x 1 root root   32 nov  8 00:36 default
dr-xr-xr-x 1 root root   16 nov  8 00:34 snapshot_default

Le fichier n'est pas présent dans le snapshot

raid:/srv/sdb2# ll /srv/sdb2sub/snapshot_default/
total 107
dr-xr-xr-x 1 root root     16 nov  8 00:34 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1

Mais on le retrouve dans le subvolume (logique donc)

raid:/srv/sdb2# ll /srv/sdb2sub/default/
total 213
dr-xr-xr-x 1 root root     32 nov  8 00:36 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1
-rw-r--r-- 0 root root 102400 nov  8 00:34 fichier2

raid:/srv/sdb2# ll
total 217
dr-xr-xr-x 1 root root     32 nov  8 00:36 .
drwxr-xr-x 7 root root   4096 nov  7 23:51 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1
-rw-r--r-- 1 root root 102400 nov  8 00:36 fichier2

Je supprime le fichier du volume

raid:/srv/sdb2# rm fichier1
raid:/srv/sdb2# ll ../sdb2sub/
total 6
dr-xr-xr-x 1 root root    0 jan  1  1970 .
drwxr-xr-x 7 root root 4096 nov  7 23:51 ..
dr-xr-xr-x 1 root root   16 nov  8 00:37 default
dr-xr-xr-x 1 root root   16 nov  8 00:34 snapshot_default

Il est également supprimé du subvolume

raid:/srv/sdb2# ll ../sdb2sub/default/
total 107
dr-xr-xr-x 1 root root     16 nov  8 00:37 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 0 root root 102400 nov  8 00:34 fichier2

Et le snapshot n'a pas bougé

raid:/srv/sdb2# ll ../sdb2sub/snapshot_default/
total 107
dr-xr-xr-x 1 root root     16 nov  8 00:34 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 1 root root 102400 nov  8 00:31 fichier1

raid:/srv/sdb2# ll
total 111
dr-xr-xr-x 1 root root     16 nov  8 00:37 .
drwxr-xr-x 7 root root   4096 nov  7 23:51 ..
-rw-r--r-- 1 root root 102400 nov  8 00:36 fichier2

Je récupère le fichier sauvegardé dans le snapshot dans le volume

raid:/srv/sdb2# cp ../sdb2sub/snapshot_default/fichier1 .
raid:/srv/sdb2# ll
total 211
dr-xr-xr-x 1 root root     32 nov  8 00:39 .
drwxr-xr-x 7 root root   4096 nov  7 23:51 ..
-rw-r--r-- 1 root root 102400 nov  8 00:39 fichier1
-rw-r--r-- 1 root root 102400 nov  8 00:36 fichier2

Et on le retrouve dans le subvolume

raid:/srv/sdb2# ll ../sdb2sub/default/
total 213
dr-xr-xr-x 1 root root     32 nov  8 00:39 .
dr-xr-xr-x 1 root root      0 jan  1  1970 ..
-rw-r--r-- 0 root root 102400 nov  8 00:31 fichier1
-rw-r--r-- 0 root root 102400 nov  8 00:34 fichier2

raid:/srv/sdb2#

Enfin une autre fonctionnalité remarquable est le redimensionnement à chaud d'une partition:

Je réduis de 50 Mo:

raid:~# btrfsctl -r -50M /srv/sdb2
operation complete
Btrfs Btrfs v0.16

raid:~# df -hT /srv/sdb2*
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/sdb2    btrfs    429M  444K  429M   1% /srv/sdb2
/dev/sdb2    btrfs    429M  444K  429M   1% /srv/sdb2sub

J'augmente de 50 Mo:

raid:~# btrfsctl -r +50M /srv/sdb2
operation complete
Btrfs Btrfs v0.16

raid:~# df -hT /srv/sdb2*
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/sdb2    btrfs    479M  444K  479M   1% /srv/sdb2
/dev/sdb2    btrfs    479M  444K  479M   1% /srv/sdb2sub


Je teste un peu les outils du paquet btrfs-tools:


raid:~# debug-tree -e /dev/sdb2
12582912 102400 extent back ref root 256 gen 29 owner 257 offset 0
12582912 102400 extent back ref root 5 gen 36 owner 257 offset 0
12685312 102400 extent back ref root 5 gen 36 owner 258 offset 0
12787712 102400 extent back ref root 5 gen 36 owner 259 offset 0
12890112 102400 extent back ref root 5 gen 36 owner 260 offset 0
20971520 4096 extent back ref root 3 gen 0 owner 0 offset 1
29372416 4096 extent back ref root 4 gen 0 owner 0 offset 1
29601792 4096 extent back ref root 256 gen 29 owner 0 offset 256
29663232 4096 extent back ref root 5 gen 36 owner 0 offset 256
29683712 4096 extent back ref root 2 gen 0 owner 0 offset 0
29687808 4096 extent back ref root 1 gen 0 owner 0 offset 2

C'est un peu moins verbeux qu'un debugreiserfs


raid:~# btrfsck /dev/sdb2
found 454656 bytes used err is 0
total csum bytes: 500
total tree bytes: 24576
btree space waste bytes: 17971
file data blocks allocated: 512000
 referenced 512000
Btrfs Btrfs v0.16

Il existe également un outil non dispo pour l'instant dans le paquet btrfs-tools: btrfs-convert. Voyons un peu:

raid:/usr/local# wget http://www.kernel.org/hg/index.cgi/btrfs/progs/archive/tip.tar.bz2

raid:/usr/local# dpkg -l e2fslib*
ii  e2fslibs                         1.41.2-1                         ext2 filesystem libraries
ii  e2fslibs-dev                     1.41.2-1                         ext2 filesystem libraries - headers and static libraries

raid:/usr/local# dpkg -l libuuid*
ii  libuuid1                         1.41.2-1                         universally unique id library

raid:/usr/local# dpkg -l uuid-dev
ii  uuid-dev                         1.2-1.41.2-1                     universally unique id library - headers and static libraries

Un peu de lecture dans les sources du fichier dézippé m'apprend qu'il est nécessaire d'avoir les dev de libacl.

raid:/usr/local# apt-get install libacl1-dev
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances      
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  libattr1-dev
Les NOUVEAUX paquets suivants seront installés :
  libacl1-dev libattr1-dev


raid:/usr/local# tar jxvf tip.tar.bz2

raid:/usr/local/progs-da35ab2b0b54# make convert

Pour tester je vais casser la dernière partition de sdb:

raid:/# df -hTa
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/sda1     ext3    3,8G  1,5G  2,2G  40% /
tmpfs        tmpfs    124M     0  124M   0% /lib/init/rw
proc          proc       0     0     0   -  /proc
sysfs        sysfs       0     0     0   -  /sys
procbususb   usbfs       0     0     0   -  /proc/bus/usb
udev         tmpfs     10M  100K   10M   1% /dev
tmpfs        tmpfs    124M     0  124M   0% /dev/shm
devpts      devpts       0     0     0   -  /dev/pts
/dev/sdb1  ext4dev    464M   35M  406M   8% /srv/sdb1
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2sub
/dev/sdb4 reiserfs    612M   57M  556M  10% /srv/sdb4
/dev/sdb3      xfs    474M   29M  446M   6% /srv/sdb3

raid:/# umount /dev/sdb4

raid:/# cfdisk /dev/sdb

raid:/# partprobe /dev/sdb
raid:/# cat /proc/partitions
major minor  #blocks  name

   8     0    4194304 sda
   8     1    3951958 sda1
   8     2          1 sda2
   8     5     240943 sda5
   8    16    2097152 sdb
   8    17     489951 sdb1
   8    18     489982 sdb2
   8    19     489982 sdb3
   8    20          1 sdb4
   8    21     289138 sdb5
   8    22     337333 sdb6

raid:/# mkfs -t reiserfs /dev/sdb5
raid:/# mkfs -t ext3 /dev/sdb6
raid:/# mkdir /srv/sdb{5,6}
raid:/# mount /dev/sdb5 /srv/sdb5
raid:/# mount /dev/sdb6 /srv/sdb6

raid:/# df -hT
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/sda1     ext3    3,8G  1,5G  2,2G  40% /
tmpfs        tmpfs    124M     0  124M   0% /lib/init/rw
udev         tmpfs     10M  108K  9,9M   2% /dev
tmpfs        tmpfs    124M     0  124M   0% /dev/shm
/dev/sdb1  ext4dev    464M   35M  406M   8% /srv/sdb1
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2sub
/dev/sdb3      xfs    474M   29M  446M   6% /srv/sdb3
/dev/sdb5 reiserfs    283M   33M  251M  12% /srv/sdb5
/dev/sdb6     ext3    320M   11M  293M   4% /srv/sdb6

Je balance quelques fichiers pour voir s'ils vont bien supporter la conversion:

raid:/# cp /srv/sdb2/* /srv/sdb6/
raid:/# ll /srv/sdb6
total 219
drwxr-xr-x 3 root root   1024 nov  8 16:47 .
drwxr-xr-x 8 root root   4096 nov  8 16:47 ..
-rw-r--r-- 1 root root 102400 nov  8 16:47 fichier1
-rw-r--r-- 1 root root 102400 nov  8 16:47 fichier2
drwx------ 2 root root  12288 nov  8 16:46 lost+found

raid:/# btrfs-convert /dev/sdb6
/dev/sdb6 is mounted

Oui quand même faut pas abuser :)

raid:/# umount /dev/sdb6
raid:/# btrfs-convert /dev/sdb6
block size is too small
conversion aborted.

Qu'à cela ne tienne on va agrandir en fusionnant sdb5 et sdb6:

raid:/# umount /dev/sdb5

raid:/# cfdisk /dev/sdb

raid:/# partprobe /dev/sdb


raid:/# mount /dev/sdb4 /srv/sdb4
raid:/# df -hT
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/sda1     ext3    3,8G  1,5G  2,2G  40% /
tmpfs        tmpfs    124M     0  124M   0% /lib/init/rw
udev         tmpfs     10M  100K   10M   1% /dev
tmpfs        tmpfs    124M     0  124M   0% /dev/shm
/dev/sdb1  ext4dev    464M   35M  406M   8% /srv/sdb1
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2sub
/dev/sdb3      xfs    474M   29M  446M   6% /srv/sdb3
/dev/sdb4     ext3    603M   17M  556M   3% /srv/sdb4

Je recopie donc à nouveau les fameux fichier1 fichier2

raid:/# cp /srv/sdb2/* /srv/sdb4/

raid:/# umount /dev/sdb4
raid:/# btrfs-convert /dev/sdb4
creating btrfs metadata.
creating ext2fs image file.
cleaning up system chunk.
conversion complete.

Et je vérifie:

raid:/# mount /dev/sdb4 /srv/sdb4
raid:/# ll /srv/sdb4
total 204
drwxr-xr-x 1 root root     52 nov  8 16:54 .
drwxr-xr-x 9 root root   4096 nov  8 16:53 ..
-rw-r--r-- 1 root root 102400 nov  8 16:54 fichier1
-rw-r--r-- 1 root root 102400 nov  8 16:54 fichier2
drwx------ 1 root root      0 nov  8 16:53 lost+found
raid:/# df -hT
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/sda1     ext3    3,8G  1,5G  2,2G  40% /
tmpfs        tmpfs    124M     0  124M   0% /lib/init/rw
udev         tmpfs     10M  100K   10M   1% /dev
tmpfs        tmpfs    124M     0  124M   0% /dev/shm
/dev/sdb1  ext4dev    464M   35M  406M   8% /srv/sdb1
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2sub
/dev/sdb3      xfs    474M   29M  446M   6% /srv/sdb3
/dev/sdb4    btrfs    612M   27M  586M   5% /srv/sdb4

Soyons fous! Faisons l'opération inverse: btrfs -> ext3

raid:/# umount /dev/sdb4
raid:/# btrfs-convert -r /dev/sdb4
rollback complete.

raid:/# mount /dev/sdb4 /srv/sdb4
raid:/# ll /srv/sdb4
total 232
drwxr-xr-x 3 root root   4096 nov  8 16:54 .
drwxr-xr-x 9 root root   4096 nov  8 16:53 ..
-rw-r--r-- 1 root root 102400 nov  8 16:54 fichier1
-rw-r--r-- 1 root root 102400 nov  8 16:54 fichier2
drwx------ 2 root root  16384 nov  8 16:53 lost+found

Les fichiers n'ont pas bronchés.

raid:/# df -hT
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/sda1     ext3    3,8G  1,5G  2,2G  40% /
tmpfs        tmpfs    124M     0  124M   0% /lib/init/rw
udev         tmpfs     10M  100K   10M   1% /dev
tmpfs        tmpfs    124M     0  124M   0% /dev/shm
/dev/sdb1  ext4dev    464M   35M  406M   8% /srv/sdb1
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2
/dev/sdb2    btrfs    479M  344K  479M   1% /srv/sdb2sub
/dev/sdb3      xfs    474M   29M  446M   6% /srv/sdb3
/dev/sdb4     ext3    603M   17M  555M   3% /srv/sdb4



On peut certainement faire encore mieux mais la doc pour l'instant est du genre réduite (ce qui se comprend dans la mesure où
c'est vraiment de l'expérimental) mais ça semble vraiment prometteur.

Plus d'infos: http://btrfs.wiki.kernel.org/index.php/Getting_started

Les utilitaires de redimensionnement  (copie locale ici)



Quelques définitions

Extents, B-arbres

Les B-arbres, B+arbres et B*arbres apparaissent dans les nouveaux systèmes de fichiers pour Linux. Ils permettent de référencer les blocs d'un fichier beaucoup plus efficacement. La recherche d'un bloc dans un fichier se fait beaucoup plus rapidement que s'il était référencé dans une table linéaire.

Un extent est une suite de blocs contigus. Ils servent lors de l'allocation de blocs libres, cela évite de faire autant d'allocations que de blocs désirés, et augmente la quantité de blocs contigus dans un fichier (ce qui en accélère la lecture, puisque les têtes du disque se déplacent moins).