lundi 20 mai 2013

POWERCLI: list vMotion, Storage vMotion, and who triggered it

· 2 commentaires

A few months ago, I started in a new company. After an audit of their VMware infrastructure, I was very surprised to discover that DRS was disabled. The reason was that they were afraid of too much VMs moving, or doing ping-pong between hosts. Moreover, they never investigated the possibility of DRS rules.

So in order to improve the inventory, I had to convince them to activate DRS.

The first thing I suggested was to introduce DRS rules. Indeed, there was clustered VMs, so it is better to split them on different hosts. Moreover, as we had a double room datacenter, it was even better to have one node in each room.
We had also some VMs that must run together.

Secondly, I had to convince them that VMs will not move so much. So I suggested to monitor all the VMotions, and generate some alerts in the Nagios console:
- a warning for more than 10 vmotions in the last 24 hours
- a critcal for more than 20 vmotions in the last 24 hours

I also proposed to keep a trace of all the vMotions in a database, so we could do reporting in our SQLReporting Dashboard. But I needed a script to collect the vMotions data. I found one on Alan Remouf's blog: http://www.virtu-al.net/2012/09/20/vmotion-and-svmotion-details-with-powercli/

But it was not perfect for my needs. So I improved its function. The code is here below. Let me know if you have any comment.

