J'ai récemment commencé à utiliser LVM sur certains serveurs pour des disques durs supérieurs à 1 To. Ils sont utiles, extensibles et assez faciles à installer. Cependant, je n'ai pas pu trouver de données sur les dangers et les mises en garde de LVM.
Quels sont les inconvénients de l'utilisation de LVM?
Résumé
Risques liés à l'utilisation de LVM:
Les deux premiers problèmes LVM se combinent: si la mise en cache de l'écriture ne fonctionne pas correctement et que vous avez une perte d'alimentation (par exemple, le bloc d'alimentation ou l'onduleur tombe en panne), vous devrez peut-être récupérer à partir de la sauvegarde, ce qui signifie un temps d'arrêt important. Une raison clé de l'utilisation de LVM est une disponibilité plus élevée (lors de l'ajout de disques, du redimensionnement des systèmes de fichiers, etc.), mais il est important que la configuration de la mise en cache d'écriture soit correcte pour éviter que LVM ne réduise réellement la disponibilité.
-- Mise à jour en décembre 2019: mise à jour mineure sur btrfs et ZFS comme alternatives aux instantanés LVM
Atténuation des risques
LVM peut toujours bien fonctionner si vous:
Détails
J'ai fait beaucoup de recherches sur ce sujet dans le passé après avoir subi une perte de données associée à LVM. Les principaux risques et problèmes LVM que je connais sont:
Vulnérable à la mise en cache d'écriture sur le disque dur en raison de VM, mise en cache de disque ou anciens noyaux Linux, et rend plus difficile la récupération des données en raison de structures sur disque plus complexes - voir ci-dessous pour plus de détails. J'ai vu des configurations LVM complètes sur plusieurs disques corrompues sans aucune chance de récupération, et LVM plus la mise en cache d'écriture du disque dur est une combinaison dangereuse.
data=ordered
D'ext3 (ou data=journal
Pour plus de sécurité), plus barrier=1
Pour vous assurer que la mise en cache du noyau n'affecte pas l'intégrité. (Ou utilisez ext4 qui active les barrières par défaut .) C'est l'option la plus simple et offre une bonne intégrité des données au détriment des performances. (Linux a changé l'option ext3 par défaut vers le plus dangereux data=writeback
Il y a quelque temps, alors ne vous fiez pas aux paramètres par défaut pour le FS.)hdparm -q -W0 /dev/sdX
Pour tous les lecteurs de /etc/rc.local
(Pour SATA) ou utilisez sdparm pour SCSI/SAS. Cependant, selon cette entrée dans le XFS FAQ (ce qui est très bon sur ce sujet), un lecteur SATA peut oublier ce paramètre après une récupération d'erreur de lecteur - donc vous doit utiliser SCSI/SAS, ou si vous devez utiliser SATA, placez la commande hdparm dans une tâche cron exécutée toutes les minutes environ.Garder la mise en cache d'écriture activée pour les performances (et faire face aux lecteurs qui mentent)
Une option plus complexe mais performante consiste à garder la mise en cache d'écriture SSD/disque dur activée et à s'appuyer sur les barrières d'écriture du noyau fonctionnant avec LVM sur le noyau 2.6.33+ (revérifiez en recherchant les messages "barrière" dans les journaux).
Vous devez également vous assurer que la configuration RAID, VM et système de fichiers utilise des barrières d'écriture (c'est-à-dire que le lecteur doit vider les écritures en attente avant et après les écritures de métadonnées/journaux clés) . XFS utilise des barrières par défaut, mais ext3 non , donc avec ext3 vous devez utiliser barrier=1
Dans les options de montage, et toujours utiliser data=ordered
Ou data=journal
comme ci-dessus.
Les SSD sont problématiques car l'utilisation du cache d'écriture est critique pour la durée de vie du SSD. Il est préférable d'utiliser un SSD doté d'un supercondensateur (pour activer le vidage du cache en cas de panne de courant, et donc permettre au cache d'être réécrit et non réécrit).
Configuration avancée du lecteur - mise en cache d'écriture, alignement, RAID, GPT
pvcreate
pour aligner les PV. Ce fil de liste de diffusion LVM indique le travail effectué dans les noyaux en 2011 et le problème des écritures de blocs partiels lors du mélange de disques avec 512 octets et 4 secteurs de Kio dans un seul LV.Plus difficile à récupérer les données en raison de structures sur disque plus complexes:
/etc/lvm
, Ce qui peut aider à restaurer la structure de base des LV, VG et PV, mais n'aidera pas avec les métadonnées perdues du système de fichiers.Plus difficile à redimensionner correctement les systèmes de fichiers - le redimensionnement facile du système de fichiers est souvent offert comme un avantage de LVM, mais vous devez exécuter une demi-douzaine de commandes Shell pour redimensionner un LVM basé sur FS - cela peut être fait avec le serveur entier encore en place, et dans certains cas avec le FS monté, mais je ne risquerais jamais ce dernier sans des sauvegardes à jour et en utilisant des commandes pré-testées sur un serveur équivalent (par exemple clone de reprise après sinistre du serveur de production).
lvextend
prennent en charge l'option -r
(--resizefs
) - si cela est disponible, c'est un moyen plus sûr et plus rapide de redimensionner le LV et le système de fichiers, en particulier si vous réduisez le FS, et vous pouvez surtout ignorer cette section.resize2fs
pour ext3, et à lvextend
ou lvreduce
. Sans grand soin, les tailles peuvent être légèrement différentes en raison de la différence entre 1 Go (10 ^ 9) et 1 GiB (2 ^ 30), ou la façon dont les différents outils arrondissent les tailles vers le haut ou vers le bas.Il semble que la taille LV devrait être supérieure à la taille FS par 2 x la taille de l'étendue physique LVM - PE), mais vérifiez le lien ci-dessus pour plus de détails car la source de ceci n'est pas autorisée. Souvent, autoriser 8 Mio est suffisant, mais il peut être préférable d'en autoriser plus, par exemple 100 Mio ou 1 Gio, juste pour être sûr. Pour vérifier la taille PE, et votre volume logique + tailles FS, en utilisant 4 Ko = 4096 octets:
Affiche la taille du PE en Kio: vgdisplay --units k myVGname | grep "PE Size"
Taille de tous les LV: lvs --units 4096b
Taille de (ext3) FS, suppose 4 Ko FS taille de bloc: tune2fs -l /dev/myVGname/myLVname | grep 'Block count'
En revanche, une configuration non LVM rend le redimensionnement du FS très fiable et facile - exécutez Gparted et redimensionnez les FS requis, alors il fera tout pour vous. Sur les serveurs , vous pouvez utiliser parted
à partir du Shell.
Les instantanés sont difficiles à utiliser, lents et bogués - si l'instantané manque d'espace pré-alloué, c'est automatiquement supprimé . Chaque instantané d'un LV donné est un delta par rapport à ce LV (pas par rapport aux instantanés précédents), ce qui peut nécessiter beaucoup d'espace lors de l'instantané de systèmes de fichiers avec une activité d'écriture importante (chaque instantané est plus grand que le précédent). Il est sûr de créer un instantané LV de la même taille que le LV d'origine, car l'instantané ne manquera jamais d'espace libre.
Les instantanés peuvent également être très lents (ce qui signifie 3 à 6 fois plus lent que sans LVM pour ces tests MySQL ) - voir cette réponse couvrant divers problèmes d'instantanés . La lenteur est en partie due au fait que les instantanés nécessitent de nombreuses écritures synchrones .
Les instantanés ont eu quelques bugs importants, par exemple dans certains cas ils peuvent ralentir le démarrage ou entraîner un échec complet du démarrage (car le noyau peut expirer en attente de la racine FS lorsque c'est un instantané LVM [corrigé dans la mise à jour Debian initramfs-tools
, mars 2015]).
Alternatives aux instantanés - systèmes de fichiers et VM hyperviseurs
Instantanés VM/cloud:
Instantanés du système de fichiers:
les instantanés au niveau du système de fichiers avec ZFS ou btrfs sont faciles à utiliser et généralement meilleurs que LVM, si vous êtes sur du métal nu (mais ZFS semble beaucoup plus mature, juste plus compliqué à installer):
Instantanés pour les sauvegardes en ligne et fsck
Les instantanés peuvent être utilisés pour fournir un source cohérent pour les sauvegardes, tant que vous faites attention à l'espace alloué (idéalement, l'instantané est de la même taille que le LV sauvegardé). L'excellent rsnapshot (depuis 1.3.1) gère même la création/suppression d'instantanés LVM pour vous - voir ce HOWTO sur rsnapshot en utilisant LVM . Cependant, notez les problèmes généraux avec les instantanés et qu'un instantané ne doit pas être considéré comme une sauvegarde en soi.
Vous pouvez également utiliser des instantanés LVM pour effectuer un fsck en ligne: instantané du LV et fsck de l'instantané, tout en utilisant le principal non-instantané FS - décrit ici - cependant, c'est pas tout à fait simple il est donc préférable d'utiliser e2croncheck as décrit par Ted Ts'o , mainteneur d'ext3.
Vous devez "figer" le système de fichiers temporairement pendant la prise de l'instantané - certains systèmes de fichiers tels que ext3 et XFS le feront le feront automatiquement lorsque LVM créera l'instantané.
Conclusions
Malgré tout cela, j'utilise toujours LVM sur certains systèmes, mais pour une configuration de bureau, je préfère les partitions brutes. Le principal avantage que je peux voir de LVM est la flexibilité de déplacer et de redimensionner les FS lorsque vous devez avoir une disponibilité élevée sur un serveur - si vous n'en avez pas besoin, gparted est plus facile et a moins de risques de perte de données.
LVM nécessite une grande attention lors de la configuration de la mise en cache d'écriture en raison de VM, mise en cache d'écriture du disque dur/SSD, etc.), mais il en va de même pour l'utilisation de Linux comme serveur de base de données. la plupart des outils (gparted
y compris les calculs de taille critique et testdisk
etc) rendent son utilisation plus difficile qu'elle ne devrait l'être.
Si vous utilisez LVM, soyez très prudent avec les instantanés: utilisez des instantanés VM/cloud si possible, ou étudiez ZFS/btrfs pour éviter complètement LVM - vous pouvez trouver que ZFS ou btrs est suffisamment mature par rapport à LVM avec des instantanés.
Conclusion: si vous ne connaissez pas les problèmes répertoriés ci-dessus et comment les résoudre, il est préférable de ne pas utiliser LVM.
Je [+1] ce poste, et au moins pour moi, je pense que la plupart des problèmes existent. Les voir en exécutant quelques 100 serveurs et quelques 100 To de données. Pour moi, le LVM2 sous Linux ressemble à une "idée intelligente" que quelqu'un avait. Comme certains d'entre eux, ils s'avèrent parfois "pas intelligents". C'est à dire. ne pas avoir de noyau et d'espace utilisateur (lvmtab) strictement séparés aurait pu sembler très intelligent de s'en débarrasser, car il peut y avoir des problèmes de corruption (si vous n'obtenez pas le bon code)
Eh bien, juste que cette séparation était là pour une raison - les différences montrent avec la gestion des pertes PV, et la réactivation en ligne d'un VG avec par exemple des PV manquants pour les remettre en jeu - Qu'est-ce que un jeu d'enfant sur les "LVM d'origine" (AIX, HP-UX) se transforme en merde sur LVM2 car la gestion de l'état n'est pas assez bonne. Et ne me faites même pas parler de détection de perte de quorum (haha) ou de gestion de l'état (si je supprime un disque, cela ne sera pas signalé comme indisponible. Il ne fait même pas oui le putain de colonne d'état)
Re: stabilitépvmove ... pourquoi est
pvmove perte de données
un tel article de haut rang sur mon blog, hmmm? Tout à l'heure, je regarde un disque où les données phyiscales lvm sont toujours suspendues à l'état de mid-pvmove. Il y a eu quelques fuites, je pense, et l'idée générale que c'est une bonne chose de copier des données de bloc en direct à partir de l'espace utilisateur est juste triste. Belle citation de la liste lvm "ressemble à vgreduce - le fait de ne pas gérer pvmove" signifie en fait que si un disque se détache pendant pvmove alors l'outil de gestion lvm passe de lvm à vi. Oh et il y a également eu un bogue où pvmove continue après une erreur de lecture/écriture de bloc et en fait n'écrit plus de données sur le périphérique cible. WTF?
Re: Snapshots La CoW est effectuée de manière non sécurisée, en mettant à jour les NOUVELLES données dans la zone lv de l'instantané, puis en les fusionnant une fois que vous avez supprimé l'instantané. Cela signifie que vous avez de gros IO pics lors de la fusion finale des nouvelles données dans le LV d'origine et, ce qui est beaucoup plus important, bien sûr, vous avez également un risque beaucoup plus élevé de corruption de données, car l'instantané sera rompu une fois que vous frappez le mur, mais l'original.
L'avantage est dans les performances, faire 1 écriture au lieu de 3. Choisir l'algorithme rapide mais non sûr est quelque chose que l'on attend évidemment de gens comme VMware et MS, sur "Unix", je préfère deviner que les choses seraient "bien faites". Je n'ai pas vu beaucoup de problèmes de performances tant que j'ai le magasin de sauvegarde d'instantanés sur un lecteur de disque différent que les données primaires (et sauvegarde sur un autre bien sûr)
Re: Obstacles Je ne sais pas si on peut blâmer LVM. C'était un problème de devmapper, pour autant que je sache. Mais il peut y avoir un blâme pour ne pas vraiment se soucier de ce problème depuis au moins le noyau 2.6 jusqu'à 2.6.33 AFAIK Xen est le seul hyperviseur qui utilise O_DIRECT pour les machines virtuelles, le problème était lorsque la "boucle" était utilisée parce que le noyau serait toujours en cache en utilisant cela. Virtualbox a au moins un paramètre pour désactiver des trucs comme celui-ci et Qemu/KVM semble généralement autoriser la mise en cache. Tous les fusibles FS ont également des problèmes là-bas (pas de O_DIRECT)
Re: Tailles Je pense que LVM "arrondit" la taille affichée. Ou il utilise GiB. Quoi qu'il en soit, vous devez utiliser la taille VG Pe et la multiplier par le numéro LE du LV. Cela devrait donner la taille nette correcte, et ce problème est toujours un problème d'utilisation. Il est aggravé par les systèmes de fichiers qui ne remarquent pas une telle chose pendant fsck/mount (bonjour, ext3) ou qui n'ont pas de "fsck -n" en ligne (bonjour, ext3)
Bien sûr, il est révélateur que vous ne puissiez pas trouver de bonnes sources pour de telles informations. "combien de LE pour le VRA?" "quel est le décalage phyiscal pour PVRA, VGDA, ... etc"
Comparé à l'original LVM2 est le premier exemple de "Ceux qui ne comprennent pas UNIX sont condamnés à le réinventer, mal."
Mise à jour quelques mois plus tard: j'ai déjà atteint le scénario "instantané complet" pour un test. S'ils sont pleins, l'instantané se bloque, pas le LV d'origine. J'avais tort là-bas quand j'avais publié ceci pour la première fois. J'ai récupéré des informations erronées dans un document, ou peut-être que je les avais comprises. Dans mes configurations, j'avais toujours été très paranoïaque pour ne pas les laisser se remplir et donc je n'ai jamais fini corrigé. Il est également possible d'étendre/réduire les instantanés, ce qui est un régal.
Ce que je n'ai toujours pas réussi à résoudre, c'est comment identifier l'âge d'un instantané. En ce qui concerne leurs performances, il y a une note sur la page du projet Fedora "thinp" qui dit que la technique des snapshots est en cours de révision afin qu'ils ne ralentissent pas avec chaque snapshot. Je ne sais pas comment ils l'appliquent.
si vous prévoyez d'utiliser des instantanés pour les sauvegardes - préparez-vous à un impact majeur sur les performances lorsqu'un instantané est présent. en savoir plus ici . sinon c'est tout bon. J'utilise LVM en production depuis quelques années sur des dizaines de serveurs, bien que ma principale raison de l'utiliser soit le cliché atomique, pas la possibilité d'augmenter facilement les volumes.
btw si vous comptez utiliser un lecteur de 1 To, pensez à l'alignement des partitions - ce lecteur a très probablement des secteurs physiques de 4 Ko.
Adam,
Autre avantage: vous pouvez ajouter un nouveau volume physique (PV), déplacer toutes les données vers ce PV, puis supprimer l'ancien PV sans interruption de service. J'ai utilisé cette capacité au moins quatre fois au cours des cinq dernières années.
Un inconvénient que je ne voyais pas encore clairement indiqué: il y a une courbe d'apprentissage quelque peu abrupte pour LVM2. Surtout dans l'abstraction qu'il crée entre vos fichiers et le support sous-jacent. Si vous travaillez avec seulement quelques personnes qui partagent des tâches sur un ensemble de serveurs, vous pouvez trouver la complexité supplémentaire écrasante pour votre équipe dans son ensemble. Les grandes équipes dédiées au travail informatique n'auront généralement pas un tel problème.
Par exemple, nous l'utilisons largement ici dans mon travail et avons pris du temps pour enseigner à toute l'équipe les bases, le langage et l'essentiel de la récupération de systèmes qui ne démarrent pas correctement.
Une mise en garde précise à souligner: si vous démarrez à partir d'un volume logique LVM2, vous avez rendu les opérations de récupération difficiles lorsque le serveur tombe en panne. Knoppix et ses amis n'ont pas toujours les bonnes choses pour ça. Nous avons donc décidé que notre répertoire/boot se trouverait sur sa propre partition et serait toujours petit et natif.
Dans l'ensemble, je suis fan de LVM2.
Quelques choses:
J'ai vu des gens préconiser (StackExchange et ailleurs) d'étendre [~ # ~] vm [~ # ~] l'espace latéralement: augmenter l'espace en ajoutant [~ # ~] supplémentaires [~ # ~] PV à un VG vs augmentation d'un [~ # ~] unique [~ # ~] PV. C'est moche et répartit votre système de fichiers sur plusieurs PV, créant une dépendance sur une chaîne de PV de plus en plus longue. Voici à quoi ressembleront vos systèmes de fichiers si vous mettez à l'échelle le stockage de votre machine virtuelle latéralement:
J'ai vu beaucoup de confusion à ce sujet. Si un LV linéaire ( et le système de fichiers qui y vit - sont répartis sur plusieurs PV, subiront PLEIN ou Perte de données PARTIELLE? Voici la réponse illustrée:
C'est logiquement ce à quoi nous devons nous attendre. Si les étendues contenant nos données LV sont réparties sur plusieurs PV et que l'une de ces PV disparaît, le système de fichiers dans ce LV serait catastrophiquement endommagé.
J'espère que ces petits gribouillages ont rendu un sujet complexe un peu plus facile à comprendre les risques lorsque vous travaillez avec LVM