<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mémoire partagée</title>
	<atom:link href="http://www.memoire-partagee.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.memoire-partagee.fr</link>
	<description>Mon segment de communication inter-professionnels</description>
	<lastBuildDate>Mon, 19 Jul 2010 08:00:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Scannez vos médias de l&#8217;iPhone directement dans Delicious Library</title>
		<link>http://www.memoire-partagee.fr/2010/07/scan-de-medias-avec-liphone-pour-import-dans-delicious-library/</link>
		<comments>http://www.memoire-partagee.fr/2010/07/scan-de-medias-avec-liphone-pour-import-dans-delicious-library/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 08:00:42 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[macos]]></category>
		<category><![CDATA[delicious library]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=679</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Apple.gif" width="65" height="40" alt="" title="macos" /><br/>J'utilise depuis un certain temps maintenant l'excellent catalogue de médias Delicious Library, pour son interface bien léchée et la possibilité de scanner directement les code-barres de mes BD ou DVD avec la webcam de ma machine. Cela dit, j'ai été un peu négligent ces derniers temps, et les médias non scannés s'accumulant, la flemme prend [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Apple.gif" width="65" height="40" alt="" title="macos" /><br/><p style="text-align: justify;">J'utilise depuis un certain temps maintenant l'excellent catalogue de médias <a href="http://www.delicious-monster.com/" target="_blank">Delicious Library</a>, pour son interface bien léchée et la possibilité de scanner directement les code-barres de mes BD ou DVD avec la webcam de ma machine. Cela dit, j'ai été un peu négligent ces derniers temps, et les médias non scannés s'accumulant, la flemme prend vite le dessus. Jusqu'à ce que je découvre une extraordinaire application de scanning de code-barres sur iPhone, <a href="http://itunes.apple.com/fr/app/redlaser/id312720263?mt=8" target="_blank">RedLaser</a>. L'application est gratuite, incroyablement rapide pour lire un code (même si l'autofocus de l'iphone 4g aide, il faut bien le reconnaître), et elle permet de scanner des codes à la chaîne.</p>
<p style="text-align: justify;">Pour cela, rien de plus simple : lancez l'application, appuyez sur le petit éclair en bas au milieu, et une fois en mode scan, activez le bouton "multiple" en bas à droite. Une fois vos scans terminés, revenez à la liste des codes scannés, et envoyez-les par mail en utilisant le petit bouton habituel en bas à gauche (le même icône que dans l'application Photos).</p>
<p style="text-align: justify;">Il ne reste qu'à importer tout ça dans Delicious Library. Pour ce faire, enregistrez le fichier raw-barcodes.txt, renommez-le très exactement en Scanned UPCs Log.txt, et il ne reste plus qu'à faire glisser ce fichier sur la fenêtre de Delicious Library, un + apparaîtra sous votre curseur, et il n'y a plus qu'à le laisser travailler.</p>
<p style="text-align: justify;">A titre d'exemple, il m'a fallu environ 10 minutes pour scanner et importer complètement une étagère de 65 DVD. Plus de raisons d'avoir la flemme!</p>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/07/scan-de-medias-avec-liphone-pour-import-dans-delicious-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nouveau white paper Oracle Solaris</title>
		<link>http://www.memoire-partagee.fr/2010/06/nouveau-white-paper-oracle-solaris/</link>
		<comments>http://www.memoire-partagee.fr/2010/06/nouveau-white-paper-oracle-solaris/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 08:25:16 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=677</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/oracle.gif" width="65" height="40" alt="" title="oracle" /><br/>Il y a quelques jours, je commentais le manque de communication d'Oracle sur l'avenir des différents produits Sun. Ca reste flou, mais il semble tout de même qu'ils fourbissent leurs armes, au moins sur un plan commercial, avec ce white paper.
