VirtualBox : Comment augmenter la taille d'un disque dur virtuel (Linux)

Rédigé par marmous Aucun commentaire
Classé dans : Informatique Mots clés : linux, serveur, disque dur, virtualbox
Ce site et d'autres outils sont hébergés chez moi sous Ubuntu server. Pour des raisons de simplicité de maintenance, j'ai virtualisé tous mes services à l'aide de VirtualBox.

Au fil des années, l'espace que j'avais prévu devient trop juste et mon disque dur virtuel est saturé. Dans mon cas, les partitions /home et /var étaient saturées.
Voici la méthode que j'ai utilisé pour agrandir mon disque :

0x00 - Faire une sauvegarde du disque dur virtuel


0x01 - Création d'un nouveau disque

vboxmanage createhd --filename NouveauDisque.vdi --size 50000
A noter que la taille est en Mo

0x02 - Sauvegarde des données

sudo cp -a /home /homebak
sudo cp -a /var /var
L'option a de la commande cp permet entre autre de garder les droits sur les fichiers.

0x03 - Identifier les partitions

df -h
Notes bien les informations. ce sera utile à l'étape 8.

0x04 - Arrêt de la machine virtuelle


0x05 - Clone de l'ancien disque sur le nouveau

vboxmanage clonehd AncienDisque.vdi NouveauDisque.vdi --existing

0x06 - Attacher le nouveau disque

Tu détaches l'ancien disque de la machine virtuelle
vboxmanage modifyvm NomMachineVirtuelle --hda none
Tu supprimes les deux disques du gestionnaire de média VirtualBox
vboxmanage closemedium disk AncienDisque.vdi
vboxmanage closemedium disk NouveauDisque.vdi
Tu les renommes pour faire plus propre
mv AncienDisque.vdi AncienDisque_Copie.vdi
mv NouveauDisque.vdi AncienDisque.vdi
Tu attaches le nouveau disque renommé sur la machine virtuelle
vboxmanage modifyvm NomMachineVirtuelle --hda AncienDisque.vdi

0x07 - Démarrage en mode récupération

Une fois que tu es en mode récupération, ouvres une console root.

0x08 - Suppression et création des partition à la nouvelle taille

fdisk /dev/sda

p pour afficher la table des partitions
d pour supprimer une partition
n pour créer une partition
Si tu as noté les informations de l'étape 3, tu sais quelles partitions sont concernées.

0x09 - Redémarrage


0x0a - Création des systèmes de fichiers

mkfs.ext4 /dev/sda3
mkfs.ext4 /dev/sda4

0x0b - Modification du fichier fstab

sudo nano /etc/fstab
Remplace les UUID par /dev/sdaX

0x0c - Montage des partition

mount /home
mount /var

0x0d - Restauration des données

