Category Archives: ZFS

ZFS v28 in FreeBSD 9-CURRENT!

As has been expected, previously announced and tested, ZFS v28 has been committed to FreeBSD HEAD!

New features include:

  • RAID-Z3 (triple parity - one more parity drive than RAID-6)
  • Deduplication
  • Better recovery support during import (forced log rewind, read-only import)
  • Snapshot-level diff (like regular diff but working on file systems)
  • zpool split (split a RAID-1 / mirrored set of drives into separate / independant zpools)

As always, testers are welcome!

Read more...

ZFS v28 in FreeBSD 9-CURRENT!

As has been expected, previously announced and tested, ZFS v28 has been committed to FreeBSD HEAD!

New features include:

  • RAID-Z3 (triple parity - one more parity drive than RAID-6)
  • Deduplication
  • Better recovery support during import (forced log rewind, read-only import)
  • Snapshot-level diff (like regular diff but working on file systems)
  • zpool split (split a RAID-1 / mirrored set of drives into separate / independant zpools)

As always, testers are welcome!

Read more...

ZFS v28 in FreeBSD 9-CURRENT!

As has been expected, previously announced and tested, ZFS v28 has been committed to FreeBSD HEAD!

New features include:

  • RAID-Z3 (triple parity - one more parity drive than RAID-6)
  • Deduplication
  • Better recovery support during import (forced log rewind, read-only import)
  • Snapshot-level diff (like regular diff but working on file systems)
  • zpool split (split a RAID-1 / mirrored set of drives into separate / independant zpools)

As always, testers are welcome!

Read more...

FreeBSD on 4K sector drives

All major FreeBSD filesystems support 4K sectors (UFS, ZFS, ext2), and so does the lower level - GEOM - but currently there's an issue of communicating this configuration between all the layers. A part of the problem is that the current drives (and the situation will probably not change during this new decade) advertise two sector sizes: both 512 byte and 4K, and the system needs to correctly interpret them. All this will be resolved when a consensus on the topic gets achieved, but until that happens (hopefully soon), there is a set of easy workarounds, which I'll describe here.

Read more...

FreeBSD on 4K sector drives

All major FreeBSD filesystems support 4K sectors (UFS, ZFS, ext2), and so does the lower level - GEOM - but currently there's an issue of communicating this configuration between all the layers. A part of the problem is that the current drives (and the situation will probably not change during this new decade) advertise two sector sizes: both 512 byte and 4K, and the system needs to correctly interpret them. All this will be resolved when a consensus on the topic gets achieved, but until that happens (hopefully soon), there is a set of easy workarounds, which I'll describe here.

Read more...

FreeBSD on 4K sector drives

All major FreeBSD filesystems support 4K sectors (UFS, ZFS, ext2), and so does the lower level - GEOM - but currently there's an issue of communicating this configuration between all the layers. A part of the problem is that the current drives (and the situation will probably not change during this new decade) advertise two sector sizes: both 512 byte and 4K, and the system needs to correctly interpret them. All this will be resolved when a consensus on the topic gets achieved, but until that happens (hopefully soon), there is a set of easy workarounds, which I'll describe here.

Read more...

vfs.hirunningspace and disk write latency performance

A while ago I increased the default value for the vfs.hirunningspace tunable - which greatly helps with performance when the disk system supports tagged queueing (e.g. NCQ), allowing many more requests to be offloaded into the controller and/or the drive(s). But deep queues bring their own problems, especially in pathological cases.

Read more...

So how is FreeBSD 9 shaping up?

It's still early to talk about FreeBSD 9.0 release but so far there have been some interesting developments in the systems and a nice core featureset is shaping up. I'm still maintaining the "What's cooking" page and this post is basically an (incomplete) summary of it at this point in time.

Of course, in addition to these features, there are non-stop modifications to all parts of the system, from drivers for new hardware to overall performance enhancements.

Read more...

HP "LeftHand"

I've seen a HP "LeftHand" / StorageWorkd P4000 SAN device recently and got quite good impressions off of it. One thing that occured to me is - why didn't anyone try this before? Certainly both Linux (to lesser extent) and FreeBSD (to a somewhat greater) contain the pieces for it, and have contained for some years now. In fact, several people did such setups privately or internally for their companies but there was apparently never a concentrated effort to sell it.

Read more...

HP "LeftHand"

I've seen a HP "LeftHand" / StorageWorkd P4000 SAN device recently and got quite good impressions off of it. One thing that occured to me is - why didn't anyone try this before? Certainly both Linux (to lesser extent) and FreeBSD (to a somewhat greater) contain the pieces for it, and have contained for some years now. In fact, several people did such setups privately or internally for their companies but there was apparently never a concentrated effort to sell it.

Read more...

How tout casser chez tout le monde épisode 1

Afin de m'assurer que lorsque je joue avec mes ports, je casse bien tout, càd sur toutes les version supportées : 7.3, 8.0, 8.1 et celles à venir. Pour pouvoir bien vérifier que je mets le dawa aussi bien sur i386 que amd64, je me suis enfin décidé à poser une tinderbox.

La tinderbox officielle de freebsd ne me convient pas. Je la trouve démeusurément complexe pour ne pas dire tordu rapport à mes besoins, Elle a besoin d'une base de données (bon à la rigueur un petit postgresql ne me dérangerai pas plus que ça) mais pour la webui il faut aussi PHP et là faut pas déconner, je n'ai pas envie de me faire chier avec du PHP sur mes machines (comment ça je suis obtu ?).