function Get-VMotionDuration {
<#
.SYNOPSIS
 This function returns the list of VMotions and Storage VMotions that occured during a specified period.
.DESCRIPTION
 This function returns the list of VMotions and Storage VMotions that occured during a specified period.
 You can specify if you want DRS triggered VMotions, manual VMotions or both.
.NOTES 
    File Name   : Get-VMotionDuration.ps1 
    Author      : David Vekemans - based on an original script from  Alan Renouf
 Date        : 17/05/2013
 Version     : 1.00
 History     : 1.00 - 17/05/2013 - Initial release
.LINK
 http://geekdav.blogspot.be/2013/05/powercli-list-vmotion-storage-vmotion.html
 http://www.virtu-al.net/2012/09/20/vmotion-and-svmotion-details-with-powercli/
.PARAMETER Start
 This parameter specify the start date and time of the period to analyze.
 It must be a DATETIME type.
.PARAMETER Finish
 This parameter specify the end date and time of the period to analyze.
 It must be a DATETIME type.
.PARAMETER DaysOfHistory
 This is another way to give the start and end time of the period to analyze.
 This parameter specify the number of days from now to define the start time.
 The default value is 1 day.
 It must be a INTEGER type.
.PARAMETER Type
 This parameter specify the types pf VMotion that you want to display.
 Possible values are :
 DRS - for DRS triggered VMotions
 MANUAL - for any user triggered VMotions
 BOTH - for all VMotions
 Default value is BOTH.
.OUTPUTS
 The output is a special PSobject (or a table of PSobjects) with the following properties:
  VMName             : name of the VM that was moved
  StartTime          : start time of the vMotion
  EndTime            : end time of the vMotion
  Duration           : duration of the vMotion
  SourceHost         : original host of the VM
  DestinationHost    : new host of the VM
  Type               : type of move vMotion or svMotion
  Trigger            : trigger of move : DRS or MANUAL
  User               : admin who triggered the move (only in case of MANUAL)
.INPUTS
 See the paramater list.
.EXAMPLE
 Get-VMotionDuration -DaysOfHistory 3 -Type DRS
 Name            : VM1
 StartTime       : 16/05/2013 11:32:38
 EndTime         : 16/05/2013 11:36:02
 Duration        : 00:03:23.9130000
 SourceHost      : host06.local
 DestinationHost : host07.local
 Type            : vMotion
 Trigger         : DRS
 User            :
 
 Name            : VM2
 StartTime       : 16/05/2013 11:32:39
 EndTime         : 16/05/2013 11:35:54
 Duration        : 00:03:15.8170000
 SourceHost      : host08.local
 DestinationHost : host09.local
 Type            : vMotion
 Trigger         : DRS
 User            :
 
 
 This command will list all the VMotions done by DRS during the last 3 days.
.EXAMPLE
 Get-VMotionDuration -Start (get-date).addhours(-4) -Finish (get-date) -Type Manual
 VMName          : VM3
 StartTime       : 17/05/2013 09:35:56
 EndTime         : 17/05/2013 09:36:53
 Duration        : 00:00:56.8360000
 SourceHost      : host08.local
 DestinationHost : host09.local
 Type            : vMotion
 Trigger         : MANUAL
 User            : DOMAIN\admin_user
 
 
 This command will list all the VMotions done by any admin during the last 4 hours.
.EXAMPLE
 Get-VMotionDuration 1
 VMName          : VM4
 StartTime       : 16/05/2013 11:41:02
 EndTime         : 16/05/2013 11:42:10
 Duration        : 00:01:08.1000010
 SourceHost      : host07.local
 DestinationHost : host09.local
 Type            : vMotion
 Trigger         : DRS
 User            :
 
 VMName          : VM5
 StartTime       : 17/05/2013 09:35:56
 EndTime         : 17/05/2013 09:36:53
 Duration        : 00:00:56.8360000
 SourceHost      : host08.local
 DestinationHost : host09.local
 Type            : vMotion
 Trigger         : MANUAL
 User            : DOMAIN\admin_user
 
 VMName          : VM6
 StartTime       : 17/05/2013 11:25:57
 EndTime         : 17/05/2013 11:27:06
 Duration        : 00:01:09.0300010
 SourceHost      : host09.local
 DestinationHost : host09.local
 Type            : svMotion
 Trigger         : MANUAL
 User            : DOMAIN\admin_user
 
 
 This command will list all the VMotions during the last day.
#>
  [CmdletBinding()]
  param
  (
    [Parameter(Mandatory=$True,
    ParameterSetName="1",
    Position=0)]
    [datetime]$Start,
 [Parameter(Mandatory=$True,
    ParameterSetName="1",
    Position=1)]
    [datetime]$Finish,
 [Parameter(Mandatory=$True,
    ParameterSetName="2",
    Position=0)]
    [int]$DaysOfHistory = 1,
 [Parameter(Mandatory=$False)]
 [ValidateSet("DRS","Manual","Both")]
    [String]$Type="Both"
  )

  begin {
   write-verbose "Starting function"
 $Type = $Type.toupper()
 if ($DaysOfHistory){
  $Now = Get-Date
  $Start = $Now.AddDays(-$DaysOfHistory)
  $Finish = $Now
 }
 else {
  $DaysOfHistory = ($Finish - $Start).Days
 }
 Write-verbose "Number of days of history is : $DaysOfHistory"
 Write-verbose "Start time is  : $Start"
 Write-verbose "Finish time is  : $Finish"
 $Maxsamples = ($DaysOfHistory+1)*50000
 Write-verbose "Max samples  : $Maxsamples"
 Write-Verbose "Type is : $type"
 $ResultDRS = @()
 $ResultManual = @()
  }

  process {
    write-verbose "Beginning process loop"
 $events = get-vievent -start $Start -finish $Finish -maxsamples $Maxsamples
 if (($Type -eq "DRS") -or ($Type -eq "BOTH")) {
  $relocates = $events | where {($_.GetType().Name -eq "TaskEvent") -and ($_.Info.DescriptionId -eq "Drm.ExecuteVMotionLRO")}
  foreach($task in $relocates){
   $tEvents = $events | where {$_.ChainId -eq $task.ChainId} | Sort-Object -Property CreatedTime
   if($tEvents.Count){
    $obj = New-Object PSObject -Property @{
       VMName = $tEvents[0].Vm.Name
       Type = &{if($tEvents[0].Host.Name -eq $tEvents[-1].Host.Name){"svMotion"}else{"vMotion"}}
       Trigger = "DRS"
       StartTime = $tEvents[0].CreatedTime
       EndTime = $tEvents[-1].CreatedTime
       Duration = New-TimeSpan -Start $tEvents[0].CreatedTime -End $tEvents[-1].CreatedTime
       SourceHost = $tEvents[0].Host.Name
       DestinationHost = $tEvents[-1].Host.Name
       User = $tEvents[0].UserName
       }
    $ResultDRS+=$obj   
   }
  }
 }
 if (($Type -eq "MANUAL") -or ($Type -eq "BOTH")) { 
  $relocates = $events | 
    where {($_.GetType().Name -eq "TaskEvent") -and (($_.Info.DescriptionId -eq "VirtualMachine.migrate") -or ($_.Info.DescriptionId -eq "VirtualMachine.relocate"))}
  foreach($task in $relocates){
   $tEvents = $events | where {$_.ChainId -eq $task.ChainId} | Sort-Object -Property CreatedTime
   if($tEvents.Count){
    $obj = New-Object PSObject -Property @{
       VMName = $tEvents[0].Vm.Name
       Type = &{if($tEvents[0].Host.Name -eq $tEvents[-1].Host.Name){"svMotion"}else{"vMotion"}}
       Trigger = "MANUAL"
       StartTime = $tEvents[0].CreatedTime
       EndTime = $tEvents[-1].CreatedTime
       Duration = New-TimeSpan -Start $tEvents[0].CreatedTime -End $tEvents[-1].CreatedTime
       SourceHost = $tEvents[0].Host.Name
       DestinationHost = $tEvents[-1].Host.Name
       User = $tEvents[0].UserName
       }
    $ResultMANUAL+=$obj 
   }
  }
 } 
  }
  
  end {
   write-verbose "Ending function"
 if ($Type -eq "DRS") {$Result = $ResultDRS}
 if ($Type -eq "MANUAL") {$Result = $ResultMANUAL}
 if ($Type -eq "BOTH") {$Result = $ResultDRS + $ResultMANUAL}
 $Result | Select-Object VMName,StartTime,EndTime,Duration,SourceHost,DestinationHost,Type,Trigger,User | Sort-Object -Property StartTime
  }
}

