Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Tag: Disque

Niveau :      
Résumé : lilo ; grub

Même si la plupart des distributions sont passées à grub, on s'est longtemps posé la question d'utiliser lilo ou grub. Il servent tous les deux à charger linux (le noyau), voyons comment ça marche.

Bios

Avant de nous intéresser au bootloader, étudions le processus de démarrage d'une machine (x86 type intel).

  1. Appui sur le bouton
  2. Allumage de l'alimentation, électricité dans la carte mère
  3. Allumage du processeur dans un état connu
  4. Passage du contrôle au bios
  5. Lecture d'un disque, chargement du secteur de boot nommé MBR (généralement un bootloader)
  6. Chargement du noyau et d'éventuels modules, passage du contrôle au noyau
  7. Montage d'un système de fichier et passage du contrôle au processus d'init (sur les unix)

Bon, le début, vous connaissez.

L'état connu du processeur c'est : mode réel, 16bits, exécution pointant sur les derniers octets du premier Mo (FFFF:0000). Ici se trouve mappé statiquement le bios qui va se lancer et initialiser le matériel qu'il connaît. Il laisse disponible quelques fonctions via des interruptions, par exemple pour accéder à la carte vidéo ou au disque dur. Et il termine en chargeant le premier secteur (512 octets) du premier périphérique (disque, dur, clé usb ...) bootable qu'il trouve et lui passe la main (à l'adresse 0000:7C00).

C'est ici qu'on trouve lilo, grub, syslinux et même parfois linux lui-même sur de vieilles versions. Comme vous le constatez, 512 octets c'est très petit pour coder un bootloader (surtout que les octets ne sont pas tous disponibles à cause de la table des partitions). C'est pourquoi les bootloaders ont tous une architecture un peu bizarre avec plusieurs étapes.

Lilo

Lilo est un bootloader spécifique à linux (LInux LOader). Il fonctionne en 2 temps, un secteur de boot qui va charger un fichier un peu plus gros dont il connaît les secteurs sur le disque. Ce dernier peut éventuellement proposer un menu puis charge le bon noyau et lui passe la main.


continue reading...

Niveau :      
Résumé : mysnapshot

Maintenant que vous savez comment fonctionne device-mapper, il est possible de compenser un certain manque de lvm à la main. Nous allons faire des snapshot de snapshot (merci à glandium pour la suggestion).

Voici 2 scripts permettant de faire cela. Ils s'utilisent de la manière suivante :

# En supposant que vous ayez déjà fait un premier snapshot avec lvm
# snapshot2 sera un snapshot de snapshot1
$ mysnapshot '-L 1G' vg0 snapshot1 snapshot2

# Pour supprimer le snapshot précédemment créé
$ mysnapshotrm vg0 snapshot2

Prenez ces scripts avec quelques pincettes puisque bien que testés sur mes machines, ils n'est pas garanti qu'ils fassent tout ce que vous vouliez. Par exemple, il permet d'enchaîner les snapshot, mais tel quel il va vous poser quelques problèmes pour faire des arbres de snapshot (plusieurs fois un snapshot d'un même snapshot), dans ce cas ... à vous de bosser.

Attention : contrairement à lvm, ces snapshots ne sont pas automatiquement mis en place au boot.

Un petit schéma du principe de fonctionnement des snapshots, peut-être un peu plus clair que le précédent pour ceux qui connaissent device-mapper (attention, les noms ne correspondent pas totalement à ceux du script).

lvm_snapshot2.png

Ce schéma permet aussi d'expliquer quelque chose que j'ai oublié de dire lors de l'article précédent : bien qu'il n'y ait pas de différence fondamentale entre l'orginal et le snapshot, le snapshot est le périphérique qui aura les meilleures performances en écriture.


continue reading...

Niveau :      
Résumé : dm-crypt ; cryptsetup

Maintenant que vous savez tout sur device mapper, il y a une dernière fonctionnalité fournie en standard que vous allez vouloir utiliser: le chiffrement des partitions. Comme vous l'avez compris, il est possible de tout faire avec dmsetup, mais il y a mieux et c'est moins cher.

Chiffrement avec LUKS