Rien de vraiment nouveau sous le soleil, bien sûr, si ce n'est le souci de [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/oracle.gif" width="65" height="40" alt="" title="oracle" /><br/><p style="text-align: justify;">Il y a quelques jours, je commentais le manque de communication d'Oracle sur l'avenir des différents produits Sun. Ca reste flou, mais il semble tout de même qu'ils fourbissent leurs armes, au moins sur un plan commercial, avec ce <a href="http://developers.sun.com/solaris/docs/solaris-sparc-061110.pdf" target="_blank">white paper</a>.</p>
<p style="text-align: justify;">Rien de vraiment nouveau sous le soleil, bien sûr, si ce n'est le souci de présenter une vision cohérente de l'ensemble des solutions anciennement Sun et l'apport de ces solutions aux différentes solutions applicatives d'Oracle. On en reste donc au même point, ce qui manque, ce sont des arguments pour convaincre les décideurs d'installer du Solaris sur du matériel Oracle plus coûteux, et pas du RedHat sur du x86 HP ou IBM ...</p>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/06/nouveau-white-paper-oracle-solaris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fin du support Solaris par HP</title>
		<link>http://www.memoire-partagee.fr/2010/06/fin-du-support-solaris-par-hp/</link>
		<comments>http://www.memoire-partagee.fr/2010/06/fin-du-support-solaris-par-hp/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 23:00:01 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=672</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/oracle.gif" width="65" height="40" alt="" title="oracle" /><br/>Oracle vient de mettre fin à l'accord qui le liait à HP et permettait à ce dernier d'offrir un support Solaris sur sa gamme de serveur x64 Proliant (anciennement Compaq, avant le rachat de ce dernier par HP). Les clients d'HP qui utilisent Solaris sur ces serveurs pourront renouveler leurs contrats pour une durée de [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/oracle.gif" width="65" height="40" alt="" title="oracle" /><br/><p style="text-align: justify;">Oracle vient de mettre fin à l'accord qui le liait à HP et permettait à ce dernier d'offrir un support Solaris sur sa gamme de serveur x64 Proliant (anciennement Compaq, avant le rachat de ce dernier par HP). Les clients d'HP qui utilisent Solaris sur ces serveurs pourront renouveler leurs contrats pour une durée de 3 ans maximum, et ce, jusqu'au 1er juillet prochain, ce qui amène la fin du support au 30 juin 2013.</p>
<p style="text-align: justify;">De toute évidence, en fermant les vannes au premier fournisseur de serveurs x86 du marché, Oracle souhaite mettre un terme au déploiement de Solaris sur du hardware non-Sun (pardon, non-Oracle, il faut que je m'habitue). En revanche, difficile de savoir si l'objectif est de sortir totalement du marché du x86 pour se recentrer sur le Sparc, ou s'ils souhaitent simplement promouvoir leurs propres boîtes x86, qui restent plus chères que celles d'HP ou IBM à performances égales.</p>
<p style="text-align: justify;">Entre ces éléments, l'absence de roadmap (si l'on excepte ce <a href="http://www.eecis.udel.edu/~bmiller/DE-OSUG/Oracle-Sun.pdf" target="_blank">document assez vague</a>) et une communication à la transparence digne de Raymond lui-même, il est difficile pour les clients Solaris de savoir où le ballon va retomber, et ça ne les incitera certainement pas à rester fidèles à cet OS. Oracle fait décidément une fleur à Linux, même si c'est probablement bien involontaire.</p>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/06/fin-du-support-solaris-par-hp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Taille d&#8217;une page mémoire sous Linux</title>
		<link>http://www.memoire-partagee.fr/2010/05/taille-dune-page-memoire-sous-linux/</link>
		<comments>http://www.memoire-partagee.fr/2010/05/taille-dune-page-memoire-sous-linux/#comments</comments>
		<pubDate>Mon, 17 May 2010 09:00:35 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[mémoire virtuelle]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=664</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Linux.gif" width="65" height="40" alt="" title="linux" /><br/>Pour obtenir la taille d'une page mémoire (en octets) sous Linux, rien de plus simple :

$ getconf PAGESIZE
4096


Ou : 

$ getconf PAGE_SIZE
4096
]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Linux.gif" width="65" height="40" alt="" title="linux" /><br/>Pour obtenir la taille d'une page mémoire (en octets) sous Linux, rien de plus simple :
<pre><blockquote>
$ getconf PAGESIZE
4096
</blockquote></pre>