Read More......

samedi 11 juin 2011

POWERCLI: move ESX/ESXi NICs to a physical switch using its name

· 0 commentaires

Hi all,
I decided to publish on this blog some of my powercli scripts. Google and a lot of blogs already saved me using powercli, so let me share also my experience.

The code of my scripts is not perfect but it is working.


So let's start with a recent issue we had in our environment.
All our ESX/ESXi servers are blades. Each of them has 4 NICs.
2 NICs for the VM and 2 NICs for the console. Of course each NIC used for one function is connected to a different Cisco Switch Stack. That allows us to have network redundancy.

Recently, we had an issue with one of these network stack, so we wanted to move all the active NICs to the second stack. Unfortunately, all our blades are not the same model, and thus the VMNIC teamings are different. So the problem was more complex than just moving all the vmnic0 and vmnic2 as active, and the vmnic1 and vmnic3 as standby.
Hopefully for us, ESX/ESXi provide information on which network switch are connected your NICs, usind CDP (Cisco Discovery Protocol).

So I wrote this little script. The idea is to give as input part of the name of the network switch you want to keep active. This part of the name must be unique of course. The script will then list all the NICs not connected to this switch and move it as standby.

So here is the code:

# $hostlist must contain the list of the hosts on which you want to execute the code
# use any get-vmhost command to fill in this list

# $objSwitchName must contain a part of the name of the network switch you want to failover the NICs
# this part of the name must be unique for each switch

$objSwitchName="SwitchName"

