Tuning zfs-fuse sur Debian Squeeze
Le 02-12-11 à 11:11, par Cyril Pawelko Permalien
Je souhaite conserver plein de copies de sauvegarde de machines virtuelles tournant sur mon hyperviseur étant un kvm/libvirt/archipel sur une squeeze. Il y a un candidat idéal pour cela: zfs, qui pour des raisons de licence n'a pas d'implémentation native dans linux. Pour commencer, j'ai fait quelques tests avec zfs-fuse (0.6.9-1), sans tuning particulier. Ca marche correctement, mais pas très vite (moins de 10 Mo/s). J'ai ensuite utilisé le zfs natif. Les performances brutes étaient bien meilleures mais ça tirait énormément sur la RAM et tout finissait par devenir très lent, et la sauvegarde d'une des VM ne se terminait jamais. En essayant de tuner la taille du ARC cache, je n'ai réussi qu'à obtenir un plantage complet du noyau (le dmesg parlait de lui même).
Je suis donc retourné à zfs-fuse en attendant de trouver mieux. Maintenant que j'ai une rotation des VM sur une semaine, je peux avoir une idée précise des ressources requises par la déduplication:
# zpool status -D zpool
pool: zpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
zpool ONLINE 0 0 0
disk/by-id/dm-name-archipel-zfs ONLINE 0 0 0
errors: No known data errors
DDT entries 282985, size 354 on disk, 222 in core
bucket allocated referenced
__
refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE
------ ------ ----- ----- ----- ------ ----- ----- -----
1 49,6K 6,20G 2,25G 2,25G 49,6K 6,20G 2,25G 2,25G
2 11,1K 1,39G 583M 583M 27,6K 3,45G 1,42G 1,42G
4 171K 21,4G 12,6G 12,6G 1,13M 145G 85,5G 85,5G
8 43,7K 5,46G 3,11G 3,11G 358K 44,7G 25,4G 25,4G
16 741 92,6M 59,3M 59,3M 13,5K 1,69G 1,04G 1,04G
32 129 16,1M 8,19M 8,19M 4,67K 598M 298M 298M
64 3 384K 67,5K 67,5K 330 41,2M 7,78M 7,78M
128 1 128K 4,50K 4,50K 133 16,6M 598K 598K
1K 1 128K 4,50K 4,50K 1,27K 162M 5,71M 5,71M
2K 1 128K 7K 7K 3,98K 509M 27,8M 27,8M
16K 1 128K 7,50K 7,50K 23,7K 2,96G 178M 178M
Total 276K 34,5G 18,6G 18,6G 1,60M 205G 116G 116G
Je vois ici que j'ai 282985 entrées pour la déduplication, chaque entrée occupant 222 octets en RAM. J'en déduis donc que mon cache pour la dédup est d'environ 60 Mo (ce qui est peu !). Par défaut ZFS alloue un quart de la taille du cache ARC pour le cache des metadata, donc fait partie la table DDT. Le cache ARC doit donc être au moins de 240 Mo. Par défaut, la valeur sur ma Debian était de 100 Mo. Cela apparait au démarrage de fuse:
# grep -i zfs /var/log/syslog Nov 28 21:12:39 archipel zfs-fuse: ARC caching: maximum ARC size: 100 MiB Nov 28 21:12:39 archipel zfs-fuse: ARC setup: min ARC size set to 16777216 bytes Nov 28 21:12:39 archipel zfs-fuse: ARC setup: max ARC size set to 104857600 bytes
J'ai donc modifié la ligne "max-arc-size = 240" dans le fichier /etc/zfs/zfsrc et relancé zfs-fuse
#invoke-rc.d zfs-fuse restart
A titre d'exemple, le temps de sauvegarde de ma VM zimbra est passé de 16 minutes à 6 minutes ! En réglant le cache à 500 Mo, je descends à 3 minutes pour la même sauvegarde. Ce qui correspond à peu près aux temps que j'obtenais avec les modules zfs natifs, mais qui eux provoquaient de nombreux plantages, alors qu'avec zfs-fuse j'ai une solution parfaitement stable. Un réglage du cache à 1 Go n'a pas donné de meilleurs résultats.
Conclusion : Voici la formule appliquée dans mon cas avec zfs-fuse : max-arc-size = Taille du cache DDT * 8
Configuration mpd sur debian pour écoute sur iphone
Le 13-09-11 à 22:35, par Cyril Pawelko Permalien
Objectif : Pouvoir écouter sur mon iPhone 3G la musique stockée sur mon serveur linux, sans devoir passer par l'ignoble iTunes, et sans dupliquer les données. La solution existe, il s'agit de mpd (music player daemon) pour la partie serveur, et MPoD pour la partie cliente. L'installation sur une debian squeeze et le manque de doc m'ont incité à partager cette expérience. Configuration validée:
- iPhone 3G
- iOS 4
- MPoD 1.6
- Debian Squeeze amd64
- mpd 0.15.12
Avertissement
Ces manipulations ont été réalisées sur une squeeze installée originellement il y a plus de 7 ans, il manque donc peut-être certaines opérations. Afin de bien montrer que ce n'est pas parfait, toutes les opérations seront réalisées en tant que root ;-)
Recompilation mpd
La version debian de mpod n'inclut pas le support lame, il faut donc recompiler le paquet. Tout d'abord, activer le dépôt Debian Multimédia comme indiqué ici Installer lame
# apt-get install libmp3lame # apt-get install build-essentials # cd /usr/local/src/
Télécharger les sources du paquet, et installer les dépendances nécessaires
# apt-get source mpd # apt-get build-dep mpd
Se rendre dans le répertoire, et activer le support lame
# cd mpd-0.15.12/ # vi debian/rules
Sur la ligne DEB_CONFIGURE_USER_FLAGS, remplacer --disable-lame par --enable-lame Puis lancer la compilation
# dpkg-buildpackage
Une fois terminé, remonter au répertoire parent puis installer le fichier deb ainsi créé
# dpkg -i mpd_0.15.12-1.1_amd64.deb
Configuration de mpd
Editer le fichier /etc/mpd.conf et définir les paramètres suivants:
music_directory "/mnt/data/musique/"
bind_to_address "0.0.0.0"
audio_output {
type "httpd"
name "My HTTP Stream"
encoder "lame" # optional, vorbis or lame
port "8000"
# quality "5.0" # do not define if bitrate is defined
bitrate "128" # do not define if quality is defined
format "44100:16:1"
}
Enregistrer et démarrer le service mpd
La partie iPhone
Installer MPoD Aller dans les réglages de l'application et ajouter manuellement un serveur:
- Connection mode: On the go
- Serveur: IP/nom du serveur
- Port: 6600
- Stream: http://(serveur):8000
Une fois connecté (Status: Connected), retourner dans le menu préférences. Sélectionner "Update database" pour demander à mpd de lister les fichiers disponibles Vérifier dans la partie "Outputs" que "My HTTP Stream" soit bien sélectionné
Et si ça ne fonctionne pas
Quelques pistes...
- Vérifier que mpd fonctionne, en utilisant un autre client que l'iPhone
- Essayer d'écouter le flux http://(serveur):8000 avec vlc ou un navigateur web
- Vérifier les connexions réseaux, en lançant la commande
# watch -n 1 "netstat -apn | grep /mpd" tcp 0 0 0.0.0.0:6600 0.0.0.0:* LISTEN 14046/mpd tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 14046/mpd tcp 0 15334 192.168.3.9:8000 192.168.3.64:49954 ESTABLISHED 14046/mpd
On voit ici:
- Que mdp fonctionne bien et écoute bien sur le port 6600 (le service est lancé)
- Que mdp écoute sur le port 8000 (uniquement lorsqu'une lecture est en cours)
- Que l'iphone est connecté sur le port 8000 et "reçoit" le flux audio
Bonus
Profitez maintenand de MPoD, qui a en plus la bonne idée d'aller chercher tout seul les pochettes chez Amazon
Liens
Le 08-12-10 à 23:15, par Cyril Pawelko Permalien
Logiciel libre
www.shellunix.com : Un site simple, clair et complet sur bash, sed et awk. Une référence pour moi.
Photorec : Un utilitaire de récupération de photos et de documents qui, contrairement à de nombreux rivaux, a le mérite de fonctionner et la bonne idée d'être sous licence GPL
Boosting Spamassassin : Comment optimiser le spamassassin de zimbra en utilisant les "rules du jour"
Perl script to adjust ‘srt’ subtitle files : Un script pour ajuster le décalage dans des fichiers de sous-titres
Divers
www.sebastienchampion.fr : De belles photos de paysages et d'animaux
Compiling rpcapd for linux
Le 08-12-10 à 23:13, par Cyril Pawelko Permalien
Several years ago, I compiled rpcapd for linux. To achieve it, I had to comment the win32 specific code, so it compiled on linux.
I recently tried to compile the latest version, and it doesn't need modifications anymore to successfully compile.
Here is a quick howto, based on debian 5:
Install the required tools
apt-get install bison flex
Download and unzip winpcap
wget http://www.winpcap.org/install/bin/WpcapSrc_4_1_2.zip unzip WpcapSrc_4_1_2.zip cd winpcap/wpcap/libpcap chmod +x configure runlex.sh
Configure libpcap to compile statically...
CFLAGS=-static ./configure
...and compile
make cd rpcapd/
edit the Makefile and add -static to CFLAGS, and finally
make
Downloads:
amd64: rpcapd-4.1.2-amd64.gz i386: rpcapd-4.1.2-i386.gz
Astuces Debian
Le 20-11-10 à 21:04, par Cyril Pawelko Permalien
Définir le hostname du client DHCP :
Contrairement à Windows ou à une Fedora Core, un client DHCP Debian n'indique pas son nom d'hôte au serveur DHCP, qui ne peut donc pas créer l'enregistrement DNS correspondant.
Pour y remédier, ajouter la ligne suivante dans le fichier /etc/dhclient.conf ou /etc/dhcp3/dhclient.conf pour une ubuntu
send host-name "monpc";
Relancer le réseau pour prendre en compte les changements:
/etc/init.d/networking restart
Adresses IP multiples:
Pour affecter plusieurs adresses IP à une même interface, il suffit de déclarer les adresses supplémentaires dans /etc/network/interfaces, en utilisant le nom de l'interface, suivi de ":0" (ou ":1", ":2", etc...)
Exemple:
auto eth0
iface eth0 inet static
address 192.168.3.90
netmask 255.255.255.0
gateway 192.168.3.1
auto eth0:0
iface eth0:0 inet static
address 192.168.3.91
netmask 255.255.255.0
gateway 192.168.3.1
Redémarrer ensuite le réseau avec la commande /etc/init.d/networking restart
Source
Compiler un paquet à partir du fichier .dsc
Télécharger le fichier .dsc
dget http://mentors.debian.net/debian/pool/main/s/spice-protocol/spice-protocol_0.6.3-1.dsc
Extraire le fichier téléchargé
dpkg-source -x celt051_0.5.1.3-1.dsc
cd celt051-0.5.1.3/
Vérifier les dépendances
dpkg-checkbuilddeps
Compiler si toutes les dépendances sont résolues
dpkg-buildpackage
Compiler en ignorant les dépendances non résolues
dpkg-buildpackage -d
Installer les packages compilés
cd..
dpkg -i libcelt051-0_0.5.1.3-1_amd64.deb libcelt051-dev_0.5.1.3-1_amd64.deb