Ou : 
<pre><blockquote>
$ getconf PAGE_SIZE
4096
</blockquote></pre>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/05/taille-dune-page-memoire-sous-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caractéristiques d&#8217;un serveur Xen</title>
		<link>http://www.memoire-partagee.fr/2010/05/caracteristiques-dun-serveur-xen/</link>
		<comments>http://www.memoire-partagee.fr/2010/05/caracteristiques-dun-serveur-xen/#comments</comments>
		<pubDate>Mon, 10 May 2010 09:00:46 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[virtualisation]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=654</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Linux.gif" width="65" height="40" alt="" title="linux" /><br/>Lorsqu'on administre un serveur virtualisé sous Xen depuis son Dom0, bon nombre de commandes traditionnelles que l'on peut passer  pour observer l'état du système se réfèrent au Dom0 lui-même, et ne permettent pas d'observer les caractéristiques physiques du serveur lui-même. C'est en particulier vrai pour les commandes affichant l'état de la mémoire (free, vmstat, top, [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Linux.gif" width="65" height="40" alt="" title="linux" /><br/><p style="text-align: justify;">Lorsqu'on administre un serveur virtualisé sous Xen depuis son Dom0, bon nombre de commandes traditionnelles que l'on peut passer  pour observer l'état du système se réfèrent au Dom0 lui-même, et ne permettent pas d'observer les caractéristiques physiques du serveur lui-même. C'est en particulier vrai pour les commandes affichant l'état de la mémoire (<em>free</em>, <em>vmstat</em>, <em>top</em>, ...).</p>
