Reparation Raid hardware sur carte nVidia

Comme évoqué dans un autre post, j’ai eu l’occasion ce jour de remonter un raid mirroring dont l’un des disque a rendu l’âme.
J’espérai cette manip transparente avec l’outil du bios, j’imaginais celui-ci re-clonant les disques … et bien non. sachez, amis LINUXIENS que dans une telle situation, il faudra installer un Windows pour lancer l’utilitaire nVidia vous permettant de procéder à la reconstruction. Ce n’est pas très long à condition d’avoir un disque en rab et les install du dit OS …
Bref, pour ma part, la prochaine réinstalle se fera avec un soft RAID Linux dont l’usage est finalement plus simple. Dommage car à la création ce mirroring nVidia etait très pratique..;

Quand tout va mal… tout va mal !

En terme de backup je suis plutot parano, non pas que mes données aient beaucoup de valeur, mais plutôt qu’il compter pas mal de temps pour les reconstituer et que je n’aime pas forcement me retrouver en mode gestion de crise pour mes sites perso… bref, j’ai additionné plusieurs systèmes de sécurité et mes données sont donc sur 3 disques : 2 en raid 0 + 1 de backup contenant des archives compressés… On se dit toujours que ceci est superflus et que l’une des deux solutions suffiraient amplement, jusqu’au jour comme celui lui ou après 5 ans de bons et loyaux service l’un des disques rend l’âme et que ce même jour le NAS stockant les backup décide lui de l’accompagner après 4 ans de fonctionnement. une retraite bien mérité pour ces éléments, je n’ai pas forcement à me plaindre… mais le même jour, il faut l’avouer, c’est tout de même l’expression qu’au hasard il ne faut jamais négliger l’addition de la lois de l’emmerdement maximum.
J’ajoute que bien entendu, il n’est pas question de surtension ou quoi que ce soit, mais bien de morts la mort naturelle de ses composants, l’un d’eux ayant déjà montré quelques signes de faiblesses.
Au final je ne regrette pas mes solutions en place qui ont fonctionné : 2 vis enlevées plus tard, la machine repartait … reste à réparer maintenant.

Tutoriel Ajax – Onglets

(Article rédigé par un groupe d’étudiants d’IUT dans le cadre d’un projet tutoré)

Dans ce tutoriel nous allons voir comment mettre en œuvre une page avec divers onglets.

Les pages qui seront spécifiques à un seul onglet seront sauvegardées dans une base de données.

Nous verrons les différents fichiers utiles à cette application tel que :

-un fichier CSS pour la mise en forme de la page principale

-un fichier HTML pour la page principale qui contient nos onglets

-un fichier JS pour l’utilisation des technologies Ajax et le chargement du contenu des onglets

-un fichier PHP pour l’accès à la base de données

 

 

DEMO .HTML

Voici notre page html :

 

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>

<title>Onglet</title>

<meta http-equiv=”Content-Type” content=”text/html;charset=utf-8″ />

<!–on fait reference au fichier CSS pour la mise en page –>

<link href=”/ajax/onglet.css” type=”text/css” rel=”stylesheet” media=”all”/>

<!–on fait reference au fichier javascript pour les fonctions –>

<script type=”text/javascript” src=”/ajax/onglet.js”></script>

</head>

 

<body>

<!—on déclare le cadre qui contiendra les onglets et la page qui sera affichée–>

<div id=”onglet”>

< !–ce cadre contiendra seulement les différents onglets et on leurs associe la fonction loadonglet avec en paramètre le numéro de la page à charger –>

<ul id=”menu_onglet”>

<li><a href=”javascript:loadonglet(1)”>premiere page</a></li>

<li><a href=”javascript:loadonglet(2)”>deuxieme page</a></li>

<li><a href=”javascript:loadonglet(3)”>troisieme page</a></li>

</ul>

<!–le cadre contiendra la page qui sera affichée–>

<div id=”page”></div>

</div>

</body>

</html>

 

 

ONGLET .CSS

Le fichier CSS sert à la mise en forme de la page avec : une partie qui contiendra les différents onglets et une partie qui contiendra le contenue de la page qui sera chargé.

body {

font-size:12px;

color:#333;

padding:10px;

}

ul li {

list-style-type:none;

margin-left:10px;

}

/*** Onglets */

div#onglet {}

div#onglet ul#menu_onglet {

list-style-type: none;

margin: 2px 0px;

padding: 0px;

}

/*** Listes des onglet */

div#onglet ul#menu_onglet li {

display: inline;

}

div#onglet ul#menu_onglet li {

border-top: 1px solid #ccc;

border-left: 1px solid #ccc;

border-right: 1px solid #ccc;

background:white;

padding: 4px 12px 2px 12px;

}

div#onglet ul#menu_onglet li:hover {

border-bottom: 1px solid #fff;

cursor:pointer;

}