Attention, ce que nous faisons ici écrit sur la partition, si vous ne voulez pas perdre vos données, regardez le dernier paragraphe.

La commande cryptsetup s'occupe de tout pour vous. Pour chiffrer une partition :

# pour préserver la résistance de votre partition à la cryptanalyse (des données apparemment chiffrées déjà sur le disque)
# on efface la partition avec des données aléatoires
$ dd if=/dev/urandom of=/dev/sda1
# il vous demandera simplement une passphrase
$ cryptsetup luksFormat /dev/sda1

Et maintenant pour l'utiliser :

# il vous demandera simplement une passphrase
$ cryptsetup luksOpen /dev/sda1 partoche

Et voila, votre partition est disponible dans /dev/mapper/partoche. Vous pouvez en faire ce que vous voulez, mettre une système de fichier dessus ou le redécouper avec lvm ou écrire directement dessus ...

Et si vous ne voulez plus utiliser la partition, fermez-là (la partition) pour ne pas qu'un autre tente d'en lire le contenu, on ne sait jamais :

$ cryptsetup luksClose partoche

Un peu plus loin

Cryptsetup permet d'autres formats de disque que LUKS, mais il n'est pas intéressant de les utiliser car luks est disponible un peu partout (même sous windows) et bien pensé

Luks permet entre autre quelques fantaisies comme la possibilité d'utiliser plusieurs clés, ce qui veut dire que vous pouvez partager un disque dur chiffré entre plusieurs personnes et que chacun ait sa clé pour lire et écrire dessus.

# ajoute une nouvelle clé (nouvel utilisateur ?)
$ cryptsetup luksAddKey /dev/sda1

Et donc vous pouvez révoquer une clé pour interdire à un des participants d'y revenir :

# liste les clés
$ cryptsetup luksDump /dev/sda1
# on en révoque une 
$ cryptsetup luksDelKey /dev/sda1 1

Attention si un des utilisateurs a eu accès aux méta-données de la partition, il a très bien pu les enregistrer, et comme il a du garder sa propre clé, il est dans ce cas toujours capable d'utiliser le disque.

Un autre usage des clés multiples est d'avoir une clé d'usage et une clé de secours imprimée et stockée dans un coffre pour usage en cas de perte de la première.


continue reading...

Niveau :      
Résumé : dmsetup

Maintenant que vous savez tout sur lvm, regardons sous le capot, pour voir comment ça tourne.

lvm

Lvm n'est en réalité qu'une surcouche à un système bien intégré dans linux et qui se nomme device-mapper ou dm en abrégé. Dm ne fait qu'une chose et il le fait bien : mapper (cartographier) un ou plusieurs périphériques de bloc sur un autre périphérique. Donc ce que fait lvm quand vous déclarez un nouveau lv, c'est uniquement déclarer à device mapper qu'un nouveau périphérique de bloc (le lv) correspond à telle et telle portion d'un périphérique physique (les pv).

Bon lvm fait un peu plus que ça puisqu'il sait faire tout ça tout seul au démarrage sans rien vous demander, il stocke ses informations au bon endroit sur les disques et tout marche de façon transparente. Mais supposons que nous voulions le faire nous-même à la main. C'est parfaitement possible avec la commande dmsetup :

# on crée un device nommé monlv, qui fait 10000 blocs et qui est mappé sur /dev/hda à partir du 1234e bloc
$ echo 0 10000 linear /dev/hda 1234 | dmsetup create monlv

Si vous voulez savoir comment sont fait vos lv, il suffit simplement de le demander à dmsetup :

$ dmsetup table /dev/mapper/vg0-lv0
>0 1028160 linear /dev/hda 0
>1028160 3903762 linear /dev/hdb 0

continue reading...

Niveau :      
Résumé : lvm raid

Aujourd'hui la suite tant attendue d'une série sur lvm.

Figurez-vous qu'il est possible de faire du raid avec LVM. Hé oui, vous avez déjà remarqué que vous pouviez mettre plusieurs disque dans un vg. Pour l'instant lvm se contente de les mettre bout à bout, comme le ferait un raid de type linear.

Striping