<p style="text-align: justify;">Pour afficher les caractéristiques du serveur, on va utiliser la commande <span style="color: #800000;">xm info</span> :</p>
<pre><blockquote># xm info | egrep &quot;nr|core|socket|memory&quot;
nr_cpus                : 8
nr_nodes               : 1
sockets_per_node       : 1
cores_per_socket       : 4
threads_per_core       : 2
total_memory           : 4085
free_memory            : 1
</blockquote></pre>
<p style="text-align: justify;">On observe ici un serveur avec 1 processeur quad-core avec hyper-threading activé, et 4 Go de RAM.</p>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/05/caracteristiques-dun-serveur-xen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Afficher l&#8217;état du lien réseau sous Solaris</title>
		<link>http://www.memoire-partagee.fr/2010/04/afficher-letat-du-lien-reseau-sous-solaris/</link>
		<comments>http://www.memoire-partagee.fr/2010/04/afficher-letat-du-lien-reseau-sous-solaris/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 09:00:09 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[solaris]]></category>
		<category><![CDATA[réseau]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=651</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Solaris.gif" width="65" height="40" alt="" title="solaris" /><br/>Pour afficher le statut des liens réseaux physiques sous Solaris, on utilise la commande dladm (pour data-link administration) :

# dladm show-dev
e1000g0         link: up        speed: 1000  Mbps       duplex: full
e1000g1      [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Solaris.gif" width="65" height="40" alt="" title="solaris" /><br/><p style="text-align: justify;">Pour afficher le statut des liens réseaux physiques sous Solaris, on utilise la commande <span style="color: #800000;">dladm </span>(pour <em>data-link administration</em>) :</p>

<pre><blockquote># dladm show-dev
e1000g0         link: up        speed: 1000  Mbps       duplex: full
e1000g1         link: up        speed: 1000  Mbps       duplex: full
e1000g2         link: up        speed: 1000  Mbps       duplex: full
e1000g3         link: unknown   speed: 0     Mbps       duplex: half</blockquote></pre>
La commande dladm permet également d'afficher et de controler des fonctions plus pointures, comme l'agrégation de liens, ou la création de multiples liens sur une interface donnée.]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/04/afficher-letat-du-lien-reseau-sous-solaris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Commandes utiles &#8211; preap</title>
		<link>http://www.memoire-partagee.fr/2010/04/commandes-utiles-preap/</link>
		<comments>http://www.memoire-partagee.fr/2010/04/commandes-utiles-preap/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 09:00:26 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[solaris]]></category>
		<category><![CDATA[processus]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=645</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Solaris.gif" width="65" height="40" alt="" title="solaris" /><br/>On rencontre de temps en temps des processus appelés zombis. Rien à voir avec un film de Georges A. Romero, il s'agit d'un phénomène beaucoup plus prosaïque. Quand un processus se termine, pratiquement toutes les ressources associées sont libérées, à l'exception de l'entrée correspondante dans la table des processus de l'OS. La raison en est [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Solaris.gif" width="65" height="40" alt="" title="solaris" /><br/><p style="text-align: justify;">On rencontre de temps en temps des processus appelés <em>zombis</em>. Rien à voir avec <a href="http://fr.wikipedia.org/wiki/La_Nuit_des_morts-vivants" target="_blank">un film de Georges A. Romero</a>, il s'agit d'un phénomène beaucoup plus prosaïque. Quand un processus se termine, pratiquement toutes les ressources associées sont libérées, à l'exception de l'entrée correspondante dans la table des processus de l'OS. La raison en est simple : le processus parent doit pouvoir récupérer le code de retour de son processus fils, on ne peut donc pas tout effacer brutalement.</p>
<p style="text-align: justify;">Typiquement, la suppression de l'entrée dans la table des processus se fait donc au moment où le parent récupère ce code retour, c'est ce qu'on appelle le <em>reaping</em> (the Reaper étant notre Grande Faucheuse). Si le processus parent, pour une raison où pour une autre, ne lit pas ce code, l'entrée reste présente dans la table des processus. Voyons donc à quoi ces zombis ressemblent, et comment s'en débarrasser.</p>
<span id="more-645"></span>
<p style="text-align: justify;">En soit, c'est généralement peu gênant, puisqu'à part l'entrée dans la table des processus, il n'y a plus rien : ni mémoire consommée, ni CPU utilisé. J'y vois cependant deux inconvénients :</p>

<ul>
	<li>la table des processus a une table limitée (30000 entrées par défaut), et chaque zombi occupe une place, donc si on en génère beaucoup, cela peut devenir problématique sur un système chargé</li>
	<li>le zombi est <a href="http://images.google.fr/images?hl=fr&amp;q=zombi&amp;um=1&amp;ie=UTF-8&amp;sa=N&amp;tab=wi" target="_blank">vraiment, vraiment laid</a> (et en plus il ne sent pas bon)</li>
</ul>
Fort heureusement, il est possible de se substituer au parent négligent et de permettre enfin à ces zombis de trouver le repos éternel.

Voyons déjà comment apparaît un zombi sur le système :
<pre><blockquote>$ ps -edf | grep defunct
 daniel     7542  7541   0        - ?           0:00 &lt;defunct&gt;
 daniel     7450  7449   0        - ?           0:00 &lt;defunct&gt;
 daniel     7546  7545   0        - ?           0:00 &lt;defunct&gt;
 daniel     7544  7543   0        - ?           0:00 &lt;defunct&gt;
</blockquote></pre>
Ou encore :
<pre><blockquote>$ ps -ecl | grep Z
 F S    UID   PID  PPID  CLS PRI     ADDR     SZ    WCHAN TTY         TIME CMD
 0 Z  59002  7450  7449    -   0        -      0        - ?           0:00 &lt;defunct&gt;
</blockquote></pre>
Pour les supprimer, on va utiliser la commande preap :
<pre><blockquote>$ preap 7450
7450: exited with status 0
$ preap 7542
7542: exited with status 0
$ preap 7544
7544: exited with status 0
$ preap 7546
7546: exited with status 0
$ ps -edf | grep defunct
$</blockquote></pre>
Et voilà, bigrement plus efficace que le héros de <a href="http://fr.wikipedia.org/wiki/Braindead" target="_blank">Brain Dead</a>!

A noter, si vous souhaitez créer manuellement un zombi pour vos tests, vous pouvez utiliser la commande suivante, fournie par l'excellent <a href="http://www.c0t0d0s0.org/archives/4778-Less-known-Solaris-features-Getting-rid-of-Zombies.html" target="_blank">c0t0d0s0.org </a>:
<blockquote>$ nohup perl -e &quot;if (fork()&amp;gt;0) {while (1) {sleep 100*100;};};&quot;</blockquote>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/04/commandes-utiles-preap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bonding sous RedHat Linux</title>
		<link>http://www.memoire-partagee.fr/2010/03/bonding-sous-redhat-linux/</link>
		<comments>http://www.memoire-partagee.fr/2010/03/bonding-sous-redhat-linux/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 09:00:29 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[bonding]]></category>
		<category><![CDATA[réseau]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=601</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Linux.gif" width="65" height="40" alt="" title="linux" /><br/>Le bonding d'interfaces réseaux sous Linux permet d'agréger plusieurs interfaces physiques en une seule interface virtuelle. Les deux principales raisons d'utiliser ce type de technologie sont d'une part l'augmentation de la bande passante, et d'autre part la redondance, qui permet donc de sécuriser un accès réseau. Cette solution contient notamment une implémentation du protocole 802.3ad [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Linux.gif" width="65" height="40" alt="" title="linux" /><br/><p style="text-align: justify;">Le <a href="http://sourceforge.net/projects/bonding/files/Documentation/12%20November%202007/bonding.txt/download" target="_blank"><em>bonding</em></a> d'interfaces réseaux sous Linux permet d'agréger plusieurs interfaces physiques en une seule interface virtuelle. Les deux principales raisons d'utiliser ce type de technologie sont d'une part l'augmentation de la bande passante, et d'autre part la redondance, qui permet donc de sécuriser un accès réseau. Cette solution contient notamment une implémentation du <a href="http://en.wikipedia.org/wiki/802.3ad" target="_blank">protocole 802.3ad de l'IEEE</a>.</p>
<p style="text-align: justify;">Voyons donc les différents types de bonding, comment déclarer une interface réseau en bonding, et les manipulations propres au bonding sur une interface active. Comme pour mes autres articles récents sur Linux, le cas considéré ici est celui d'une RedHat Enterprise Linux (ou plus simplement RHEL).</p>
<span id="more-601"></span>
<h2>Différents modes de bonding</h2>
<p style="text-align: justify;">Le mode de bonding se définit dans le fichier /etc/modprobe.conf :</p>

<pre><blockquote>alias bond0 bonding
options bond0 miimon=100 mode=1</blockquote></pre>
<p style="text-align: justify;">C'est l'option <em>mode</em> qui détermine le type de bond :</p>

<ul>
	<li>mode=0 : round-robin (<em>balance-rr</em>) : les paquets sortent alternativement par chaque interface physique disponible</li>
	<li>mode = 1 : actif/backup (<em>active-backup</em>) : une seule interface physique est utilisée, et le bond bascule sur l'autre en cas de perte de lien</li>
	<li>mode = 2 : répartition par MAC (<em>balance-xor</em>) : pour chaque nouvelle MAC de destination, on sélectionne alternativement une interface physique disponible, mais les paquets à destination d'une MAC donnée sortiront toujours par la même interface</li>
	<li>mode = 3 : broadcast (<em>broadcast</em>) : tous les paquets sont transmis sur toutes les interfaces physiques</li>
	<li>mode = 4 : 802.3ad (<em>802.3ad</em>) : agrégation de liens dynamique, nécessite un switch supportant ce protocole</li>
	<li>mode = 5 : répartition de charge en émission (<em>balance-tlb</em>) : la répartition des paquets sortants sur les interfaces physiques se fait en fonction de leur charge réelle (calculée à partir de leur vitesse), mais les paquets entrants arrivent sur l'interface active, l'autre prenant le relais en cas de panne</li>
	<li>mode = 6 : (<em>balance-alb</em>) : identique au mode 5, avec en plus une répartition de charge sur les paquets entrants (basée sur la charge des interfaces), le driver interceptant les requêtes ARP pour envoyer les adresses de différentes interfaces physiques à des pairs différents</li>
</ul>
Les modes les plus couramment utilisés sont les 4 premiers.
<h2>Détection d'une panne</h2>
On peut utiliser deux modes distincts pour détecter une panne sur une interface:
<ul><li>l'état du lien ethernet : avec l'option <em>miimon=XX</em>, on suit l'état du lien MII (<em>media-independent interface</em>), la valeur XX étant l'intervalle de test en millisecondes</li>
<li>la recherche d'une adresse IP spécifique via le protocole ARP : dans ce cas, le bond essaie d'obtenir l'adresse MAC associée à l'IP spécifiée. On utilise pour cela les options <em>arp_interval=XX</em> où XX est l'intervalle entre 2 tests en millisecondes, et <em>arp_ip_target=XX.XX.XX.XX</em> pour spécifier l'IP à tester, par exemple l'IP de la gateway par défaut.
</ul>
Notez que ces deux modes sont incompatibles. Par défaut, les deux modes sont désactivés.

<h2>Déclarer une interface en bonding</h2>
Pour cela, rien de bien compliqué, on va créer un fichier de description de l'interface tout à fait classique dans le répertoire /etc/sysconfig/network-scripts :
<pre><blockquote># cat ifcfg-bond0
DEVICE=bond0
IPADDR=1.2.3.4
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=none</blockquote></pre>
<p style="text-align: justify;">On va ensuite attribuer des interfaces physiques à cette interface virtuelle, en modifiant leurs propres fichiers de description :</p>

<pre><blockquote># cat ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
MASTER=bond0
SLAVE=yes

# cat ifcfg-eth2
DEVICE=eth2
ONBOOT=yes
BOOTPROTO=static
MASTER=bond0
SLAVE=yes</blockquote></pre>
<h2>Observer une interface en bonding</h2>
<p style="text-align: justify;">Une fois l'interface montée, on peut l'observer dans /proc/net/bonding. Les adresses MAC sont anonymisées, mais à ce niveau, on voit les adresse physiques de chaque interface, sachant que le bond en lui-même ne présentera qu'une seule adresse MAC, celle de la première interface physique utilisée. Dans notre cas, il s'agit d'un bond actif/passif (voir ci-dessous pour plus de détails sur les modes) :</p>

<pre><blockquote>cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:24:81:xx:xx:xx

Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:24:81:xx:xx:xx</blockquote></pre>
<h2>Manipulation du bonding</h2>
<p style="text-align: justify;">Il y a deux types de modifications spécifiques réalisables à chaud sur une interface en bonding :</p>

<ul>
	<li>ajout/suppression d'une interface physique au bond</li>
	<li>changement de l'interface active du bond dans le cas d'un bond actif/passif</li>
</ul>
<h3>Suppression d'une interface physique du bond</h3>
<pre><blockquote># ifenslave -d bond0 eth2
# cat /proc/net/bonding/bond0 | grep Slave
Primary Slave: None
Currently Active Slave: eth1
Slave Interface: eth1
</blockquote></pre>
<h3>Ajout d'une interface physique au bond</h3>
<pre><blockquote># ifenslave bond0 eth2
# cat /proc/net/bonding/bond0 | grep Slave
Primary Slave: None
Currently Active Slave: eth1
Slave Interface: eth1
Slave Interface: eth2</blockquote></pre>
<h3>Changement de l'interface active dans un bond actif/passif</h3>
<pre><blockquote># ifenslave -c bond0 eth2
# cat /proc/net/bonding/bond0 | grep Slave
Primary Slave: None
Currently Active Slave: eth2
Slave Interface: eth1
Slave Interface: eth2</blockquote></pre>
</blockquote>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/03/bonding-sous-redhat-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Utiliser DTrace pour tracer un accès disque</title>
		<link>http://www.memoire-partagee.fr/2010/03/utiliser-dtrace-pour-tracer-un-acces-disque/</link>
		<comments>http://www.memoire-partagee.fr/2010/03/utiliser-dtrace-pour-tracer-un-acces-disque/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 09:00:58 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[solaris]]></category>
		<category><![CDATA[dtrace]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=583</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Solaris.gif" width="65" height="40" alt="" title="solaris" /><br/>Dans des environnements Solaris, on rencontre de temps à autres des tentatives d'accès à des filesystems automontés qui n'existent pas, typiquement à cause de règles génériques dans une map d'automontage, ou tout simplement pour des accès à l'interface /net.
Jusqu'à Solaris 10, il était virtuellement impossible de déterminer qui était à l'origine d'un tel accès. Avec [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Solaris.gif" width="65" height="40" alt="" title="solaris" /><br/><p style="text-align: justify;">Dans des environnements Solaris, on rencontre de temps à autres des tentatives d'accès à des filesystems automontés qui n'existent pas, typiquement à cause de règles génériques dans une map d'automontage, ou tout simplement pour des accès à l'interface /net.</p>
<p style="text-align: justify;">Jusqu'à Solaris 10, il était virtuellement impossible de déterminer qui était à l'origine d'un tel accès. Avec DTrace, ça devient non seulement possible, mais même franchement simple.</p>
<p style="text-align: justify;"><span id="more-583"></span>On va pour cela simplement tracer l'ensemble des appels systèmes de type <em>stat</em>, qui sont généralement utilisés dans ce type de situation pour tester l'existence d'un fichier, vérifier ses droits, etc.</p>
<p style="text-align: justify;">Voilà un exemple de requête possible, affichant PID, PPID, nom du processus et l'argument passé à l'appel système, autrement dit le nom du fichier :</p>
<pre><blockquote>
# dtrace -n &#039;syscall::stat*:entry { printf(&quot;--- %d --- %d --- %s - %s&quot;,pid,ppid,
                                  execname,copyinstr(arg0)); }&#039;
dtrace: description &#039;syscall::stat*:entry &#039; matched 5 probes
CPU     ID                    FUNCTION:NAME
  4   4110        stat:entry --- 13973 --- 12099 --- emagent - /var/adm/utmp
  4   4110        stat:entry --- 25122 --- 25107 --- bptm - /etc/resolv.conf
  4   4110        stat:entry --- 25122 --- 25107 --- bptm - /etc/resolv.conf
  4   4110        stat:entry --- 25122 --- 25107 --- bptm - /usr/openv/netbackup/bp.conf
  4   4110        stat:entry --- 25122 --- 25107 --- bptm - /usr/openv/netbackup/bp.conf
^C
</blockquote></pre>
<p style="text-align: justify;">Etant donné que le processus responsable de la requête n'existe pas forcément plus de quelques instants, il vaut mieux ne pas se contenter du PID et du nom du processus, on affichera donc également son uid/gid pour savoir à qui il appartient. Et comme tout ça n'est pas forcément très lisible, on peut rajouter un petit grep au bout. Mettons que l'on cherche à tracer les tentatives d'accès à /net/inexistant :</p>
<pre><blockquote># dtrace -n &#039;syscall::stat*:entry { printf(&quot;pid=%d - uid=%d - gid=%d -- %s -- %s&quot;,
                                  pid,uid,gid,execname,copyinstr(arg0)); }&#039; | grep inexistant