foreach ($objhost in $hostlist) {

# Getting the vSwitches of the host (only 2 in all our servers)
$objVMVswitch = Get-VirtualSwitch -VMhost $objhost

# Put both NICs back active for VM vSwitch
$objVMteaming = Get-NicTeamingPolicy $objVMVswitch[1]
$objNic = $objVMteaming.StandbyNic
Set-NicTeamingPolicy $objVMteaming -MakeNicActive $objNic

# Put both NICs back active for ESX console vSwitch
$objVMteaming = Get-NicTeamingPolicy $objVMVswitch[0]
$objNic = $objVMteaming.StandbyNic
Set-NicTeamingPolicy $objVMteaming -MakeNicActive $objNic

# Generate an array that contains the list of NICs not connected to $objSwitchName
# This list is generated using CDP information of the ESX
$objNicInSwitch = New-Object System.Collections.ArrayList
$objNicInSwitch.Clear()
Get-VMHost $objHost |
%{Get-View $_.ID} |
%{$esxname = $_.Name; Get-View $_.ConfigManager.NetworkSystem} |
%{ foreach($physnic in $_.NetworkInfo.Pnic){
$pnicInfo = $_.QueryNetworkHint($physnic.Device)
foreach($hint in $pnicInfo){
if( $hint.ConnectedSwitchPort.DevId -notlike "*$objSwitchName*" ) {
Write-Host $esxname $physnic.Device
$hint.ConnectedSwitchPort.DevId
$objNicInSwitch.add($physnic.Device)
}
}
}
}

# Now we will move to standby the NICs listed in previous step
# This is a loop that collect the NICs in each vSwitch
# It checks if the NIC is listed in the array $objNicInSwitch
# If yes, then it move the NIC to standby
foreach($phynic in $objNicInSwitch)
{
$objVMVswitch = Get-VirtualSwitch -VMhost $objhost
$objVMteaming = Get-NicTeamingPolicy $objVMVswitch[1]
$objNic = $objVMteaming.ActiveNic
foreach ($teamnic in $objNic)
{
write-host $phynic
write-host $teamnic
if ($phynic -eq $teamnic)
{
Set-NicTeamingPolicy $objVMteaming -MakeNicStandBy $phynic
}
}
$objVMteaming = Get-NicTeamingPolicy $objVMVswitch[0]
$objNic = $objVMteaming.ActiveNic
foreach ($teamnic in $objNic)
{
write-host $phynic
write-host $teamnic
if ($phynic -eq $teamnic)
{
Set-NicTeamingPolicy $objVMteaming -MakeNicStandBy $phynic
}
}
}
}


If you have any questions about this code, don't hesitate to comment the article.

Read More......

mercredi 3 février 2010

Update Firmware of your Samsung LED TV

· 0 commentaires

Since a few months, I bought a Samsung LED TV series 7 (UE46B7000).

After having a quick look at Samsung's website, I found that we could update the firmware of the TV. As I always want my products being up to date, I tried directly.

The process is quite simple : you download the update file from the web, you format a USB key to have it completely empty (I used FAT16), then you launch the downloaded file and you specify to execute the extraction on your USB stick.

After that, you just plug the key into your TV, go to the Update Firmware menu and... the TV was always telling me "cannot find update files".

So I started to search on the web, I found forums speaking about the USB key to use, how to format it : FAT32 instead of default FAT16,...
I tried but it was still not OK.

Finally, I found the solution ! In fact, when I go in the samsung website of my contry, I can download the firmware for my TV UE46B7000. This firmware is T-CHU7DEUC.
But in fact, this is the wrong firmwware !
Indeed, if you look at the rear of the TV, there is a sticker that specify the model as UE46B7000WP. And morre over, if you go in the menu "Contact Samsung" on the TV, on the page 2 it says firmware version : T-CHUCIPDEUC.

So what to do ?

Well go to Samsung Global Download Center : http://www.samsung.com/download/index.aspx?agreement=y. From the menu below, browse to find the exact model of your TV. In my case : UE46B7000WP.
Then you are able to download the correct firmware for your TV.

So I downloaded the file, extract it on the USB key, plug on the TV and perform the upgrade. It worked without any problem !

CQFD

Read More......

samedi 18 octobre 2008

Windows 7 s'appellera Windows 7

· 0 commentaires

C'est désormais officiel, la nouvelle version de Windows qui est un développement chez Microsoft s'appellera Windows 7. Pendant longtemps, ca n'étais qu'un nom de code, c'est maintenant le nom définitif.

Certains d'entre vous feront la remarque que ce n'est pas la septième version mais plutôt la neuvième, d'autre que le build number sera 6.1 (6.0 c'est Vista). Vous avez en effet raison, mais visiblement Microsoft ne s'en soucie guerre...

On en saura plus dans les prochains mois...

David

Read More......

lundi 22 septembre 2008

Corruption de disque : chkdsk est votre sauveur

· 0 commentaires