/*** Contenu des onglet */

div#onglet div#page {

padding: 10px;

width:550;

border-top: 1px solid #ccc;

border-left: 1px solid #ccc;

border-right: 1px solid #ccc;

border-bottom: 1px solid #ccc;

}

 

Onglet.js

 

/*

Fonction qui crée un objet XHR.

Cette fonction initialisera la valeur dans la variable globale “requete”

*/

 

/* On crée une variable qui contiendra l’objet XHR */

var requete = null;

function creerRequete() {

try {

/* On essaye de créer un objet XmlHTTPRequest */

requete = new XMLHttpRequest();

} catch (microsoft) {

/* Si cela ne marche pas, on a peut-être affaire à un navigateur de Microsoft. On tente alors de créer un objet ActiveX */

try {

requete = new ActiveXObject(‘Msxml2.XMLHTTP’);

} catch(autremicrosoft) {

/* Autre méthode si la première n’a pas marché */

try {

requete = new ActiveXObject(‘Microsoft.XMLHTTP’);

} catch(echec) {

/* Si aucune méthode ne fonctionne, on laisse l’objet vide*/

requete = null;

}

}

}

if(requete == null) {

alert(‘Votre navigateur ne semble pas supporter les object XMLHttpRequest.’);

}

}

 

 

function loadonglet(num) {

/* On crée notre super objet XHR global */

creerRequete();

/* On construit à l’avance notre URL en passant les parmètre en GET. Le paramètre sera le numéro de l’onglet qui est cliqué possédant l’identifiant ‘num’. */

var url = ‘onglet.php?onglet=’+num;

/* On édite les propriété de l’objet : type de paramètre, url (avec paramètres) et une option autorisant une réponse du serveur */

requete.open(‘GET’, url, true);

/* On initialise la fonction de renvoi d’information : Après vérification que la requête est valide on met à jour le contenu HTML de la balise possédant l’identifiant ‘page’ avec la réponse du serveur */

requete.onreadystatechange= function() {

if(requete.readyState == 4) {

if(requete.status == 200) {

document.getElementById(‘page’).innerHTML = requete.responseText;

}

}

};

/* C’est partit ! On envoi la requête XHR au serveur */

requete.send(null);

}

 

 

ONGLET .PHP

 

Notre base de données contient une table nommée « baseonglet » qui contient deux champs :

Un champ nommé « num » qui est la clé primaire qui correspond au numéro de la page

Un champ nommé valeur qui correspond au contenue de la page qui porte le numéro « num »

Pour cette exemple notre table contenait 3 lignes :

Num Valeur
1 Ceci est la page n°1
2 Ceci est la page n°2
3 Ceci est la page n°3

 

 

<?php

//on récupère le numéro de la page à charger qui est passé en paramètre par la méthode GET

$num=$_GET[‘onglet’];

//on se connecte à la base de donnée

$SQL = mysql_connect(‘localhost’,’root’,”) or die (“erreur de connexion”);

//on selectionne notre base qui se trouve dans notre base de données contenant nos pages .

mysql_select_db(‘baseonglet’,$SQL) or die (“erreur de connexion base”);

//on retourne la valeur (qui correspond au contenue de la page numéro ‘num’) contenue dans

//la table liste page

$result=mysql_query(“SELECT valeur FROM listepage where num=”.$num);

$val=mysql_fetch_array($result);

//on affiche le contenue

echo $val[“valeur”];

mysql_close();

?>

 

Nous avons pu voir dans cet exemple qu’il est très simple de mettre en œuvre un site ou tout simplement une page internet avec plusieurs onglets permettant de rafraichir que le cadre qui contient le texte de nos divers onglets.

Bien évidement il faut pour cela connaitre les langages PHP et JavaScript.

Opensuse 10.3, problem d’ouverture de session X multiples

Vous savez, le bouton, lorsque l’on est sur l”ecran ce veille, qui permet à une autre utilisateur d’ouvrir une session … et bien sur ma Suse 10.3, il a disparu !!! etrange phénomène ! Pour corriger celà, j’ai du éditer le fichier /etc/X11/xdm/Xservers pour y ajouter les lignes suivantes:
:1 local reserve /usr/bin/X -nolisten tcp -br vt8
:2 local reserve /usr/bin/X -nolisten tcp -br vt9
J’ai ensuite créé un lien symbolique de ce fichier vers /opt/kde3/share/config/kdm/

Utilisation de SSHFS – montage au travers de ssh

SSHFS est une nouvelle façon de monter des partitions réseau. Par rapport à nfs, sshfs à l’avantage de ne nécessiter aucune configuration coté serveur et de pouvoir être utilisé en mode utilisation avec le mode fuse (file system in user mode)