dtrace: description &#039;syscall::stat*:entry &#039; matched 5 probes
  4   4462      stat64:entry pid=23621 - uid=1111 - gid=1111 -- bash -- /net/inexistant
</blockquote></pre>
<p style="text-align: justify;">Et voilà, nous avons un coupable, et même si le processus en lui-même a disparu, on sait au moins qu'on peut chercher du coté du user 1111.</p>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/03/utiliser-dtrace-pour-tracer-un-acces-disque/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser udpsnoop pour identifier l&#8217;origine d&#8217;une requête DNS</title>
		<link>http://www.memoire-partagee.fr/2010/03/utiliser-udpsnoop-pour-identifier-le-processus-a-lorigine-dune-requete-dns/</link>
		<comments>http://www.memoire-partagee.fr/2010/03/utiliser-udpsnoop-pour-identifier-le-processus-a-lorigine-dune-requete-dns/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 09:00:11 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[solaris]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[réseau]]></category>

		<guid isPermaLink="false">http://www.memoire-partagee.fr/?p=565</guid>
		<description><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Solaris.gif" width="65" height="40" alt="" title="solaris" /><br/>Ayant récemment déployé une infrastructure DNS, j'ai été confronté à quelques serveurs Solaris réalisant des requêtes inattendues, et surtout en grand nombre. Malheureusement, obtenir l'identité des processus réalisant ces requêtes n'est pas simple, et il faut donc ruser quelque peu.