Le raid0 aussi appelé striping découpe un disque en petits morceaux et les alterne pour en faire un disque plus gros. Le but est d'avoir un disque plus gros, mais aussi d'augmenter les performances. En effet, dès qu'on va lire ou écrire un fichier un peu plus gros que ces morceaux, on va le faire sur 2 disques simultanément et donc augmenter la bande passante.

Lorsqu'on répartit les données linéairement sur le disque on ne gagne pas en performances, par contre en cas de crash d'un des deux disques, il y a moyen de récupérer presque la moitié des données, alors que dans le cas du striping, vous êtes sur de ne rien pouvoir récupérer.

Pour faire du striping avec lvm, rien de plus simple. Lors de la création de votre LV, il suffit de préciser le nombre de "stripes" qu'on désire :

# 2 etant le nombre de partition sur lesquels découper le volume
$ lvcreate -L 1G -i 2 lv0 vg0

Notez que si vous voulez forcer le striping sur certaines partitions, il est possible de donner en paramètre à lvcreate la liste des pv sur lesquels vous voulez qu'il soit.

Et pour vérifier que c'est bien ce que vous vouliez :

$ lvdisplay -m /dev/vg0/lv0

continue reading...

Niveau :      
Résumé : lvcreate -s

Avançons encore un peu dans notre exploration de lvm. LVM permet beaucoup de choses, et entre autre la création de snapshots. Un snapshot c'est une prise de vue instantanée, qui dans le cas de lvm se fait au niveau du disque. Ce qui veut dire que le contenu du snapshot peut ne pas être cohérent, par exemple si le système est en train d'écrire sur le disque en plein milieu du snapshot.

On peut utiliser les snapshot pour beaucoup de choses, par exemple, Apple l'utilise pour faire sa machine à remonter dans le temps, on peut l'utiliser pour faire des backup cohérents mais aussi pour faire des expérimentations avec des retours arrière rapide.

Un snapshot

Partons d'un lv existant avec un vg sur lequel il reste de la place (hé oui, il faudra bien stocker nos snapshots. Faisons un snapshot de notre lv :

$ lvcreate -L 50M -s -n snap /dev/vg0/original

Et voila, c'est tout, fin de l'article !

Bon, pas encore. Déjà, pourquoi donner une taille au snapshot ? Tout simplement parce que celui-ci est intelligent, donc il ne va pas copier l'intégralité du lv original. Au contraire, il ne va stocker que les différences. C'est pourquoi il est instantané et commence avec une occupation taille nulle. Par contre, il faut lui allouer une taille dans le vg, donc 50Mo sera la quantité maximum de différence qu'il pourra stocker. Au delà de cette taille, le snapshot sera cassé et il ne pourra plus fonctionner correctement (les données ne sont plus valides, laissez tomber).

lvm_snapshot.png


continue reading...

Niveau :      
Résumé : lvreduce ; vgreduce ; lvextend ; vgextend

Après l'immense succès du premier article, voici sous vos applaudissements le deuxième article.

Ajout d'un nouveau disque

Maintenant que vous savez utiliser LVM vous voudriez aller un peu plus loin. Mise en situation : vous avez un disque de 50To, un vg déjà en place et sur sur ce VG un LV de 30To dédié à votre médiathèque. Or vous venez de découvrir (et donc d'acheter) un nouveau disque de 1Po (Péta Octet pour ceux qui ne suivent pas, hé oui, c'est fou comme ça avance vite la technologie).

$ lvdisplay /dev/vg0/mediatheque
  --- Logical volume ---
  LV Name                /dev/vg0/mediatheque
  VG Name                vg0
  LV UUID                AN0y7h-1cIF-cPmC-vE9E-JnKG-worn-dWeQ8D
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                31,82 TB
  Current LE             81459200
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

Commençons donc par ajouter notre nouveau disque au vg :

# partitionnement
$ cfdisk /dev/sdc
# formatage
$ pvcreate /dev/sdc1
# ajout au vg
$ vgextend vg0 /dev/sdc1

Et voila nous avons de la place disponible. Maintenant agrandissons notre LV. Remarquez qu'il faut le faire avant d'agrandir le système de fichier puisqu'il se trouve au dessous. Au contraire en cas de réduction, il faut commencer par le système de fichier qui se trouve au dessus.


continue reading...