cp -a /varbak/* /var
cp -a /homebak/* /home

0x0e - Redémarrage


0x0f - Test


0x10 - Suppression des sauvegardes

rm -rf /homebak
rm -rf /varbak

0x11 - Suppression de l'ancien disque

rm -f AncienDisque_Copie.vdi

TSQL Astuce 3 : Découper une chaine de caractères délimitée par un séparateur

Rédigé par marmous Aucun commentaire
Classé dans : Informatique Mots clés : TSQL, developpement, SQL Server
Voici une fonction qui renvoie une table où chaque élément est un morceau de la chaine initiale :

CREATE FUNCTION [dbo].[SplitString](    
@String NVARCHAR(4000),   
@Delimiter NCHAR(1))
RETURNS TABLE
AS
RETURN (   
WITH Split(stpos,endpos)
     AS(
SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos       
UNION ALL
        SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
            FROM Split           
WHERE endpos > 0
    )
    SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),       
'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)   
FROM Split
)
Cette fonction utilise plusieurs mécanisme de SQL Server.
Elle repose sur l'utilisation d'une CTE (http://msdn.microsoft.com/fr-fr/library/ms175972.aspx) qui retourne une table contenant la position de chaque "mot" en fonction du délimiteur passé en paramètre.
Cette table est ensuite utilisée pour construire la table qui sera retournée.
La fonction SUBSTRING découpe chaque "mot".
Notez l'utilisation des mots-clé COALESCE et NULLIF pour éviter les effets de bords.


Utilisation
select * from dbo.SplitString('pomme,banane,myrtille,fraise,cerise,melon,pastèque',',');

Cette requête renvoie :
1    pomme
2    banane
3    myrtille
4    fraise
5    cerise
6    melon
7    pastèque

TSQL Astuce 2 : Comment reindexer tous les indexs de toutes les tables en une ligne

Rédigé par marmous Aucun commentaire
Classé dans : Informatique Mots clés : TSQL, SQL Server, developpement
Tout est dans le titre ;-)

Pour reconstruire tous les indexes d'une base
exec sp_MSforeachtable "ALTER INDEX ALL ON ? REBUILD;"

Pour réorganiser tous les indexes d'une base
exec sp_MSforeachtable "ALTER INDEX ALL ON ? REORGANIZE;"

Attention cette opération est extrêmement couteuse en ressource. En production il est préférable de ne réaliser ce type d'opération que sur des indexes fragmentés. Vous trouverez un exemple de script ici

Bonus :
Pour être sûr que les statistiques de la base sont à jour, vous pouvez lancer ensuite la commande
exec sp_UpdateStats;

Une possible évolution de notre démocratie

Rédigé par marmous Aucun commentaire
Suite à la récente lecture de cet article Démocratie 2.0 et cette vidéo Pia Mancini : DemocracyOs, je suis parti sur certaines réflexions et liens notamment avec le jeu de rôles que j'affectionne tout particulièrement. Je ne vais pas m'attacher à critiquer ces références mais simplement m'en servir de base de réflexion.

Tout part d'un constat, les citoyens recherchent de plus en plus à obtenir un peu plus de pouvoir. Le temps où l'on attendait sagement que les autres (entendre surtout les politiques) pensent et décident à notre place est révolu. Ce que j'aimerais que cette phrase soit d'actualité mais je pense que c'est ce vers quoi nous tendons.
De plus en plus de citoyens comblent eux-même les faiblesses du système par différentes initiatives : associations, initiatives spontanées relayées par réseaux sociaux, ... Ils n'attendent plus sur les élus pour réagir car ils ont compris que ceux-là ne sont pas là pour diriger mais simplement pour faire carrière. Ils sont au service d'eux-même avant d'être au service du citoyen. Les citoyens reprennent alors le pouvoir en agissant là où ils pensent que c'est le plus critique. Malgré tout cela reste une minorité de la population.

Les tendances au financement participatif pourraient amener d'autres citoyens à réfléchir sur quels projets ils souhaiteraient voir utiliser leurs impôts. Peut-être même les votes par téléphone pour les émissions TV pour citoyens déconnectés sont une passerelle pour que ceux-ci prennent conscience qu'ils peuvent avoir du pouvoir. Il reste à leur donner confiance en eux et en leurs idées. J'y conçois c'est un exemple quelque peu tirer par les cheveux.

L'exemple le plus probant en dehors du financement participatif se retrouve du côté des activités ludiques, notamment le jeu de rôles. Depuis sa création jusqu'aux années 2000, le jeu de rôles avait peu évolué au niveau de son fonctionnement : un maitre du jeu régnait en maitre sur des joueurs. Il contrôlait l'univers, les règles parfois même les sensations des personnages des joueurs laissant le joueur avec un contrôle limité sur le jeu. Depuis un peu plus d'une décennie, d'autres types de jeu de rôles sont apparus. Ces jeux proposent de donner plus de pouvoir au joueur sur son personnage et sur l'univers (ça dépend des jeux et des règles). Certains proposent même de supprimer le rôle du maitre de jeu. Pour les rôlistes qui découvrent cette nouvelle façon de jouer c'est comme découvrir un nouveau continent à explorer. Le joueur gagne alors en pouvoir sur le système de jeu tout comme le citoyen pourrait gagner en pouvoir sur le système démocratique. Si vous souhaitez en savoir plus sur ces jeux de rôle je vous invite à écouter les podcasts de La Cellule.

Évidemment, comme dans n'importe quel système, il faudrait adapter les règles ou en créer de nouvelles pour encadrer cette nouvelle façon de penser. Dans le cas du financement participatif, chaque donateur devrait pouvoir être informé de l'avancement du projet. Cela serait un bon moyen d'impliquer les donateurs. Mais il faudrait aussi pouvoir débouter les personnes malhonnêtes. Bien sûr, le bon sens des citoyens les pousserait à ne pas participer à un projet douteux mais un projet douteux avec une bonne communication pourrait passer pour un bon projet. Pour éviter ces travers, il faudrait alors ajouter à la communication faite par les instigateurs du projet des tables rondes, des débats publics, ...
Certaines associations tentent de désacraliser et de rendre compréhensible la parole politique et législative. Là encore, la compréhension du système démocratique devrait être accessible à tous ou à la plupart et non être obscure comme actuellement. Un bon exemple en est une célèbre scène du film Les 3 frères où la parole du notaire n'est pas compréhensible par les protagonistes. Les citoyens pour qui cette parole (politique et législative) est obscure se tournent vers des paroles plus accessibles voir trop accessibles visibles à la télévision aux heures de grandes audiences. La Quadrature du Net est une association qui va dans ce sens et tente de rendre compréhensibles certains projets de loi. Mais aussi elle met à disposition la liste des députés, leurs coordonnées et des outils tel le Pi-Phone permettant d'être mis en relation directement avec son député. De telles initiatives devrait définitivement être publique.
Je pense que, pour intéresser le plus grand nombre à la gouvernance de leur pays et par conséquent de leur vie, il faut bien plus que ça. Pour rendre les paroles accessibles il ne faut pas les simplifier mais faire évoluer les destinataires de ces mots. Ce travail prend forcément plusieurs générations pour que les résultats soient visibles. C'est donc un travail à très long terme qui, je pense, a commencé par la philosophie des Lumières. Ce travail ne doit pas se faire uniquement par l'éducation scolaire comme actuellement mais aussi par l'éducation parentale et l'influence des amis, des connaissances et également des médias, de tous les médias.

Pour conclure, je pense que par nos actions de tous les jours si nous y mettons un peu de nos convictions nous pouvons faire avancer le monde bien plus que par un vote. Affirmons nos convictions quelles qu'elles soient. N'hésitons pas à réagir, à débattre, à penser. Ce n'est pas réservé aux élites. Tout le monde a un cerveau, il faut juste apprendre à se le réapproprier et à le posséder pleinement.
Ouvrez les yeux, voyez l'infinité des possibles et indignez-vous !!






TSQL Astuce 1 : Comment obtenir la liste des jours consécutifs

Rédigé par marmous Aucun commentaire
Classé dans : Informatique Mots clés : TSQL, developpement, SQL Server

Aujourd'hui, une astuce permettant d'extraire des plages de dates contigües d'un planning.

Dans le cas d'un planning, nous avons une table Planning comme suit :

 Create table @Planning (UserId uniqueidentifier, Activities nvarchar(255), Date smalldatetime)

Elle contient ceci :
 

 select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140801'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140802'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140803'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140804'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140805'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140806'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140807'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140808'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140809'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Vacances', '20140810'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Repos', '20140811'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Repos', '20140812'
union
select '12120B41-6C76-41B4-A0A7-5C7F48214865EF', 'Repos', '20140813'

Il faut d'abord faire une première requête en tagant les enregistrements étant consécutif.
Pour détecter les enregistrements consécutifs on utilise ici la commande ROW_NUMBER() OVER (http://msdn.microsoft.com/fr-fr/library/ms186734.aspx) quelque peu détournée de sa fonction première. On obtient donc la même valeur DtRange pour des date qui se suivent.
Nous utilisons ensuite cette première requête en sous requête pour regrouper les valeurs par intervalle de date.

Voici la requête finale :

 select ip2.UserId, 
ip2.Activities,
Min(ip2.Date) as deb,
Max(ip2.Date) as fin
from(select UserId,
Activities,
Date,
DateDiff(Day, Row_Number() over(order by Date), Date) AS DtRange
from @Planning
) as ip2
Group by ip2.DtRange, ip2.UserId, ip2.Activities

Fil RSS des articles