Réalisation d'un target ISCSI à partir d'un disque logique, non raid linéaire, ( jbod ) construit sur des fichiers image
Le problème rencontré :
J'ai un utilisateur pour lequel j'ai dû créer un disque ISCSI à partir de mon
NAS vers son ordinateur et lui assurer que son disque était dupliqué sur mon autre nas sans avoir accès à sa machine cliente.
Du coup, pour des problèmes d'accès concurrents, je suis obligé de copier le disque entier, mais sur mes disques, son disque ISCSI est un fichier image de 600Go.
En conséquence, un rsync de ce fichier de 600Go fait tomber mes 2
serveurs (4 core, 6Go
ram quand même) et dure 17h !!
J'ai donc opté pour un bête scp qui prend aussi 17h, qui utilise beaucoup moins de ressources matériel mais qui est loin d'être optimal.
Astuce trouvée :
Le but étant de créer un disque ISCSI de 4 Go utile, par exemple, composé de fichiers plus petits qui se rempliront les uns à la suite des autres permettant ainsi à rsync d'en faire une copie distante de façon optimale.
config test/prod a base de ubuntu/debian
Première étape :
On installe ces différents utilitaires :
#sudo apt-get install mdadm losetup parted
mdadm permet de faire des
raids logiciels et
losetup permet de gérer les "loop drive" c'est-à-dire de faire passer un fichier pour un disque physique (essentiel pour mdadm). Enfin
parted permettra d'initialiser les disques image créés et d'obtenir des infos sur ces disques.
Source :
http://en.wikipedia.org/wiki/Loop_device
Deuxième étape :
On crée les fichiers image avec la commande
dd :
#mkdir /storage
#dd if=/dev/zero of=/storage/lun0.img bs=1024k count=2000
#dd if=/dev/zero of=/storage/lun1.img bs=1024k count=2000
etc...
Pour cet exemple, on construit des fichiers image de 2
Gb
Source :
http://www.howtoforge.com/using-iscsi-on-ubuntu-10.04-initiator-and-target
Troisième étape :
On associe ces fichiers à des
"loop device", soit un fichier par "loop device".
Pour réussir, j'ai dû utiliser
parted sur chaque fichier image, d'une part, pour leur donner un label, ensuite pour créer une
partition. Tout ceci, seulement, dans le but d'identifier le premier bloc de chaque disque virtuel.
Sans cela,
losetup me renvoyait "dans les cordes" avec un message d'erreur disant qu'il ne trouvait pas le début du "device", donc :
#parted /storage/lun0.img
(parted) mklabel
Nouveau type d'étiquette de disque ? gpt
(parted) mkpart
Nom de la partition ? []?
Type de système de fichiers ? [ext2]?
Début ? 0
Fin ? 100%
Avertissement : Vous voulez établir une partition de 0B à 2097151488B.
La position la plus proche gérable est 17408B à 2097134592B.
Est-ce acceptable pour vous ?
Oui/Yes/Non/No? oui
Avertissement: L'alignement de la partition ainsi définie n'est pas optimal au
niveau performance.
Ignorer/Ignore/Annuler/Cancel? ignore
(parted) print
Modèle: (file)
Disque /storage/lun0.img : 2097152000B
Taille des secteurs (logiques/physiques): 512B/512B
Table de partitions : gpt
Numéro Début Fin Taille Système de fichiers Nom Fanions
1 17408B 2097135103B 2097117696B
(parted) quit
#sudo losetup -o 17408 /dev/loop0 /storage/lun0.img
#sudo losetup -o 17408 /dev/loop1 /storage/lun1.img
etc...
Vous noterez que l'option -o me permet d'indiquer le début de mon volume...
Cela ne semble pas optimal, pour l'instant, mais j'ai dû m'adapter et cela fonctionne.
Source :
http://www.linuxquestions.org/questions/linux-server-73/mdadm-assemble-raid5-with-loopback-mounted-disk-images-715343/
http://ftp.gnu.org/old-gnu/Manuals/parted-1.6.1/html_mono/parted.html#SEC16
man losetup
une fois les "device loop" mappés sur mes fichiers
, on crée le volume logique non raid linéaire ou jbod :
#sudo mdadm --create /dev/md1 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
Source :
http://en.wikipedia.org/wiki/Mdadm
http://proutleharicot.blog.free.fr/index.php?post/2009/01/15/MDADM-%3A-Linear-NRAID-%28ou-JBOD-Just-a-Bunch-Of-Disks%29-%3A-concat%C3%A9nation-de-disques
man mdadm
Voilà on dispose, maintenant, d'un disque virtuel de 4Go qui est une "concaténation" de 2 fichiers de 2Go. Ils se rempliront au fur et à mesure et l'un à la suite de l'autre. Il est extensible à souhait et comme les fichiers image sont déposés sur un volume raid5 matériel, la tolérance de panne est acceptable.
Dernière étape :
On va monter ce disque sur une machine distante en ISCSI.
Pour cela, il suffit de suivre ce tuto :
http://www.howtoforge.com/using-iscsi-on-ubuntu-10.04-initiator-and-target
et de l'appliquer à notre disque jbod fraîchement créé : /dev/md1
En ce qui concerne la machine cliente, s'il s'agit d'un Windows, après avoir télécharger/installer le package ISCSI sur le site de microsoft et paramétré le target, il faut penser à initialiser le nouveau disque. (Ben oui, moi j'ai passé 5 min à le chercher dans l'explorateur avant de tilter !! )
Source :
http://www.microsoft.com/download/en/details.aspx?id=18986
http://www.cyberciti.biz/tips/windows-2003-iscsi-initiator-software-connection.html
En cas de gros crash, je rapatrie les disques sauvés sur mon NAS distant , je les remappe à des "loop device" puis je ré-assemble le volume jbod par la commande :
#sudo mdadm --assemble /dev/md1 /dev/loop0 /dev/loop1
Source :
http://ptaff.ca/ptaffgnu/2006-06/1149215339-pour_ceux_qui_utilise_software_raid/
Publié par
mr_poussy -
Dernière mise à jour le 17 juin 2011 à 16:21 par aquarelle