Pour utiliser sshfs, il faut l’installer ainsi que fusermount ce sont en général deux paquets fournis avec les installs de Linux.
L’usage est ensuite simple : coté client, il faut taper une commande comme suit pour monter un répertoire:
sshfs user@serveur:/repertoire mountPoint Le répertoire répertoire sera alors monté dans “mountPoint”.
Le démontage se fait avec la commande : fusermount -u moutPoint

Coté débit, mes tests sur réseaux donnent 5.3MB/S alors que nfs me donne 10Mb/s environ. Les données sont toutefois cryptées, ce qui peut être considéré comme un plus.

Pour que cvs soit utilisable sur un répertoire monté avec sshfs, il faudra que les options -oreaddir_ino -o workaround=rename lors du montage.

Test de performance sur NFS

Un moyen de mesurer la performance de NFS est de lancer sur une système monté, de ce type les commandes suivantes :
time dd if=/dev/zero of=test bs=16k count=16k Cette commande va créer un fichier test dans le répertoire courant, rempli de 0 et de 16384 blocs de 16384 octets (268Mb) ; Le débit et le temps seront affichés comme résultat de l’opération.
time dd if=test of=/dev/null bs=16k count=16k Cette commande lire le fichier test précédemment créé dans le répertoire courant, rempli de 0 et de 16384 blocs de 16384 octets (268Mb) ; Le débit et le temps seront affichés comme résultat de l’opération.

L’optimisation passe par la recherche de la taille de bloc la plus appropriée; cette taille est fixée au montage par les options rsize et wsize. J’ai pour ma part lesrésultats suivants:

  • mount -t nfs xxxx:/home/mpoint testDir -o rw,wsize=512,rsize=512 – Wr 10,2MB/s – Rd 11,0MB/s
  • mount -t nfs xxxx:/home/mpoint testDir -o rw,wsize=1024,rsize=1024 – Wr 10,3MB/s – Rd 11,1MB/s
  • mount -t nfs xxxx:/home/mpoint testDir -o rw,wsize=2048,rsize=2048 – Wr 10,4 MB/s – Rd 11,4 MB/s
  • mount -t nfs xxxx:/home/mpoint testDir -o rw,wsize=8192,rsize=8192 – Wr 10,2 MB/s – Rd 10,9 MB/s

Bref en conclusion, je dirai que l’impact de ces paramètres est plutôt très limité !!

Calfeutrage de boîtier et nouveau ventilateur

Comme je l’ai évoqué, j’ai complété la solution par un calfeutrage du boîtier : la carte mère, si petite dans ce grand boîtier provoquait l’effet d’un appartement vide dans lequel on emménage – la raisonnance ! J’ai donc voulu testé l’effet d’une mousse isophonique que j’ai trouvé sans mal sur internet chez look-pc sous la forme suivante :

Il s’agit de 4 planche de mousses autocollantes à  découper soi-même au format du boîtier. Il est dit que c’est suffisant pour un grand tour … pour ma part je n’en ai consommé que la moitié. Pour le résultat suivant:

Je ne sais pas trop comment qualifier le résultat, d’autant que ma solution est déjà  très très silencieuse, mais ce qui est sûr c’est que les variations de bruits qui trahissaient les accélérations des ventilateurs sont devenues insensibles. Je peux donc en conclure que l’apport est positif, sans être vraiment à  même de le quantifier. Etant donné qu’il me reste la moitié de la boite à  disposition, je ferai un essai sur une de mes machines bien bruyantes de mon placard à  serveurs.

Dans le même temps, j’ai commandé un ventilateur de 120mm annoncé pour 8db :

La livraison est cette fois complète avec visserie + attaches plastiques anti-vibration et multiples connectiques d’alimentation… Coté bruit, rien à  redire, c’est vraiment silencieux … par contre le souffle est loin de d’atteindre le niveau de l’ancien modèle … en même temps, il n’y a pas de mystère… Au final, c’est une bonne solution qui permet un faible ventilation très silencieuse mais suffisante pour abaisse la température.

Carte vidéo MSI HD 2600 Pro fanless et rotation du grille paim

On m’en avait parlé, mais je n’avais pas osé le faire alors que j’espérai de cette carte un bon résultat. Suite à  tous mes débouars, je me suis permis quelques manipulations qui pourraient lui être dommageables. Le but était de déplacer l’énorme radiateur, tout d’abord pour qu’il passe plus loin des barrettes de SDRAM. Cette opération se fait sans le moindre mal en forçant légèrement sur les caloduques en cuivre pour les pliers différemment.
Cette manip ayant bien fonctionné, j’ai poussé jusqu’à  positionner le radiateur à  90% ce qui permet de l’éloigner au maximum de la carte mère, mais aussi de le positionner juste devant le ventilateur du boîtier. J’airai souhaité y ajouter 180° de plus pour l’envoyer de l’autre coté, mais cette manip ne me semble pas possible, sans outils tout du moins. Le résultat à  90° est pas mal ; voici les photos :