informatique:linux:raid0_sous_linux
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
informatique:linux:raid0_sous_linux [2009/10/30 23:44] – pteu | informatique:linux:raid0_sous_linux [2024/06/29 14:10] (current) – pteu | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | {{tag> | + | =======Le |
- | + | ||
- | ======Le | + | |
Le RAID est un mécanisme de gestion de unités de stockage, qui peut être matériel (via une carte dédiée) ou logiciel (géré par le système d' | Le RAID est un mécanisme de gestion de unités de stockage, qui peut être matériel (via une carte dédiée) ou logiciel (géré par le système d' | ||
+ | |||
+ | Avant de le mettre en place, se renseigner sur quel type de RAID est adapté à notre besoin (en terme de performance, | ||
+ | ======Installation de Debian avec RAID0====== | ||
Le but de cet article est de décrire la procédure que j'ai utilisée pour installer une Debian Lenny sur 2 disques dur en RAID0 logiciel avec Linux Software RAID. Mes motivations sont : | Le but de cet article est de décrire la procédure que j'ai utilisée pour installer une Debian Lenny sur 2 disques dur en RAID0 logiciel avec Linux Software RAID. Mes motivations sont : | ||
Line 11: | Line 12: | ||
Le RAID0 ne permet pas de redondance ni de récupération des données en cas de crash disque ; qu'à cela ne tienne je fais de la synchronisation régulièrement. | Le RAID0 ne permet pas de redondance ni de récupération des données en cas de crash disque ; qu'à cela ne tienne je fais de la synchronisation régulièrement. | ||
- | |||
- | |||
- | =====Installation de Debian===== | ||
J'ai suivi la doc disponible sur ubuntu-fr : [[http:// | J'ai suivi la doc disponible sur ubuntu-fr : [[http:// | ||
Line 26: | Line 24: | ||
* le reste dans /data | * le reste dans /data | ||
- | Voici le résultat du partitionnement de mes disques (Go = GB) : | + | Voici le résultat du partitionnement de mes disques (GB = Go) : |
/dev/sda | /dev/sda | ||
/dev/sda1 de 1GB | /dev/sda1 de 1GB | ||
Line 36: | Line 34: | ||
/dev/sdb3 de 996GB (RAID) -> l' | /dev/sdb3 de 996GB (RAID) -> l' | ||
- | Je vais créer 2 volumes RAID0 : | + | Je vais ensuite |
* /dev/sda2 et /dev/sdb2 qui formeront le volume /dev/md0 | * /dev/sda2 et /dev/sdb2 qui formeront le volume /dev/md0 | ||
* /dev/sda3 et /dev/sdb3 qui formeront le volume /dev/md1 | * /dev/sda3 et /dev/sdb3 qui formeront le volume /dev/md1 | ||
- | NB : La partition /boot ne peut pas être créée sur du raid logiciel pour pouvoir booter dessus. | + | NB : La partition /boot ne peut pas être créée sur du raid logiciel pour pouvoir booter dessus |
- | =====Divers===== | + | ======Création d'un RAID1====== |
+ | //à la main// | ||
- | ====Monitorer son RAID==== | + | Lister les disques et partitions sur la machine (on doit être root sinon ça n' |
+ | < | ||
+ | sudo fdisk -l | grep Disque | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
- | cat /proc/mdstat | + | On va faire un RAID1 avec les disques |
- | | + | |
- | md1 : active raid0 sda3[0] sdb3[1] | + | |
- | | + | |
- | + | ||
- | md0 : active raid0 sda2[0] sdb2[1] | + | |
- | | + | |
- | + | ||
- | | + | |
- | On peut avoir plus de détails avec : | + | => Cela nous donne donc /dev/sdb1 et /dev/sdc1 2 partitions d' |
- | mdadm --detail | + | |
- | | + | |
- | | + | |
- | | + | |
- | Raid Level : raid0 | + | |
- | Array Size : 1945696256 (1855.56 GiB 1992.39 GB) | + | |
- | Raid Devices : 2 | + | |
- | Total Devices : 2 | + | |
- | | + | |
- | | + | |
- | + | ||
- | | + | |
- | State : clean | + | |
- | Active Devices : 2 | + | |
- | | + | |
- | Failed Devices : 0 | + | |
- | Spare Devices : 0 | + | |
- | + | ||
- | Chunk Size : 64K | + | |
- | + | ||
- | UUID : 9695e8d2: | + | |
- | Events : 0.5 | + | |
- | + | ||
- | | + | |
- | 0 | + | |
- | 1 | + | |
- | ====Créer un volume RAID1 avec une seule partition==== | + | Créer un volume RAID1 ; y rattacher les 2 partitions de 1 Go |
- | Vous avez bien lu : ici il s' | + | < |
- | mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 missing | + | mdadm --create /dev/md0 --level=1 --raid-devices=2 / |
+ | |||
+ | cat / | ||
+ | Personalities : [raid1] | ||
+ | md0 : active raid1 sdb1[0] sdc1[1] | ||
+ | 1044096 blocks [2/2] [UU] | ||
+ | |||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | On déclare un disque en erreur (" | ||
+ | < | ||
+ | mdadm /dev/md0 --fail /dev/sdb1 | ||
+ | |||
+ | cat / | ||
+ | Personalities : [raid1] | ||
+ | md0 : active raid1 sdc1[1] sdb1[2](F) | ||
+ | 1044096 blocks [2/1] [_U] | ||
+ | |||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | On retire les disques défectueux du volume RAID | ||
+ | < | ||
+ | mdadm /dev/md0 --remove failed | ||
+ | |||
+ | cat / | ||
+ | Personalities : [raid1] | ||
+ | md0 : active raid1 sdc1[1] | ||
+ | 1044096 blocks [2/1] [_U] | ||
+ | |||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | On ajoute un nouveau disque dans le RAID = le nouveau disque se resynchronise | ||
+ | < | ||
+ | mdadm /dev/md0 --add /dev/sdb1 | ||
+ | |||
+ | cat / | ||
+ | Personalities : [raid1] | ||
+ | md0 : active raid1 sdb1[2] sdc1[1] | ||
+ | 1044096 blocks [2/1] [_U] | ||
+ | [=> | ||
+ | |||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | Puis on formate la nouvelle partition RAID (/dev/md0 en ext3 : | ||
+ | < | ||
+ | mke2fs -T ext3 /dev/md0 | ||
+ | </ | ||
+ | |||
+ | Automatisation du montage : | ||
+ | < | ||
+ | vi / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ======Divers====== | ||
+ | |||
+ | =====Créer un volume RAID1 avec un seul disque===== | ||
+ | Il s' | ||
+ | |||
+ | < | ||
+ | mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 missing | ||
+ | </ | ||
-> On créer /dev/md0 en RAID1 en utilisant 2 partitions : /dev/sda1 et une qui manque en temps normal c'est plus utile d' | -> On créer /dev/md0 en RAID1 en utilisant 2 partitions : /dev/sda1 et une qui manque en temps normal c'est plus utile d' | ||
- | =====Liens===== | + | ======Création d'un raid5 + LVM====== |
+ | |||
+ | =====Volume RAID 5===== | ||
+ | |||
+ | Un raid0 avec de la redondance pour la sécurité des données ? C'est un **raid5** et c'est ce que je vais réaliser sur mon NAS (malgré qu'il ne soit doté que d'un processeur [[http:// | ||
+ | |||
+ | Première chose : repérer les noms des disques : | ||
+ | <code bash> | ||
+ | sudo fdisk -l | grep Disk | ||
+ | Disk /dev/sda: 64.0 GB, 64023257088 bytes | ||
+ | Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes | ||
+ | Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes | ||
+ | Disk /dev/sdd: 2000.4 GB, 2000398934016 bytes | ||
+ | </ | ||
+ | Dans mon cas je vais utiliser /dev/sdb, /dev/sdc et /dev/sdd pour mon RAID 5. | ||
+ | |||
+ | Puis, créer des partitions de type "Raid auto detect" | ||
+ | |||
+ | <code bash> | ||
+ | sudo fdisk /dev/sdd | ||
+ | Le périphérique ne contient pas une table de partitions DOS ou Sun, SGI, OSF valable | ||
+ | Création d'une nouvelle étiquette DOS avec id de disque 0x7b3be7ec. | ||
+ | Les modifications restent en mémoire jusqu' | ||
+ | Après quoi, bien sûr, le contenu précédent sera irrécupérable. | ||
+ | |||
+ | Avertissement : drapeau 0x0000 non valable dans la table de partitions 4, sera corrigé par w(écriture) | ||
+ | |||
+ | Attention : la taille du disque est 3.0 To (3000592982016 octets). | ||
+ | Ce format de table de partitions DOS ne peut pas être utilisé | ||
+ | sur des disques pour des volumes plus grand (2199023255040 octets) et | ||
+ | secteurs de 512 octets. Utiliser parted(1) et le format de table | ||
+ | de partitions à GUID (GPT). | ||
+ | |||
+ | |||
+ | Le périphérique dispose d'une taille de secteur logique plus | ||
+ | petite que la taille de secteur physique. Ajuster la limite de | ||
+ | taille à celle de secteur physique (ou optimale en terme d' | ||
+ | est conseillé, sinon les performances risquent d' | ||
+ | |||
+ | Commande (m pour l' | ||
+ | Partition type: | ||
+ | | ||
+ | | ||
+ | Select (default p): p | ||
+ | Numéro de partition (1-4, par défaut 1): | ||
+ | Utilisation de la valeur par défaut 1 | ||
+ | Premier secteur (2048-4294967295, | ||
+ | Utilisation de la valeur par défaut 2048 | ||
+ | Dernier secteur, +secteurs or +taille{K, | ||
+ | Utilisation de la valeur par défaut 4294967294 | ||
+ | |||
+ | Commande (m pour l' | ||
+ | Partition sélectionnée 1 | ||
+ | Code Hexa (taper L pour lister les codes): fd | ||
+ | Type système de partition modifié de 1 à fd (RAID Linux autodétecté) | ||
+ | |||
+ | Commande (m pour l' | ||
+ | La table de partitions a été altérée ! | ||
+ | |||
+ | Appel de ioctl() pour relire la table de partitions. | ||
+ | Synchronisation des disques. | ||
+ | </ | ||
+ | |||
+ | Créez le RAID : | ||
+ | <code bash> | ||
+ | mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 --assume-clean / | ||
+ | </ | ||
+ | |||
+ | Si vous obtenez l' | ||
+ | <code bash> | ||
+ | mdadm: layout defaults to left-symmetric | ||
+ | mdadm: layout defaults to left-symmetric | ||
+ | mdadm: chunk size defaults to 512K | ||
+ | mdadm: cannot open /dev/sdc1: No such file or directory | ||
+ | </ | ||
+ | ... recréez les partition avec **cfdisk** plutôt que fdisk ! | ||
+ | |||
+ | Après avoir créés les partitions j' | ||
+ | <code bash> | ||
+ | mdadm --create --verbose /dev/md0 --level 5 --assume-clean --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 | ||
+ | mdadm: layout defaults to left-symmetric | ||
+ | mdadm: layout defaults to left-symmetric | ||
+ | mdadm: chunk size defaults to 512K | ||
+ | mdadm: super1.x cannot open /dev/sdc1: Device or resource busy | ||
+ | mdadm: /dev/sdc1 is not suitable for this array. | ||
+ | mdadm: super1.x cannot open /dev/sdd1: Device or resource busy | ||
+ | mdadm: /dev/sdd1 is not suitable for this array. | ||
+ | mdadm: create aborted | ||
+ | </ | ||
+ | |||
+ | D' | ||
+ | <code bash> | ||
+ | sudo aptitude remove dmraid | ||
+ | </ | ||
+ | |||
+ | ... mais toujours le même problème :( | ||
+ | |||
+ | N' | ||
+ | |||
+ | Au reboot, les disques ont été renumérotés : | ||
+ | <code bash> | ||
+ | sudo fdisk -l | grep Disk | ||
+ | Disk /dev/sda: 2000.4 GB, 2000398934016 bytes | ||
+ | Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes | ||
+ | Disk /dev/sdc: 64.0 GB, 64023257088 bytes | ||
+ | Disk /dev/sdd: 2000.4 GB, 2000398934016 bytes | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | # Création du raid 5 avec 3 partitions : /dev/sda1 /dev/sdb1 /dev/sdd1 | ||
+ | # --assume-clean permet d' | ||
+ | mdadm --create --verbose /dev/md0 --level 5 --assume-clean --raid-devices=3 / | ||
+ | mdadm: layout defaults to left-symmetric | ||
+ | mdadm: layout defaults to left-symmetric | ||
+ | mdadm: chunk size defaults to 512K | ||
+ | mdadm: /dev/sdb1 appears to be part of a raid array: | ||
+ | level=raid5 devices=3 ctime=Thu Sep 6 23:40:51 2012 | ||
+ | mdadm: size set to 1953381888K | ||
+ | Continue creating array? y | ||
+ | mdadm: Defaulting to version 1.2 metadata | ||
+ | mdadm: array /dev/md0 started. | ||
+ | </ | ||
+ | |||
+ | Rofl ! It works ! | ||
+ | |||
+ | Il faut attendre un peu le temps de la construction du raid, puis on vérifie : | ||
+ | <code bash> | ||
+ | sudo mdadm --detail /dev/md0 | ||
+ | /dev/md0: | ||
+ | Version : 1.2 | ||
+ | Creation Time : Wed Sep 12 21:35:52 2012 | ||
+ | Raid Level : raid5 | ||
+ | Array Size : 3906763776 (3725.78 GiB 4000.53 GB) | ||
+ | Used Dev Size : 1953381888 (1862.89 GiB 2000.26 GB) | ||
+ | Raid Devices : 3 | ||
+ | Total Devices : 3 | ||
+ | Persistence : Superblock is persistent | ||
+ | |||
+ | Update Time : Thu Sep 13 18:00:13 2012 | ||
+ | State : clean | ||
+ | | ||
+ | Working Devices : 3 | ||
+ | | ||
+ | Spare Devices : 0 | ||
+ | |||
+ | | ||
+ | Chunk Size : 512K | ||
+ | |||
+ | Name : ymir2: | ||
+ | UUID : 5766333b: | ||
+ | | ||
+ | |||
+ | Number | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | # ou : | ||
+ | cat / | ||
+ | Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10] | ||
+ | md0 : active raid5 sdd1[2] sdb1[1] sda1[0] | ||
+ | 3906763776 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] | ||
+ | |||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Dans le première commande on pourrait tilter sur la ligne : | ||
+ | <code bash> | ||
+ | Array Size : 3907020800 (3726.03 GiB 4000.79 GB) | ||
+ | </ | ||
+ | |||
+ | 3726.03 GiB alors que je devrait avoir 4 To ? WTF !! | ||
+ | |||
+ | ====Rappel sur les unités==== | ||
+ | |||
+ | * 8 bits = 1 octet (byte en anglais : un octet et one byte c'est pareil !). Les abréviations respectives sont b (bit), o (octet) et B (byte). | ||
+ | * 1 kB = 1 ko = 1000 octets (bytes). Dans la même logique, 1 MB vaut 1000 kB, 1 GB vaut 1000 MB, etc... : **ce sont des puissances de 10** : 1000 c'est 10^3. | ||
+ | * 1 KiB vaut, lui, 1024 octets (bytes). Dans la même logique, 1 KiB = 1024 B, 1 MiB vaut 1024 KiB, 1 GiB vaut 1024 MiB, etc... **ce sont des puissances de 2** (normal pour de l' | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Les //X//i se prononcent kibi (Ki), mébi (Mi), etc... | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Les abréviations des kilos sont " | ||
+ | </ | ||
+ | |||
+ | Autant la première notation (B, kB, MB...) est assez classique et facile à calculer : | ||
+ | < | ||
+ | 1 GB = 10^3 MB = 10^6 kB = 10^9 B = 1 000 000 000 bytes | ||
+ | </ | ||
+ | ... autant la seconde n'est pas naturelle (pour les hommes en tout cas) : | ||
+ | < | ||
+ | 1 GiB = 2^10 MiB = 2^20 KiB = 2^30 B soit 1 073 741 824 bytes | ||
+ | </ | ||
+ | Ce qui nous amène à la conclusion : 1 GiB "vaut plus" que 1GB. (c'est pour ça que les vendeurs de disques dur comptent en GB, ça gonfle les capacités :) ). Mais les ordinateurs, | ||
+ | |||
+ | Voici la table de conversion entre //X//B et //X//iB : | ||
+ | < | ||
+ | 1 TB = 10^12 o => 0.909 TiB | ||
+ | 1 GB = 10^9 o => 0.931 GiB | ||
+ | 1 MB = 10^6 o => 0.954 MiB | ||
+ | 1 KB = 10^3 o => 0.977 KiB | ||
+ | |||
+ | 1 TiB = 2^40 o => 1.100 TB | ||
+ | 1 GiB = 2^30 o => 1.074 GB | ||
+ | 1 MiB = 2^20 o => 1.049 MB | ||
+ | 1 KiB = 2^10 o => 1.024 kB | ||
+ | </ | ||
+ | |||
+ | Pour finir la parenthèse, | ||
+ | |||
+ | source : entre autres [[http:// | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | Une fois le raid construit, si tout va bien, il faudra le monter automatiquement au démarrage la prochaine fois ; commenter la ligne "ARRAY xxx" dans le fichier ''/ | ||
+ | <code bash> | ||
+ | mdadm --detail --scan >> / | ||
+ | |||
+ | # PI le résultat de la commande : | ||
+ | ARRAY /dev/md0 metadata=1.2 name=ymir2: | ||
+ | </ | ||
+ | |||
+ | =====Raid en vrac au reboot===== | ||
+ | |||
+ | Sous Ubuntu 10.10 cette fois j'ai rencontré un problème lors du reboot car il me montait /dev/md avec 2 disques et /dev/md_d0 avec le dernier. Hideux. Même en retouchant le mdadm.conf celà n'a rien changé. Je suis alors tombé sur [[http:// | ||
+ | <code bash> | ||
+ | # arrêt du raid triso | ||
+ | mdadm --stop / | ||
+ | | ||
+ | | ||
+ | |||
+ | mdadm --auto-detect | ||
+ | |||
+ | / | ||
+ | |||
+ | update-initramfs -u | ||
+ | | ||
+ | |||
+ | # puis on reboot | ||
+ | init 6 | ||
+ | </ | ||
+ | |||
+ | Au redémarrage le volume RAID est monté correctement \o/. | ||
+ | |||
+ | ====D' | ||
+ | |||
+ | <code bash> | ||
+ | cat / | ||
+ | Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md126 : inactive sdc[1] | ||
+ | 1953514496 blocks | ||
+ | |||
+ | md127 : active (auto-read-only) raid5 sdd[2] sdb[0] | ||
+ | 3907028992 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U] | ||
+ | |||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | mdadm --examine /dev/sdb1 | ||
+ | / | ||
+ | Magic : a92b4efc | ||
+ | Version : 0.90.00 | ||
+ | UUID : cc5892bf: | ||
+ | Creation Time : Fri Aug 19 18:22:07 2011 | ||
+ | Raid Level : raid5 | ||
+ | Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB) | ||
+ | Array Size : 3907023872 (3726.03 GiB 4000.79 GB) | ||
+ | Raid Devices : 3 | ||
+ | Total Devices : 3 | ||
+ | Preferred Minor : 0 | ||
+ | |||
+ | Update Time : Thu Nov 17 19:32:24 2011 | ||
+ | State : clean | ||
+ | | ||
+ | Working Devices : 3 | ||
+ | | ||
+ | Spare Devices : 0 | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | Chunk Size : 64K | ||
+ | |||
+ | Number | ||
+ | this | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | mdadm --examine /dev/sdc1 | ||
+ | / | ||
+ | Magic : a92b4efc | ||
+ | Version : 0.90.00 | ||
+ | UUID : cc5892bf: | ||
+ | Creation Time : Fri Aug 19 18:22:07 2011 | ||
+ | Raid Level : raid5 | ||
+ | Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB) | ||
+ | Array Size : 3907023872 (3726.03 GiB 4000.79 GB) | ||
+ | Raid Devices : 3 | ||
+ | Total Devices : 3 | ||
+ | Preferred Minor : 0 | ||
+ | |||
+ | Update Time : Thu Nov 17 19:32:24 2011 | ||
+ | State : clean | ||
+ | | ||
+ | Working Devices : 3 | ||
+ | | ||
+ | Spare Devices : 0 | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | Chunk Size : 64K | ||
+ | |||
+ | Number | ||
+ | this | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | mdadm --examine /dev/sdd1 | ||
+ | / | ||
+ | Magic : a92b4efc | ||
+ | Version : 0.90.00 | ||
+ | UUID : cc5892bf: | ||
+ | Creation Time : Fri Aug 19 18:22:07 2011 | ||
+ | Raid Level : raid5 | ||
+ | Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB) | ||
+ | Array Size : 3907023872 (3726.03 GiB 4000.79 GB) | ||
+ | Raid Devices : 3 | ||
+ | Total Devices : 3 | ||
+ | Preferred Minor : 0 | ||
+ | |||
+ | Update Time : Thu Nov 17 19:32:24 2011 | ||
+ | State : clean | ||
+ | | ||
+ | Working Devices : 3 | ||
+ | | ||
+ | Spare Devices : 0 | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | Chunk Size : 64K | ||
+ | |||
+ | Number | ||
+ | this | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | egrep -v " | ||
+ | DEVICE partitions | ||
+ | CREATE owner=root group=disk mode=0660 auto=yes | ||
+ | HOMEHOST < | ||
+ | MAILADDR root | ||
+ | ARRAY /dev/md0 level=raid5 num-devices=3 metadata=0.90 UUID=cc5892bf: | ||
+ | | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | mdadm --detail --scan | ||
+ | ARRAY /dev/md/0_0 metadata=0.90 UUID=c50da923: | ||
+ | ARRAY /dev/md/0_1 metadata=0.90 UUID=cb278753: | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | mdadm --stop / | ||
+ | | ||
+ | mdadm --stop / | ||
+ | | ||
+ | mdadm --assemble /dev/md0 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | mdadm --detail --scan | ||
+ | ARRAY /dev/md0 metadata=0.90 UUID=cc5892bf: | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | cat / | ||
+ | Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md0 : active raid5 sdb1[0] sdd1[2] sdc1[1] | ||
+ | 3907023872 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] | ||
+ | |||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | |||
+ | =====LVM===== | ||
+ | |||
+ | Création du bousin LVM : déclaration dans l' | ||
+ | * d'un volume physique (pv) de 4 To (le raid5) | ||
+ | * d'un groupe de volume (vg) : on ajoute le pv de 4 To qui sera seul dans son groupe | ||
+ | * d'un volume logique (lv) : on déclare une partition de 2 To dans le vg de 4 To (on pourra le redimensionner plus tard). | ||
+ | <code bash> | ||
+ | pvcreate /dev/md0 | ||
+ | vgcreate md0_vg /dev/md0 | ||
+ | lvcreate -L 2T -n data_lv md0_vg | ||
+ | </ | ||
+ | |||
+ | Puis on traite ''/ | ||
+ | <code bash> | ||
+ | # formatage en ext4 avec des paramètres optimisés pour le raid.. | ||
+ | #(source : http:// | ||
+ | mkfs.ext4 -m 0 -b 4096 -R stride=8 / | ||
+ | |||
+ | # montage automatique au démarrage : | ||
+ | echo "/ | ||
+ | |||
+ | # montage | ||
+ | mkdir /mnt/data | ||
+ | mount /mnt/data | ||
+ | </ | ||
+ | |||
+ | Vérifications : afficher les résumés des volumes physiques, des groupes de volumes et des volumes logiques : | ||
+ | <code bash> | ||
+ | pvs | ||
+ | PV | ||
+ | / | ||
+ | / | ||
+ | |||
+ | vgs | ||
+ | VG #PV #LV #SN Attr | ||
+ | md0_vg | ||
+ | ymir2 1 | ||
+ | |||
+ | lvs | ||
+ | LV VG | ||
+ | data_lv md0_vg -wi-ao | ||
+ | root ymir2 -wi-ao 56,91g | ||
+ | swap_1 | ||
+ | </ | ||
+ | |||
+ | ======Management du raid====== | ||
+ | |||
+ | =====Monitorer son RAID===== | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Attention les commandes qui vont suivre ne proviennent pas toutes du même RAID ! | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | cat / | ||
+ | | ||
+ | md1 : active raid0 sda3[0] sdb3[1] | ||
+ | | ||
+ | |||
+ | md0 : active raid0 sda2[0] sdb2[1] | ||
+ | | ||
+ | |||
+ | | ||
+ | </ | ||
+ | |||
+ | On peut avoir plus de détails avec : | ||
+ | < | ||
+ | mdadm --detail /dev/md1 | ||
+ | /dev/md1: | ||
+ | | ||
+ | | ||
+ | Raid Level : raid0 | ||
+ | Array Size : 1945696256 (1855.56 GiB 1992.39 GB) | ||
+ | Raid Devices : 2 | ||
+ | Total Devices : 2 | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | State : clean | ||
+ | Active Devices : 2 | ||
+ | | ||
+ | Failed Devices : 0 | ||
+ | Spare Devices : 0 | ||
+ | |||
+ | Chunk Size : 64K | ||
+ | |||
+ | UUID : 9695e8d2: | ||
+ | Events : 0.5 | ||
+ | |||
+ | | ||
+ | 0 | ||
+ | 1 | ||
+ | </ | ||
+ | |||
+ | Arrêter/ | ||
+ | <code bash> | ||
+ | mdadm --stop /dev/md0 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Supprimer et ajouter un disque dans une grappe raid : | ||
+ | <code bash> | ||
+ | mdadm --manage --remove /dev/md0 /dev/sdd1 | ||
+ | | ||
+ | |||
+ | mdadm --manage --add /dev/md0 /dev/sdd1 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Vérifications : | ||
+ | < | ||
+ | mdadm --detail /dev/md0 | ||
+ | |||
+ | mdadm --detail --scan --verbose | ||
+ | </ | ||
+ | |||
+ | |||
+ | ======Augmenter un RAID + LVM====== | ||
+ | |||
+ | Récemment j'ai ajouté un disque de 2 To à mon RAID 5 de 3x 2 To déjà en place. Voici la procédure que j'ai employée, elle se découpe en 2 étapes : | ||
+ | * augmenter le RAID | ||
+ | * augmenter le LV | ||
+ | |||
+ | =====Augmenter le RAID===== | ||
+ | |||
+ | Bien sur ce nouveau disque disque a la même taille que les disques déjà inclus dans le RAID. Je créé une partition de type " | ||
+ | |||
+ | <code bash> | ||
+ | Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes | ||
+ | 81 têtes, 63 secteurs/ | ||
+ | Unités = secteurs de 1 * 512 = 512 octets | ||
+ | Taille de secteur (logique / physique) : 512 octets / 512 octets | ||
+ | taille d'E/S (minimale / optimale) : 512 octets / 512 octets | ||
+ | Identifiant de disque : 0x720b8114 | ||
+ | |||
+ | Périphérique Amorce | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Puis on ajoute le disque à la grappe : | ||
+ | <code bash> | ||
+ | mdadm /dev/md0 -a /dev/sdc1 | ||
+ | </ | ||
+ | |||
+ | Et enfin on augmente le nombre de disque à notre RAID. **Attention** cette étape va automatiquement lancer la resynchronisation du RAID, qui prend beaucoup de temps et ne supporte pas d' | ||
+ | <code bash> | ||
+ | mdadm --grow /dev/md0 --raid-device=4 | ||
+ | mdadm: Need to backup 3072K of critical section.. | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | Ne faites pas comme moi qui ai lancé cette commande à peine 3h avant une coupure électrique programmée... D' | ||
+ | </ | ||
+ | |||
+ | Vérification de l' | ||
+ | <code bash> | ||
+ | cat / | ||
+ | Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10] | ||
+ | md0 : active raid5 sdc1[3] sdd1[2] sdb1[1] sda1[0] | ||
+ | 3906763776 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] | ||
+ | [> | ||
+ | </ | ||
+ | |||
+ | Une fois la synchro terminée (soit environ < | ||
+ | <code bash> | ||
+ | mdadm --detail /dev/md0 | ||
+ | |||
+ | /dev/md0: | ||
+ | Version : 1.2 | ||
+ | Creation Time : Wed Sep 12 21:35:52 2012 | ||
+ | Raid Level : raid5 | ||
+ | Array Size : 5860145664 (5588.67 GiB 6000.79 GB) | ||
+ | Used Dev Size : 1953381888 (1862.89 GiB 2000.26 GB) | ||
+ | Raid Devices : 4 | ||
+ | Total Devices : 4 | ||
+ | Persistence : Superblock is persistent | ||
+ | |||
+ | Update Time : Tue Feb 19 06:03:31 2013 | ||
+ | State : clean | ||
+ | | ||
+ | Working Devices : 4 | ||
+ | | ||
+ | Spare Devices : 0 | ||
+ | |||
+ | | ||
+ | Chunk Size : 512K | ||
+ | |||
+ | Name : ymir2: | ||
+ | UUID : 5766333b: | ||
+ | | ||
+ | |||
+ | Number | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | C'est déjà bien mais c'est pô fini ; il faut maintenant le dire à LVM ! | ||
+ | |||
+ | =====Prise en compte par LVM===== | ||
+ | |||
+ | 1) Première chose : Démonter le volume logique (NB : cette étape n'est pas obligatoire avec le système de fichier que j' | ||
+ | <code bash> | ||
+ | umount / | ||
+ | </ | ||
+ | |||
+ | 2) Augmenter la taille du pv : | ||
+ | <code bash> | ||
+ | pvresize /dev/md0 | ||
+ | Physical volume "/ | ||
+ | 1 physical volume(s) resized / 0 physical volume(s) not resized | ||
+ | |||
+ | # vérif : c'est mieux ! | ||
+ | pvdisplay | ||
+ | --- Physical volume --- | ||
+ | PV Name / | ||
+ | VG Name | ||
+ | PV Size 5,46 TiB / not usable 1,50 MiB | ||
+ | Allocatable | ||
+ | PE Size 4,00 MiB | ||
+ | Total PE 1430699 | ||
+ | Free PE 0 | ||
+ | Allocated PE 1430699 | ||
+ | PV UUID | ||
+ | |||
+ | # le vg en tient compte immédiatement : | ||
+ | vgdisplay | ||
+ | --- Volume group --- | ||
+ | VG Name | ||
+ | System ID | ||
+ | Format | ||
+ | Metadata Areas 1 | ||
+ | Metadata Sequence No 5 | ||
+ | VG Access | ||
+ | VG Status | ||
+ | MAX LV 0 | ||
+ | Cur LV 1 | ||
+ | Open LV 0 | ||
+ | Max PV 0 | ||
+ | Cur PV 1 | ||
+ | Act PV 1 | ||
+ | VG Size 5,46 TiB | ||
+ | PE Size 4,00 MiB | ||
+ | Total PE 1430699 | ||
+ | Alloc PE / Size | ||
+ | Free PE / Size 0 / 0 | ||
+ | VG UUID | ||
+ | </ | ||
+ | |||
+ | 3) Augmenter la taille du lv ; attention sa taille ne doit pas dépasser la taille de son volume group (vg), ni être inférieur sa taille actuelle (sinon on perd des données). | ||
+ | |||
+ | On pourrait déclarer une nouvelle taille de 5,46 TiB ('' | ||
+ | <code bash> | ||
+ | lvresize -l +100%FREE / | ||
+ | Extending logical volume data_lv to 5,46 TiB | ||
+ | Logical volume data_lv successfully resized | ||
+ | </ | ||
+ | |||
+ | 4) On doit ensuite vérifier l' | ||
+ | <code bash> | ||
+ | | ||
+ | Passe 1 : vérification des i-noeuds, des blocs et des tailles | ||
+ | Passe 2 : vérification de la structure des répertoires | ||
+ | Passe 3 : vérification de la connectivité des répertoires | ||
+ | Passe 4 : vérification des compteurs de référence | ||
+ | Passe 5 : vérification de l' | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Puis on étend le système de fichier : | ||
+ | <code bash> | ||
+ | resize2fs / | ||
+ | | ||
+ | En train de redimensionner le système de fichiers sur / | ||
+ | Le système de fichiers / | ||
+ | </ | ||
+ | |||
+ | ... et on remonte le lv : | ||
+ | <code bash> | ||
+ | mount / | ||
+ | |||
+ | df -hT /mnt/data | ||
+ | Sys. de fichiers | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Okaaaay ! | ||
+ | |||
+ | ======Tests et benchmarks====== | ||
+ | |||
+ | Je vais comparer ici mon ex raid0 avec mon précédent raid5 (sic). Attention il y a beaucoup de paramètres qui changent donc ces tests ne sont pas très " | ||
+ | |||
+ | Le raid0 est sur le serveur ymir : | ||
+ | * raid0 de 2x HDD Samsung Spinpoint F1 1 To (7200 rpm, 32 Mo de cache) | ||
+ | * le système est installé sur ces disques donc ils ne sont pas idle pendant les tests | ||
+ | * la partition est formatée en ext3 avec les réglages par défaut | ||
+ | |||
+ | Le raid5 est sur le serveur ymir2 : | ||
+ | * raid5 de 3x HDD Samsung EcoGreen F4 2 To (5400 rpm, 32 Mo de cache) | ||
+ | * le raid est monté sur des disques complètement idle, le système étant installé sur un autre disque (un SSD OCZ Vertex 60 Go) | ||
+ | * la partition est formatée en ext2 avec les réglages indiqués plus haut | ||
+ | |||
+ | |||
+ | =====Test en écriture===== | ||
+ | |||
+ | ====A l' | ||
+ | |||
+ | J' | ||
+ | |||
+ | sur ymir2 : | ||
+ | <code bash> | ||
+ | # raid5 | ||
+ | dd if=/ | ||
+ | 131072+0 enregistrements lus | ||
+ | 131072+0 enregistrements écrits | ||
+ | 1073741824 octets (1,1 GB) copiés, 12,3638 s, 86,8 MB/s | ||
+ | |||
+ | # à titre comparatif, sur le SSD | ||
+ | dd if=/ | ||
+ | 131072+0 enregistrements lus | ||
+ | 131072+0 enregistrements écrits | ||
+ | 1073741824 octets (1,1 GB) copiés, 6,25596 s, 172 MB/s | ||
+ | </ | ||
+ | |||
+ | sur ymir : | ||
+ | <code bash> | ||
+ | # raid0 | ||
+ | dd if=/ | ||
+ | 131072+0 enregistrements lus | ||
+ | 131072+0 enregistrements écrits | ||
+ | 1073741824 bytes (1,1 GB) copied, 8,66769 s, 124 MB/s | ||
+ | </ | ||
+ | |||
+ | De ces valeurs on peut retenir une chose : l' | ||
+ | |||
+ | =====Test en lecture===== | ||
+ | |||
+ | ====Avec hdparm==== | ||
+ | sur ymir2 : | ||
+ | <code bash> | ||
+ | # raid5 | ||
+ | hdparm -t -T /dev/md0 | ||
+ | /dev/md0: | ||
+ | | ||
+ | | ||
+ | |||
+ | # SSD | ||
+ | hdparm -t -T /dev/sda | ||
+ | /dev/sda: | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | sur ymir : | ||
+ | <code bash> | ||
+ | hdparm -t -T /dev/md1 | ||
+ | /dev/md1: | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ====Avec dd==== | ||
+ | |||
+ | On réutilise le fichier précédemment créé et on le lis dans le vent (/dev/null) : | ||
+ | |||
+ | sur ymir2 : | ||
+ | <code bash> | ||
+ | # raid5 | ||
+ | dd if=/ | ||
+ | 131072+0 enregistrements lus | ||
+ | 131072+0 enregistrements écrits | ||
+ | 1073741824 octets (1,1 GB) copiés, 5,23449 s, 205 MB/s | ||
+ | |||
+ | # SSD | ||
+ | dd if=/ | ||
+ | 131072+0 enregistrements lus | ||
+ | 131072+0 enregistrements écrits | ||
+ | 1073741824 octets (1,1 GB) copiés, 4,3989 s, 244 MB/s | ||
+ | </ | ||
+ | |||
+ | Les valeurs du raid5 sont cohérentes env. 200 MB/s ; ce n'est pas le cas pour le SSD. | ||
+ | |||
+ | Attention : si on refait le " | ||
+ | |||
+ | <code bash> | ||
+ | # raid5 | ||
+ | dd if=/ | ||
+ | 131072+0 enregistrements lus | ||
+ | 131072+0 enregistrements écrits | ||
+ | 1073741824 octets (1,1 GB) copiés, 1,00804 s, 1,1 GB/s | ||
+ | </ | ||
+ | |||
+ | sur ymir : | ||
+ | <code bash> | ||
+ | # raid0 | ||
+ | dd if=/ | ||
+ | 131072+0 enregistrements lus | ||
+ | 131072+0 enregistrements écrits | ||
+ | 1073741824 bytes (1,1 GB) copied, 9,06151 s, 118 MB/s | ||
+ | </ | ||
+ | |||
+ | Étonnant : on a un meilleur débit en écriture qu'en lecture sur ce raid0... | ||
+ | |||
+ | |||
+ | ======Test avec bonnie++====== | ||
+ | |||
+ | bonnie++ est un logiciel tierce qui mesure les performances d'un disque. | ||
+ | |||
+ | |||
+ | ======Suppression totale d'un volume RAID====== | ||
+ | |||
+ | Parce que mdadm est coriace, et que la procédure de suppression d'un RAID pour récupérer les disques n'est pas si anodine que cela, voici une petite check-list : | ||
+ | |||
+ | Supprimer les metadata avec dmraid | ||
+ | <code bash> | ||
+ | sudo dmraid -r -E /dev/sdb | ||
+ | no raid disks and with names: "/ | ||
+ | |||
+ | sudo dmraid -r -E /dev/sdc | ||
+ | Do you really want to erase " | ||
+ | ERROR: ddf1: seeking device "/ | ||
+ | ERROR: writing metadata to /dev/sdc, offset 2000398933504 sectors, size 0 bytes returned 0 | ||
+ | ERROR: erasing ondisk metadata on /dev/sdc | ||
+ | |||
+ | sudo dmraid -r -E /dev/sdd | ||
+ | Do you really want to erase " | ||
+ | ERROR: ddf1: seeking device "/ | ||
+ | ERROR: writing metadata to /dev/sdd, offset 2000398933504 sectors, size 0 bytes returned 0 | ||
+ | ERROR: erasing ondisk metadata on /dev/sdd | ||
+ | </ | ||
+ | |||
+ | Si ça ne marche pas on observe encore : | ||
+ | <code bash> | ||
+ | cat / | ||
+ | Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md0 : inactive sdd[0](S) sdb[2](S) | ||
+ | 3907028992 blocks | ||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | umount /dev/md0 | ||
+ | mdadm --manage /dev/md0 --stop | ||
+ | mdadm --manage /dev/md0 --remove | ||
+ | rm / | ||
+ | </ | ||
+ | |||
+ | Suppression de la partition " | ||
+ | <code bash> | ||
+ | sudo fdisk /dev/sdb | ||
+ | d | ||
+ | p | ||
+ | w | ||
+ | </ | ||
+ | |||
+ | On efface les superblocks : | ||
+ | <code bash> | ||
+ | sudo mdadm --zero-superblock /dev/sdb | ||
+ | sudo mdadm --zero-superblock /dev/sdb1 | ||
+ | mdadm: Couldn' | ||
+ | </ | ||
+ | |||
+ | Cela évite de se retrouver bloquer au boot par le prompt busybox ! | ||
+ | |||
+ | Dans mon cas au reboot un nouveau volume raid est apparu tout seul : " | ||
+ | <code bash> | ||
+ | sudo update-initramfs -u | ||
+ | sudo reboot | ||
+ | </ | ||
+ | |||
+ | |||
+ | ======Liens====== | ||
* [[http:// | * [[http:// |
informatique/linux/raid0_sous_linux.1256946243.txt.gz · Last modified: 2013/10/14 20:54 (external edit)