Linux-VServer et Quotas
Sommaire
Problématique
La question des quotas revient fréquemment, et j'ai eu du mal à trouver la marche à suivre pour ma configuration (Noyeau 2.6.14, Linux-VServer 2.01)
Ces notes traitent des quotas à l'intérieur d'un serveur virtuel.
Comme le Linux-VServer n'accède pas directement au disque, il n'est pas possible d'utiliser directement les quotas au sein d'un serveur virtuel.
Pour pouvoir utiliser les quotas, il faudra passer par le pilote Virtual Root de Linux-VServer, associé à un device disque.
Pour ne pas allouer toute une partition au serveur virtuel, on utilisera tout naturellement le Logical Volume Manager.
Pré-requis
Le noyeau doit supporter:
- Le support du LVM (on suppose ici qu'il est déjà configuré)
- Le support des quotas (inclu dans le noyeau ou en module -- quota_v2)
- Le proxy-device Virtual Root de Linux-VServer (inclu dans le noyeau ou en module -- vroot)
Si on a opté pour les modules, s'assurer qu'ils sont bien chargés.
Mise en place
Création d'un Serveur Virtuel
Nous allons partir d'un serveur existant. Le serveur est créé comme décrit dans le Linux-VServer HowTo:
<host>: # PKG_EXCLUDE="dhcp-client,fdutils,iptables,libpcap0.7,makedev,pciutils,ppp,pppconfig,pppoe,pppoeconf" <host>: # vserver <vserver> build --hostname <vserver-fqdn> --interface <vserver-interface> \ --context <vserver-context> -m debootstrap -- -d sarge -- --exclude=${PKG_EXCLUDE} <host>: # vserver start .... <host>: # vserver stop
Création du volume logique
Tout ceci sur la machine hôte!
On utilise le LVM pour crééer une partition logique et on initialise le file system:
<host>: # lvcreate -L 18G -n <vserver> vg0 <host>: # mke2fs -j /dev/vg0/<vserver>
Il faut ajouter une ligne dans le /etc/fstab:
# <file system> <mount point> <type> <options> <dump> <pass> /dev/vg0/<vserver> /home/vservers/<vserver> ext3 defaults,usrquota,grpquota 0 2
Il est impératif de monter le filesystem avec usrquota,grpquota, même si on ne les utilise pas sur le système hôte.
Il reste à copier le serveur virtuel sur la filesystem créé (assurez vous que le serveur est bien arreté)
<host>: # mv /home/vservers/<vserver> /home/vservers/<vserver>.orig <host>: # mkdir /home/vservers/<vserver> <host>: # mount /home/vservers/<vserver> <host>: # cp -a /home/vservers/<vserver>.orig/. /home/vservers/<vserver>
Configuration du serveur virtuel
Il faut associer la partition a un device Virtual Root à l'aide de la commande vrsetup.
Si les devices n'existent pas, on peux aisément les créer à la main:
<host>: # mkdir /dev/vroot <host>: # for i in 0 1 2 3 4 5 6 7 ; do mknod /dev/vroot/$i b 4 $i; done
Attention: après un passage à udev, j'ai remarqué que les devices automatiquement créés sont /dev/vrootn! Adaptez donc le script en conséquence.
On va mettre l'association dans les scriptlets du versver. On crée le ficher /etc/vservers/<vserver>/scripts/prepre-start.d/vroot.sh:
#!/bin/sh case $1 in prepre-start) rm -f /home/vservers/<vserver>/dev/hdv1 vrsetup /dev/vroot/0 /dev/vg0/<vserver> cp -fa /dev/vroot/0 /home/vservers/<vserver>/dev/hdv1 ;; postpost-stop) vrsetup -d /dev/vroot/0 ;; *) ;; esac
On établit un lien symbolique pour l'arrêt:
<host>: # ln -s ../prepre-start.d/vroot.sh /etc/vservers/<vserver>/scripts/postpost-stop.d
On édite /etc/vservers/<vserver>/apps/init/mtab pour signaler que les quotas sont d<vserver>onibles:
/dev/hdv1 / ufs rw,usrquota,grpquota 0 0
Et enfin, on ajoute la capability quota_ctl au capabilities du contexte:
<host>: # echo quota_ctl /etc/vservers/<vserver>/ccapabilities
Activation des quotas
On peux maintenant démarrer le serveur virtuel et installer les paquets nécessaires:
<host>: # vserver <vserver> start <host>: # vserver <vserver> enter <vserver>: # apt-get install quota quotatool <vserver>: # quotacheck -maugv <vserver>: # quotaon -auvg
Et voilà!
Script de démarrage
Les quotas sont démarrés normalemnt dans le run-level S, dont les scripts ne sont pas pris en compte ici. Il faut donc modifier le setup par défaut:
<vserver>: # update-rc.d -f quota remove <vserver>: # update-rc.d quota start 05 3 . stop 85 0 6 .