Avant toute chose, retenez ce conseil : toujours éteindre votre ordinateur Windows via le menu « Démarrer -> Eteindre ». Cela vous évitera bien des problèmes. Je constate en effet que la plupart des utilisateurs « lambda » de mon cercle de connaissances ne respectent déjà pas cette simple recommandation. Plus d’une fois, j’ai donc dû les sauver d’une corruption de disque dur.

Le plus souvent, le résultat de la corruption est un écran bleu avec un code d’arrêt STOP 0x000000ED UNMOUNTABLE_BOOT_VOLUME ou bien STOP: 0x0000007B INACCESSIBLE_BOOT_DEVICE.
Dans ce cas, pour récupérer le disque, un check disk s’avère nécessaire : « chkdsk ». Encore faut-il avoir accès au disque…

Plusieurs possibilités :
1) Le boîtier USB
Dans ce cas, il vaut faut un 2ème ordinateur, ainsi qu’un boîtier USB supportant la technologie du disque défectueux (IDE ou SATA). Il vous suffit donc de démonter le disque de la machine, de la mettre dans votre boîtier et de connecter le tout au 2ème ordinateur. Windows (XP ou Vista) devrait détecter sans peine ce disque et lui assigner une (ou plusieurs) lettre(s). Il suffit donc d’ouvrir une ligne de commande « cmd.exe » et d’exécuter la commande suivante dans cette fenêtre : CHKDSK volume /F /R (où volume est la lettre du disque/partition système – exemple : F:). Attention, l’opération peut prendre beaucoup de temps, suivant la taille de votre disque/partition.
Quand l’opération est terminée, il suffit de remettre le disque dans la machine et de la redémarrer. Cela devrait fonctionner. Notez cependant que vous pourriez avoir perdu des données dans la manœuvre. Si le PC ne redémarre pas, il ne vous reste plus qu’à le réinstaller ou à restaurer un backup dont vous disposeriez.

2) La console de recovery Windows
Cette méthode nécessite d’avoir à portée de la main un CD d’installation de Windows XP ou Vista. (Je vous explique avec un XP car je n’ai jamais fait l’opération sous Vista). Notons également que cette méthode est assez facile si votre disque est IDE, ou si les pilotes du contrôleur SATA sont présents sur le CD de XP (je recommande donc d’avoir la dernière version du CD XP). Dans le cas contraire, il vous faudra une disquette contenant les pilotes SATA. La méthode utilisée pour générer cette disquette dépends très fort des pilotes, je n’entre donc pas en détail sur ce sujet. Google sera votre ami pour vous aider sur le sujet.
Une fois tous les prérequis disponibles, vous devez démarrer votre ordinateur sur le CD. Le setup va se charger, et vous devez choisir de réparer Windows. Durant le setup, vous devrez appuyer sur F6 si vous avez une disquette avec les pilotes, et ce quand le setup l’affiche en bas de l’écran. Une fois après avoir choisi de réparer Windows, vous allez vous retrouver devant une fenêtre de ligne de commande. Il vous faudra exécuter la commande suivante : CHKDSK volume /P /R (où volume est la lettre du disque/partition système – exemple : C:).
A nouveau, l’opération peut prendre beaucoup de temps.
Quand l’opération est terminée, il suffit de redémarrer la machine sur son disque. Cela devrait fonctionner. Notez cependant que vous pourriez avoir perdu des données dans la manœuvre. Si le PC ne redémarre pas, essayez d’appliquer la méthode 1. J’ai pu constater qu’il arrive que la méthode 2 ne sache pas corriger toutes les erreurs, alors que la méthode 1 y arrive. Si après tout ça, le PC ne redémarre toujours pas, il ne vous reste plus qu’à le réinstaller ou à restaurer un backup dont vous disposeriez.

Bon courage,

David

Read More......

mercredi 27 août 2008

Geotagging de vos photos

· 0 commentaires

Amateur de photographie numérique, je mets en ligne mes photos sur Flickr (www.flickr.com) afin de bénéficier d’un backup externe. Je garde cependant une copie des photos sur DVD et une sur mon disque dur configuré en RAID1.

