Il était une fois un serveur LAMP sur Ubuntu 12.04 qui fonctionnait sur un seul disque. En conséquence, le problème s'est posé d'assurer le transfert du serveur vers une configuration plus tolérante aux pannes - RAID1. Les camarades en charge de ce serveur ont installé le deuxième disque, et le reste m'a été attribué, et l'accès au serveur se faisait uniquement via ssh, ce qui a compliqué la tâche.
Après la recherche, un
guide a été trouvé et la formation a commencé sur une machine virtuelle. Lorsque j'ai atteint le résultat souhaité, avec une certaine excitation, mais j'ai néanmoins transféré avec succès le serveur susmentionné vers RAID1 et établi à l'avance les étapes nécessaires. J'ai décidé de placer l'article dans lequel le processus de transfert est décrit plus en détail sur "Habr".
La répartition du disque était la suivante:
/dev/sda1 2048 1574911 786432 swap /dev/sda2 * 1574912 16254975 7340032 / /dev/sda3 16254976 31457279 7601152 /home
Le deuxième disque étant nouveau, aucune opération n'a été nécessaire pour supprimer la partition précédente.
Les premières choses ont été modifiées dans
/etc/default/grub
:
GRUB_TIMEOUT = 5 (raccourcir le délai);
GRUB_RECORDFAIL_TIMEOUT = 10 (ajouter pour que le système puisse démarrer en cas d'erreur, sans nécessiter d'intervention interactive; timeout à goûter);
GRUB_CMDLINE_LINUX_DEFAULT = "bootdegraded" (assurez-vous d'ajouter "bootdegraded" afin que le système puisse démarrer à partir d'un tableau inférieur);
# GRUB_HIDDEN_TIMEOUT_QUIET = true (doit être commenté pour que le menu GRUB soit toujours affiché).
Désactivez temporairement le swap, définissez fdisk sur la partition / dev / sda1 à l'aide de fdisk (Linux raid autodetect), puis partitionnez le deuxième disque de la même manière que le premier (toutes les opérations sont effectuées avec des droits de superutilisateur):
sfdisk –d /dev/sda | sfdisk –f /dev/sdb
Ensuite, nous commençons à construire notre RAID étape par étape:
mdadm --create --verbose /dev/md0 --raid-devices=2 --level=1 --metadata=1.2 /dev/sda1 /dev/sdb1
Créez une section sous
swap
:
mkswap /dev/md0
Nous corrigeons
/etc/fstab
, en remplaçant les partitions du premier disque par des partitions RAID et en changeant les nombres dans la sixième colonne (la nécessité de vérifier fsck) en zéros:
/dev/sda1 → /dev/md0
Activer l'
swap
:
swapon -a
Puisque notre serveur travaille actuellement sur le premier disque, nous créons le RAID en utilisant jusqu'à présent uniquement le deuxième disque:
mdadm --create --verbose /dev/md1 --raid-devices=2 --level=1 --metadata=1.2 missing /dev/sdb2 mkfs.ext4 /dev/md1 mdadm --create --verbose /dev/md2 --raid-devices=2 --level=1 --metadata=1.2 missing /dev/sdb3 mkfs.ext4 /dev/md2
Mise à jour de la configuration
mdadm.conf
:
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
initramfs
pour qu'il
initramfs
informations sur notre RAID:
update-initramfs -u
Ensuite, le processus le plus long commence - la synchronisation des données. Étant donné que notre serveur effectue certaines tâches, il peut s'avérer qu'une fois la synchronisation terminée, une partie des informations sur les sections de la baie différera des données sur les sections correspondantes du disque de travail. Il existe plusieurs options: vous pouvez choisir l'heure de la moindre charge, vous pouvez arrêter une partie des services pendant la durée de la synchronisation, ou vous pouvez négliger les écarts. En général, nous montons et synchronisons:
mount /dev/md1 /mnt/ && [tmux|screen] rsync -axu / /mnt mount /dev/md2 /mnt/home && [tmux|screen] rsync -axu /home/ /mnt/home
Pour éviter que la synchronisation ne soit interrompue en raison d'une interruption inattendue de la connexion ssh, l'utilisation d'un multiplexeur de terminal ne gênera pas.
Après avoir attendu la fin de la synchronisation, montez les répertoires système sur une nouvelle racine:
mount --bind /proc /mnt/proc mount --bind /dev /mnt/dev mount --bind /var /mnt/var mount --bind /run /mnt/run mount --bind /sys /mnt/sys
Nous passons à un nouveau système
chroot /mnt
et installez le chargeur de démarrage sur les deux disques
grub-install -–recheck /dev/sda grub-install --recheck /dev/sdb
Nous mettons à jour la configuration de démarrage pour charger les modules nécessaires pour RAID (
mdraid1x
):
update-grub
Nous revenons au système d'origine et, si nécessaire, resynchronisons les sections:
[tmux|screen] rsync -axu / /mnt [tmux|screen] rsync -axu /home/ /mnt/home
Puisque nous n'avons pas d'accès physique à la console ou au serveur et que nous ne pouvons pas sélectionner le disque à partir duquel le RAID va démarrer, nous utilisons cette astuce: nous transférons la configuration du chargeur de démarrage préparée sur le disque à partir duquel le système démarre et qui n'est pas en RAID Qui connaît le RAID. Copiez grub.cfg du disque situé dans le RAID sur notre disque de démarrage actuel. Cela permettra au système de démarrer avec / dev / sda, mais de monter les baies et de continuer à démarrer à partir de la partition déjà dans le RAID. Tout d'abord, enregistrez l'ancien fichier, qui peut être nécessaire lors de la restauration du système s'il n'est pas possible de démarrer à partir du RAID, puis copiez le fichier de configuration «combat»:
cp -p /boot/grub/grub.cfg /boot/grub/grub.old cp -p /mnt/boot/grub/grub.cfg /boot/grub/grub.cfg
De plus, vous pouvez comparer ces fichiers et vous assurer que dans le nouveau fichier de configuration du chargeur de démarrage, la partition racine est répertoriée comme étant sur RAID.
Nous passons maintenant à l'étape la plus importante du travail effectué et redémarrons. Vous pouvez lancer une commande
ping
vers le serveur dans la console afin qu'il soit clair quand le serveur sera à nouveau disponible. Nous nous
lsblk
et voyons que tout s'est déroulé comme nous le voulions:
lsblk
montre que les répertoires
/
et
/home
sont sur des partitions RAID.
Un travail facile et agréable reste pour l'apéritif - ajoutez deux partitions du premier disque à la matrice, après les avoir
fdisk
avec
fdisk
taper
fd :
mdadm /dev/md1 --add /dev/sda2 mdadm /dev/md2 --add /dev/sda3
puis regardez périodiquement comment se déroule la synchronisation du miroir:
watch -n 5 cat /proc/mdstat
Permettez-moi de terminer ici, merci de votre attention!