DTrace est d'une aide certaine sur ce sujet, mais même avec cet outil, il n'y a [...]]]></description>
			<content:encoded><![CDATA[<img src="http://www.memoire-partagee.fr/wp-content/Solaris.gif" width="65" height="40" alt="" title="solaris" /><br/><p style="text-align: justify;">Ayant récemment déployé une infrastructure DNS, j'ai été confronté à quelques serveurs Solaris réalisant des requêtes inattendues, et surtout en grand nombre. Malheureusement, obtenir l'identité des processus réalisant ces requêtes n'est pas simple, et il faut donc ruser quelque peu.</p>
<p style="text-align: justify;">DTrace est d'une aide certaine sur ce sujet, mais même avec cet outil, il n'y a pas de solution directe : la résolution de noms n'est pas un appel système que l'on peut tracer simplement, mais est composée d'appel(s) à des librairies, qui sont nettement plus difficiles à tracer, et surtout actuellement impossibles à tracer en dehors du contexte d'un processus. On ne peut donc pas décider simplement de tracer tous les appels à la libresolv du système, par exemple ...</p>
<p style="text-align: justify;"><span id="more-565"></span>Pour tracer les appels DNS, j'ai donc utilisé une combinaison de deux outils :</p>

<ul>
	<li><a href="http://www.brendangregg.com/DTrace/udpsnoop.d" target="_blank">udpsnoop.d,</a> un script DTrace de <a href="http://www.brendangregg.com/" target="_blank">Brendan Gregg</a>, l'un des maîtres incontestés de la discipline</li>
	<li>snoop, pour tracer en parallèle les requêtes DNS</li>
</ul>
<p style="text-align: justify;">L'outil udpsnoop est censé fournir directement la liste des requêtes UDP émises ou reçues par le serveur, en indiquant le processus concerné, ainsi que les machines sources et destinations avec les ports associés.</p>
<p style="text-align: justify;">Hélas, j'ai rapidement découvert que dans le cas des requêtes DNS, les IP ne sont pas correctement identifiées :</p>
<pre><blockquote>
# ./udpsnoop.d 
  UID    PID LADDR           LPORT DR RADDR           RPORT  SIZE CMD
    0  23291 4.0.0.0             0 -&gt; 255.255.0.0         9 18446744073709551608 nscd
    0  23291 4.0.0.0             0 -&gt; 255.255.0.0         9 18446744073709551608 nscd
    0  23291 4.0.0.0             0 -&gt; 255.255.0.0         9 18446744073709551608 nscd
</blockquote></pre>
<p style="text-align: justify;">C'est donc pour cela que j'utilise snoop en parallèle, avec un filtre permettant de n'afficher que les requêtes m'intéressant, du type :</p>
<pre><blockquote>
# snoop -rd e1000g0 host 1.2.3.4 and port 53
1.2.3.100 -&gt; 1.2.3.4 DNS C toto.mondomaine. Internet Addr ?
1.2.3.4 -&gt; 1.2.3.100 DNS R toto.mondomaine. Internet Addr 1.2.3.101
</blockquote></pre>
<p style="text-align: justify;">Dans cet exemple, e1000g0 est l'interface de sortie vers le serveur DNS, dont l'IP est 1.2.3.4.</p>
<p style="text-align: justify;">Je peux donc maintenant voir s'afficher de manière synchrone à la fois les requêtes DNS circulant sur le réseau, et les processus générant du trafic UDP. Avec un peu de chance, et surtout s'il n'y a pas trop de trafic, on peut rapidement identifier les processus réalisant ces appels. Notez simplement qu'il y a généralement un petit décalage, chez moi les paquets s'affichent dans snoop avec presque une demi-seconde d'avance sur udpsnoop.</p>
<p style="text-align: justify;">Sauf que ... sauf que dans l'exemple ci-dessus, le seul processus à réaliser des requêtes est le nscd, le cache des services de noms, ce qui est très logique : quand il est actif, la fonctionnalité de requête aux services de noms l'interroge et priorité, et s'il n'a pas l'information, c'est lui qui se charge d'interroger les services concernés. Il nous faut donc le désactiver temporairement :</p>
<blockquote># svcadm disable name-service-cache</blockquote>
<p style="text-align: justify;">Ceci fait, on peut utiliser udpsnoop correctement et visualiser les noms des processus qui sont réellement à l'origine des demandes, en notant au passage que l'adresse RADDR a ses digits affichés dans l'ordre inverse :</p>
<pre><blockquote># ./udpsnoop.d 
  UID    PID LADDR           LPORT DR RADDR           RPORT  SIZE CMD
 2099  13973 4.0.0.0             0 -&gt; 255.255.0.0         9 18446744073709551608 emagent
    0   6864 0.0.0.0         32802 -&gt; 100.3.2.1        3207                   71 vxpal
    0   6935 0.0.0.0         32817 -&gt; 100.3.2.1        3207                   71 vxpal
 2099  13973 4.0.0.0             0 -&gt; 255.255.0.0         9 18446744073709551608 emagent
    0   4970 4.0.0.0             0 -&gt; 255.255.0.0         9 18446744073709551608 vmd
    0   4970 4.0.0.0             0 -&gt; 255.255.0.0         9 18446744073709551608 vmd
</blockquote></pre>
<p style="text-align: justify;">Et bien entendu, on n'oublie pas à la fin de réactiver le nscd :</p>
<blockquote># svcadm enable name-service-cache</blockquote>]]></content:encoded>
			<wfw:commentRss>http://www.memoire-partagee.fr/2010/03/utiliser-udpsnoop-pour-identifier-le-processus-a-lorigine-dune-requete-dns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