Je suis donc parti pour me pondre la mienne. Je ferai ici l'état de l'avancée de ma tinderbox maison.

Episode 1 : principe et création des environnements.

Ma tinderbox sera moins automatisée que la tinderbox officielle, il faudra se faire à la main ses jails souches etc.

concepts :

  • une jail sur un ZFS dédié par version et par architecture
  • un snapshot de l'état neuf de la jail pour toujours repartir de quelque chose de propre
  • du nullfs pour l'arbo des ports
  • du nullfs pour les packages
  • un joli script maison pour lier le tout. (Pour le moment ce script est en ZSH, peut être un jour il deviendra un shell POSIX propre)

Que va faire le script :

  • démarrage de la jail
  • un etat des lieux de la jail avant construction (mais après installation des dépendances)
  • installation des dépendances depuis des packages si ils existent, sinon compilation depuis les ports (et construction du package comme ça au prochain tour le package sera là)
  • construction du ports avec possibilité de changer les options
  • installation/desinstallation/construction de packages, bref la tambouille habituelle pour s'assurer que le ports est tout joli comme il faut.
  • état des lieux après désinstallation du ports histoire de s'assurer que celui ci ne laisser rien traîner comme un gros cochon.

maintenant que les concepts sont présentés passons à l'étape préparation des jails.

ici les jails sont dans /home/jails/tinderboxes celui ci étant un FS ZFS : system/jails/tinderboxes pour être précis. pour créer ces jails nous allons avoir besoin de : lftp et de zsh.

Oui comme je suis une loutre, je ne vais pas me lancer dans une compilation des sources pour créer mes jails, je vais directement partir des sets officiels.

for arch (i386 amd64) {
	for version (7.3-RELEASE 8.0-RELEASE 8.1-RC2)  {
		zfs create system/jails/tinderboxes/${version%-*}-$arch
		cd /home/jails/tinderboxes/${version%-*}-$arch
		export DESTDIR=/home/jails/tinderboxes/${version%-*}-$arch
		/usr/local/bin/lftp -c "open ftp://ftp.free.org/pub/FreeBSD/releases/$arch/$version/; mirror base"
		/usr/local/bin/lftp -c "open ftp://ftp.free.org/pub/FreeBSD/releases/$arch/$version/; mirror src"
		cd base
		yes | ./install.sh
		cd ../src
		./install.sh all
	}
}

J'ai donc maintenant à ma disposition 6 FS contenant chacun des images minimales freebsd il faut maintenant finir la config et les mettre à jours avec freebsd-update

pour chacune des jails il faudra forcer des variables d'environnement pour qu'elles sachent quel est leur version. Pour cela il faut modifier le login.conf de chacune d'entre elles et remplacer :

:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\

par

:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES,UNAME_r=7.3-RELEASE,OSVERSION=703000,UNAME_v=FreeBSD 7.3-RELEASE:\

Il faut adapter le 7.3-RELEASE pour chacune des jails.

Pour déterminer la bonne valeure pour OSVERSION, un petit awk à la racine de la jail va pouvoir nous aider :

awk '/\#define __FreeBSD_version/ { print $3 }' usr/include/sys/param.h

Pour les jails i386 il faut rajouter dans la ligne du login.conf

UNAME_m=i386,UNAME_p=i386

Pour que tout ceci soit pris en compte, ne pas oublier :

cap_mkdb login.conf

Toujours pour les jails i386, il ne faut pas oublier de mettre dans etc/make.conf

MACHINE=i386
MACHINE_ARCH=i386

Avant de démarrer les jails on ajoute 2 lignes sur le etc/rc.conf de chacunes d'entres elles afin qu'elles ne démarrent ni sendmail ni cron dont nous n'avons pas besoin. Pour le moment on garde la syslog pour que la jail reste fonctionnelle.

sendmail_enable="NO"
cron_enable="NO"

sur la machine hôte on peut ajouter les lignes nécessaires au démarrage des jails dans le rc.conf :

jail_73i386_rootdir=/home/jails/tinderboxes/7.3-i386
jail_73i386_hostname="tinder73i386"
jail_73i386_ip="192.168.1.51"
jail_73i386_interface="nfe0"
jail_73i386_devfs_enable="YES"
jail_73i386_devfs_ruleset="devfsrules_jail"
jail_73i386_flags="-n tinder73i386"

faire de même pour chacune des jails.

une fois les jails démarrées, il faut effectuer les mises à jours, toujours aider de zsh :

for arch (i386 amd64) {
	for version (73 80 81) {
		jexec -U root tinder${version}${arch} /usr/sbin/freebsd-update fetch install
	}
}

Le -U root est important pour que login.conf soit pris en compte.

Un fois les mises à jours faites il est possible d'actualiser les fichiers login.conf afin de refléter les nouvelle version 7.3-RELEASE-p1 par exemple, mais ce n'est pas obligatoire.

maintenant il faut arrêter toutes les jails et faire un snapshot zfs qui nous servira de référence et permettera de repartir de bases propres :

zfs snapshot system/jails/tinderboxes/7.3-amd64@propre

recommencer l'opération pour toutes les jails.

Ceci est la fin du premier épisode (je sais ça a un air de déjà vue avec un post précédent, mais la suite sera différente :))