Accéder au contenu principal

Disques différentiels avec Virtualbox

En matière de virtualisation, les disques différentiels sont une solution très pratique, mais je n'ai découvert que récemment que cette solution était aussi disponible dans Virtualbox.
Pour ceux qui ne connaissent pas le principe des disques différentiels, prenons l'exemple suivant: un formateur a besoin pour ses formations de Windows 7 avec différentes versions d'Office (2003, 2007, 2010) et ceci en différentes langues.
Soit il crée 6 machines virtuelles (mv) de 10 GB chacune, ce qui occuperait 60 GB sur son laptop tout en ne lui laissant que d'assez petits disques virtuels (dv), soit il utilisera des disques différentiels:
  • un disque de base avec Windows 7 (disque dit "immuable")
  • une machine virtuelle par version/langue. Chaque VM utilisera le disque de base, et Virtualbox créera automatiquement un disque "différentiel" où il n'enregistrera que les différences avec le disque de base (soit la taille de l'installation d'Office).
Dans ce cas, il aura la même fonctionnalité en utilisant seulement 10 GB du disque de base + 6 x 300 MB d'installation Office (en utilisant des images de taille variable).

Le principe

Nous allons créer un dv complet avec l'OS et tout ce que nous avons besoin pour TOUTES nos mv. Ensuite, nous verrouillerons ce dv. Dès lors, toute nouvelle mv créée à partir de ce dv verrouillé créera automatiquement un disque différentiel.

En pratique

 Etape 1: créer un dv: dans Fichier, Gestionnaire de Media (^D), choisir Nouveau (^N) et l'appeler par exemple modele.vdi
Etape 2: créer une mv: dans l'écran principal, cliquer sur Nouvelle (^N), et créer une mv (appelons la mvTemp) utilisant le dv que l'on vient de créer.
Etape 3: lancer la mvTemp, installer l'OS de votre choix. Faire éventuellement les mises àjour requises et installer tout ce que vous voudriez avoir à disposition sur chaque mv.
Etape 4: éteindre mvTemp. Vous pouvez même la supprimer (c'est mieux). Tout ce qui nous intéresse, c'est le dv que vous avez créé et rempli et qui servira de base aux nouvelles mv.
Etape 5: depuis le gestionnaire de Media, enlevez le dv modele.vdi (sans l'effacer, bien sûr !!!!)
Etape 6: ré-attacher votre dv modele.dvi en lecture seule en utilisant la commande:
VBoxManage openmedium disk modele.vdi -type immutable
Vérifiez dans le Gestionnaire de Media qu'elle est bien indiquée comme étant "immuable"
Etape 7: créer une mv, en utilisant ce fameux disque immuable come dv. En faisant cela, VirtualBox va en fait créer un disque différentiel où il n'enregistrera que les secteur différents du disque immuable de base.
Etapes suivantes: répéter l'étape 7 à volonté pour chaque mv désirée, en reprenant chaque fois le disque immuable comme dv.

Commentaires

Posts les plus consultés de ce blog

Champs obligatoires dans un formulaire Access

Comment rendre des champs obligatoires dans un formulaire Access ? La réponse la plus évidente est de modifier le design de la table et d'assigner au paramètre Required la valeur True. L'ennui de cette méthode est que le message d'erreur d'Access n'est pas très convivial et ne spécifie pas quel champ a déclenché l'erreur. Plutôt que d'écrire une routine de gestion d'erreur complexe, il y a une solution toute simple: affecter la valeur Faux à la propriété  Required du champ, Validation Rule: Is Not Null Validation Text: le texte à afficher, ex: "Code Postal obligatoire" ..et le tour est joué. Cette astuce vient de l'excellent Allen Browne, dont le site (en anglais) regorge d'informations utiles sur Access. ps: je n'ai pas sous la main de version française d'Access pour la traduction des propriétés, désolé...

Remplir une ListBox Access

Pour remplir une ListBox MS Access avec des données provenant d'un recordset, il suffit généralement de définir une rowSourceType = Table et de donner le nom de la table ou de la requête. Mais dans certains cas, il peut être préférable de fournir ces valeurs sous forme d'une ValueList. C'est le travail de la fonction ci-dessous. Sub FillList(ByRef lstBox As ListBox, strQry As String) 'fill combo with value list from recordset 'to be used when recordset is too slow to requery for sorting Dim rs As Recordset, strSrc As String, i As Integer Set rs = CurrentDb.OpenRecordset(strQry, dbOpenSnapshot) lstBox.RowSourceType = "Value list" lstBox.ColumnCount = rs.Fields.Count ReDim arSrc(rs.RecordCount * rs.Fields.Count) Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 strSrc = strSrc & rs.Fields(i) & ";" Next i rs.MoveNext Loop lstBox.RowSource = Left(strSrc, Len(strSrc) - 1) End Sub

Simuler un COUNT DISTINCT avec Access

Le SQL disponible dans les requêtes Access ne dispose pas de l'instruction COUNT DISTINCT, qui permettrait par exemple, de compte combien de clients différents ont commandé, année par année. Ce prédicat, qui est présent dans SQL Server, peut être simulé de diverses manières, plus ou moins lourdes et plus ou moins efficaces. Mais la méthode probablement la plus performante est d'utiliser une requête CROSSTAB un peu particulière. Voici  un exemple sur la base Northwind (ou Comptoirs avec les versions françaises d'Access), dans lequel on va décompter le nombre de clients différents par année, ainsi que le nombre total de commandes: TRANSFORM Count(*) AS Dist SELECT Year([OrderDate]) AS Yr, Count(([Dist])) AS DistCustomers, Count(OrderId) AS NumOrders FROM Orders AS o GROUP BY Year([OrderDate]) PIVOT CustId In (null); Pour la voir en action, vous pouvez créer une nouvelle requête dans Northwind, l'afficher en mode SQL, et y coller le code ci-dessus. Ce type de requ...