Il y a quelque temps, je me suis donc mis au tagging de mes photos. Cela consiste à insérer des mots-clés dans le fichier jpg (je le fais avec Adobe Bridge). Cela permet entre autres à Windows (natif en Vista, addon sur XP) d’indexer mes photos. Il est très facile alors de retrouver toutes les photos avec un mot-clé précis. Par chance, Flickr est compatible avec ces mots-clés, et les tag contenus dans le fichier jpg sont convertis en tag Flickr. J’ai même trouvé un excellent petit programme qui permet de réaliser un synchro des tag entre vos photos en local et Flickr : FlickrMetadataSynchr http://www.codeplex.com/FlickrMetadataSynchr

Quelques temps plus tard, je me suis dit : poussons le vice jusqu’au bout et pourquoi ne pas géotagger mes photos. Dans ce cas on écrit également dans le fichier jpg les coordonnées de longitude et latitude à laquelle la photo a été prise. Cela permet d’afficher de manière très belle les photos sur une carte dans Flickr.

Cet été, je me suis donc mis à la tâche. Première étape : trouver un programme gratuit qui me permet d’introduire les coordonnées GPS dans les photos. Il existe plus d’un logiciel sur le marché, mais peu sont gratuits. On peut signaler Robogeo (www.robogeo.com) payant ; j’ai trouvé par contre Geotag (http://geotag.sourceforge.net/) qui est lui gratuit. Ce soft est écrit en java et nécessite les java runtime sur votre machine. Pour écrire dans les fichiers jpg, il se base sur Exiftool (http://www.sno.phy.queensu.ca/~phil/exiftool) qu’il vous faudra également télécharger.

Ce soft vous permet donc d’entrer les coordonnées à laquelle vos photos on été prises, via une carte sur Google Map. Le logiciel vous permet ensuite de déterminer automatiquement l’altitude ainsi que le nom de la localité, de la province/région/département et du pays sur base des coordonnées GPS introduites. Vous pouvez ensuite copier cette info d’une photo à l’autre.

Tout ca fonctionne à merveille, sauf quand (comme moi) les photos prises couvrent pas mal de trajet. Il est donc très fastidieux d’introduire les coordonnées… Je me suis donc attelé à automatiser tout ça. Seul prérequis : un GPS qui log les coordonnées où vous vous baladez, log que vous pouvez ensuite télécharger sur votre ordinateur. Vu les prix des GPS avec écran qui vous indiquent la route à suivre, ainsi que le manque d’information concernant leur possibilité de sauver les coordonnées dans un fichier, je ne suis pas trop chaud. Quelques recherches sur Internet aidant, je découvre que je dois me tourner vers un « GPS logger ». Un petit tour sur Ebay, et je découvre un vendeur allemand qui propose un I-Blue 747 (http://www.transystem.com.tw/products/index_detail.php?mcat_no=2&cat_no=33&pno=6&ver=en) pour pas trop cher. A nouveau, quelques recherches me permettent de me rendre compte que ledit GPS logger n’est pas trop mauvais et est à priori compatible avec GPSbabel (voir ci-dessous). Je remporte l’enchère, et quelques jours après, le joujou est chez moi.

Et là, commence la difficulté ! Mais bonne nouvelle, j’ai trouvé la solution !
Après installation des drivers et de l’application fournie sur le CD, je réussis à faire discuter la chose en Bluetooth avec le PC. Ca fonctionne même avec un logiciel de cartographie. Je teste alors la fonction qui log les coordonnées. Côté GPS tout fonctionne. Il faut alors transférer les données vers le PC. J’ai le choix entre trois formats NMA, KML (google earth) ou CSV. Pas de bol pour moi, Geotag n’accepte pas ces formats mais encore un autre : GPX.
En fait, il existe des dizaines de formats pour ces données. Il faut donc les convertir : GPSbabel (http://www.gpsbabel.org/) semble être la référence. Hop, j’essaie, je convertis, je charge l’info dans Geotag, et là… rien. Le logiciel m’indique qu’il ne trouve pas de correspondances entre les infos venant du GPS, et l’heure de la prise de vue des photos…
Grrrrrrr
C’est encore pire avec le format NMA converti en GPX : la conversion ne réussit même pas. Sur ce je teste d’autres logiciels pour géotagger les photos (dont robogeo) et le problème reste identique. Robogeo est quand même plus parlant : il indique clairement que le fichier de coordonnées ne contient pas de « timestamp ». De fait, j’ouvre le fichier GPX avec notepad, et après vérification du format du fichier, il s’avère que la conversion KML vers GPX ne traite pas correctement les informations temporelles… Que faire ?
J’essaie une autre soft de conversion, même problème. Je commence à regretter mon achat…

Un petit tour sur le site du fabriquant de mon GPS, et le soft de transfert de données existe en une version plus récente. Je télécharge, j’installe et je recommence mes tests. Toujours rien de fonctionnel pour la conversion KML --> GPX. Mais maintenant, la conversion NMA --> GPX ne se termine plus avec une erreur. Allez hop, je charge le fichier et les photos dans Geotag, et là miracle. Ca fonctionne.

Super content !

Petit résumé du matériel nécessaire pour géotagger mes photos :
- Un appareil photo numérique avec l’heure correctement configurée (un Canon Powershot G5 et un Canon Ixus 30 dans mon cas)
- Un GPS logger : I-Blue 747
- Le soft du GPS : Datalog version 2.5 build 104
- Télécharger le log du GPS en format NMA
- Convertir le fichier en GPX avec Gpsbabel
- Geotag pour lire le fichier GPX et faire la correspondance avec l’heure de la prise de vue
- Exiftool (nécessaire à Geotag) pour écrire les infos dans les fichiers jpg.
- Google Earth (non obligatoire) pour voir votre trajet loggé par le GPS
- Le plugin firefox FireUploader pour envoyer vos photos sur Flickr.

Vous trouverez un exemple de tout ça dans mon répertoire Vacances 2008 : http://www.flickr.com/photos/sofya/2803812588/map/?view=everyones

Plus d’info sur le géotagging : http://en.wikipedia.org/wiki/Geotagging

Bon amusement avec vos photos,

David

Read More......

lundi 25 août 2008

Mon PC redémarre constamment. Windows ne se charge plus.

· 0 commentaires

Voilà l’appel à l’aide que j’ai reçu d’un membre de ma famille, il y a plusieurs mois.

Je l’invite donc à m’apporter sa machine afin de jeter un œil à la bête.

La machine tourne Windows XP édition familiale (home edition).

De fait première constatation, le PC démarre. La barre de chargement Windows apparaît et là, hop reboot. Bien entendu, la personne en question n’est pas capable de m’expliquer une cause potentielle qui aurait mis le PC dans cet état. A ce stade des choses, je n’ai pas encore de soupçons (à la fin de l’analyse, vous verrez que j’ai une conclusion, mais je n’aurai jamais de confirmation d’un éventuel fautif…)

Le problème de Windows XP, est qu’il est configuré pour redémarrer automatiquement en cas d’écran bleu (blue screen). Pas moyen d’avoir dans ce cas le code d’erreur. Vous trouverez sur le net plein de site qui vous expliquent comment désactiver ce redémarrage automatique, à condition que Windows démarre… Ce qui n’est pas mon cas.

Heureusement pour moi, Microsoft a prévu la chose. En fait, au démarrage du PC, vous entrez dans le menu « Safe Boot » en pressant la touche F8. Et là dans les options de démarrage avancées, il y a la possibilité de désactiver le redémarrage automatique en cas de problème.

Les sites suivants (en anglais) vous expliquent comment :

http://tomstricks.blogspot.com/2008/08/disable-automatic-restart-on-system.html

http://www.kevinscrate.com/blog/2007/10/12/turn-off-auto-reboot-in-xp/

Je vous recommande en tous cas de désactiver le redémarrage dès maintenant sur votre système. Ca vous aidera (ou ça aidera toujours quelqu’un).

Une fois ce premier point fixé, la machine reboot et enfin avec « joie », j’ai l’écran bleu qui s’affiche. Le code d’erreur est STOP 0x0000007B Inaccessible Boot Device (Disque boot inaccessible). Voir http://support.microsoft.com/kb/324103 pour plus d’info.

Problème symptomatique d’un disque corrompu ou du pilote (driver) du contrôleur disque qui n’est pas présent dans Windows. N’ayant pas plus d’info sur le « comment » de l’apparition du problème, j’opte pour la première piste.

J’ouvre donc la machine, je démonte le disque. Comme c’est un SATA, je n’ai pas la possibilité de mettre le disque dans un boîtier USB externe ; je le monte donc dans mon PC perso afin de réaliser une vérification du disque (commande « chkdsk »).

Et là, par chance, je ne fais pas attention au démarrage de mon PC. Et ce n’est pas mon disque perso IDE qui boot, mais bien le disque SATA… Je laisse donc charger Windows, persuadé d’avoir un écran bleu. Et non, pas de problème.

Je fais un rapide tour du contenu du disque qui a maintenant démarré, histoire de sauver ce qui est nécessaire, et je constate que le Windows XP présent sur ce disque ne contient aucune donnée utilisateur ni aucun logiciel additionnel. A partir de ce moment, je suppose que l’erreur vient bien du pilote du contrôleur SATA. Quelqu’un peu compétent a du vouloir réinstaller la machine, mais pas de bol, l’image utilisée ne convenait pas pour le hardware (mais évidemment, on ne me l’a jamais avoué).

Le problème étant cerné, passons à la résolution.

Inconvénient majeur, je ne connais pas le type de contrôleur SATA, donc je ne sais quel driver télécharger. Donc, si ce n’est à part réinstaller Windows proprement, que faire me direz vous ? La manipulation que j’ai faite, quoique longue, s’est avérée complètement fonctionnelle.

Première étape : copier le disque SATA sur un disque IDE. Je ne me rappelle plus si je l’ai fait sur mon PC perso ou l’autre, mais la méthode est identique.

Le matériel nécessaire est : une disque IDE de capacité suffisante et que l’on peut effacer, ainsi que CD bootable d’un logiciel de backup par image (Norton Ghost,…).

La solution peut sans doute être également réalisée avec un CD linux bootable (Knoppix,…) mais je ne peux confirmer car ne l’ayant pas testé.

Dans mon cas, j’ai donc démarré un CD bootable de Acronis (http://www.acronis.com/homecomputing/products/trueimage/), et j’ai copié entièrement le disque SATA sur un IDE.

Deuxième étape : démarrer la machine problématique avec le disque IDE. Pas de problème.

Troisième étape : installer les pilotes du contrôleur SATA. Pour ce, je mets le disque IDE et SATA dans la machine problématique, et je démarre sur le disque IDE. Windows XP reconnaît bien un périphérique inconnu. Bonne nouvelle. Mais je ne connais toujours pas le modèle du contrôleur. Avec google, j’essaie les références écrites sur la carte mère, les codes de périphérique donnés par Windows (dans le device manager). Je ne trouve rien.

C’est finalement avec le message indiqué par le contrôleur pendant le boot de la machine (avant que Windows ne démarre) que je trouve la bonne piste. En moins de deux, une recherche sur le net, une visite sur le site du fabriquant et j’ai les driver.

J’installe, je redémarre, et miracle le PC problématique voit maintenant le contrôleur et le disque SATA. Mais il démarre toujours sur mon disque IDE !

Dernière étape : copie inverse du disque IDE vers le SATA. Maintenant que Windows a les pilotes du contrôleur, je refais la manipulation de l’étape 1 mais dans l’autre sens. Je copie le disque IDE sur le SATA. Une fois l’opération terminée, je remonte la machine avec juste son disque SATA et je récupère mon IDE. Je redémarre, et Windows se charge sans erreur.

Génial, problème résolu.

Voilà donc un premier message d’aide. A suivre car avec ce membre de la famille, j’ai déjà plusieurs solutions à mon actif J

David

Read More......

A propos de moi

Je suis David Vekemans. Ingénieur en informatique de 32 ans, je vais à travers ce blog essayer de vous faire partager mon expérience en résolution de problèmes. Cela va couvrir mes différents centres d'intérêts : l'informatique et Windows, la photographie numérique, la réception satellite.

Visites