Récupération d'un volume de démarrage corrompu pour des instances Linux
Si votre instance ne parvient pas à démarrer avec succès ou démarre avec le volume de démarrage réglé à un accès en lecture seule, le volume de démarrage de l'instance est peut-être corrompu. Bien que cette occurrence soit rare, la corruption du volume de démarrage peut survenir dans les scénarios suivants :
-
Lorsqu'une fermeture forcée est effectuée pour une instance à l'aide de l'API.
-
Lorsqu'une instance rencontre un blocage du système en raison d'une erreur de système d'exploitation ou de logiciel, puis un redémarrage normal ou que le délai de fermeture de l'instance expire, et qu'une fermeture forcée se produit.
-
Lorsqu'une erreur ou une interruption se produit dans l'infrastructure sous-jacente et que des écritures de disque critiques étaient en attente dans le système.
Dans la plupart des cas, un redémarrage simple résout les problèmes de corruption du volume de démarrage. Il s'agit donc de la première action à entreprendre lors du dépannage.
Cette rubrique décrit comment déterminer si le volume de démarrage de l'instance Linux est corrompu et les étapes à suivre pour dépanner et récupérer le volume de démarrage corrompu. Pour des instances Windows, voir Récupération d'un volume de démarrage corrompu pour des instances Windows.
Détection de la corruption du volume de démarrage
La corruption du volume de démarrage peut empêcher le démarrage d'une instance, vous ne pourrez donc peut-être pas vous connecter à l'instance à l'aide de SSH. Utilisez plutôt la fonction de connexion à la console d'instance pour vous connecter à l'instance défectueuse. Pour plus d'informations sur l'utilisation de cette fonction, voir Dépannage des instances à l'aide des connexions à la console d'instances.
Cette section décrit comment utiliser une connexion à la console série pour détecter si le volume de démarrage est corrompu.
Si vous avez déjà confirmé que le volume de démarrage de l'instance est corrompu ou si vous utilisez une image personnalisée importée, accédez à la section Récupération du volume de démarrage qui décrit comment utiliser une deuxième instance ainsi que les outils standard du système de fichiers pour détecter et réparer la corruption du volume de démarrage.
- Créez une connexion à la console série pour l'instance.
-
Connectez-vous à l'instance au moyen de la console série.
À ce stade, il est normal que la console série semble se bloquer, car le système est peut-être déjà tombé en panne.
- Redémarrez l'instance à partir de la console.
-
Une fois que le processus de redémarrage commence, revenez à la fenêtre du terminal où vous devriez voir les messages du système à partir du début de l'instance dans la fenêtre.
-
Surveillez les messages qui s'affichent alors que le système démarre. La plupart des systèmes d'exploitation règlent le volume de démarrage à la lecture seule dès que la corruption du disque est détectée afin d'empêcher les écritures de corrompre encore plus le volume. Recherchez donc les messages qui indiquent que le volume de démarrage est en lecture seule. Ci-dessous, se trouvent quelques exemples :
-
Dans une instance avec des attachements iSCSI de volumes de démarrage, le service
iscsiadm
ne peut pas attacher de volume, car celui-ci est en mode de lecture seule. Cela empêche généralement les instances de continuer à démarrer. La console série peut afficher un message similaire à ce qui suit :iscsiadm: Maybe you are not root? iscsiadm: Could not lock discovery DB: /var/lock/iscsi/lock.write: Read-only file system touch: cannot touch `/var/lock/subsys/iscsid': Read-only file system touch: cannot touch `/var/lock/subsys/iscsi': Read-only file system
-
Dans une instance avec des attachements de volumes de démarrage paravirtualisés, le système peut poursuivre le processus de démarrage, mais il sera également détérioré, car rien ne peut être écrit dans le lecteur de démarrage. La console en série peut afficher des messages d'erreur similaires aux suivants :
[FAILED] Failed to start Create Volatile Files and Directories. See 'systemctl status systemd-tmpfiles-setup.service' for details. ... [ 27.160070] cloud-init[819]: os.chmod(path, real_mode) [ 27.166027] cloud-init[819]: OSError: [Errno 30] Read-only file system: '/var/lib/cloud/data'
Les messages d'erreur et le comportement du système décrits ici sont les plus souvent observés pour la corruption du volume de démarrage; toutefois, selon le système d'exploitation, vous pouvez voir des messages d'erreur et un comportement du système différents. Si vous ne voyez pas les messages décrits ici, consultez la documentation de votre système d'exploitation pour obtenir des informations supplémentaires sur le dépannage.
-
Récupération du volume de démarrage
Pour dépanner et récupérer le volume de démarrage corrompu, vous devez détacher le volume de démarrage de l'instance, puis l'attacher à une deuxième instance en tant que volume de données.
Détachement du volume de démarrage
Si vous avez détecté que le volume de démarrage de l'instance est corrompu, vous devez le détacher de l'instance pour pouvoir commencer les étapes de dépannage et de récupération.
Attachement du volume de démarrage en tant que volume de données à une deuxième instance
Pour la deuxième instance, nous vous recommandons d'utiliser une instance exécutant un système d'exploitation qui correspond le mieux à celui de l'instance du volume de démarrage. Vous devez seulement attacher des volumes de démarrage pour des instances Linux à d'autres instances Linux. La deuxième instance doit se trouver dans le même domaine de disponibilité et la même région que l'instance du volume de démarrage. Si aucune instance existante n'est disponible, créez une instance Linux à l'aide des étapes décrites sous Création d'une instance. Une fois la deuxième instance lancée, assurez-vous de pouvoir vous y connecter et qu'elle fonctionne avant de continuer avec les étapes de récupération. Pour les étapes d'accès à l'instance, voir Connexion à une instance Linux. Après avoir vérifié que l'instance fonctionne, effectuez les étapes suivantes.
-
Exécutez la commande
lsblk
et notez les lecteurs qui sont actuellement dans l'instance, par exemple :lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 46.6G 0 disk ├─sda2 8:2 0 8G 0 part [SWAP] ├─sda3 8:3 0 38.4G 0 part / └─sda1 8:1 0 200M 0 part /boot/efi
- Attachez le volume de démarrage à la deuxième instance en tant que volume de données. Pour plus d'informations, voir Attachement d'un volume de démarrage.Pour attacher le volume de démarrage en tant que volume de données
- Ouvrez le menu de navigation et sélectionnez Calcul. Sous Calcul, sélectionnez Instances.
- Sélectionnez l'instance à laquelle vous voulez attacher un volume.
- Sous Ressources, sélectionnez Volumes par blocs attachés.
- Sélectionnez Attacher un volume par blocs.
-
Sélectionnez le type d'attachement de volume. Si des attachements paravirtualisés sont disponibles pour cette instance, nous vous recommandons de sélectionner ce type d'attachement pour cette procédure.
If you select iSCSI as the volume attachment type, you need to connect to the volume, see Connecting to a Block Volume for more information.
- Dans la liste déroulante Compartiment du volume par blocs, sélectionnez le compartiment.
- Sélectionnez l'option Sélectionner un volume, puis sélectionnez le volume dans la section Volume de démarrage de la liste déroulante Volume par blocs.
- Sélectionnez Lecture/Écriture comme type d'accès.
-
Sélectionnez Joindre.
Lorsque l'icône du volume ne l'indique plus comme Attachement, passez aux étapes suivantes.
- Exécutez de nouveau la commande
lsblk
pour confirmer que le volume de démarrage apparaît maintenant en tant que volume attaché à l'instance. Dans la sortie de cet exemple pourlsblk
, le volume de démarrage attaché en tant que volume de données apparaît commesdb
:lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 46.6G 0 disk ├─sdb2 8:18 0 8G 0 part ├─sdb3 8:19 0 38.4G 0 part └─sdb1 8:17 0 200M 0 part sda 8:0 0 46.6G 0 disk ├─sda2 8:2 0 8G 0 part [SWAP] ├─sda3 8:3 0 38.4G 0 part / └─sda1 8:1 0 200M 0 part /boot/efi
-
Exécutez la commande
fsck
sur la partition racine du volume. La partition racine est généralement la plus grande partition sur le volume.L'exemple suivant pour la commande
fsck
affiche la sortie sans erreur ni corruption pour les partitions d'une instance Oracle 7.6 :sudo fsck -V /dev/sdb1 fsck from util-linux 2.23.2 [/sbin/fsck.vfat (1) -- /boot/efi] fsck.vfat /dev/sdb1 fsck.fat 3.0.20 (12 Jun 2013) /dev/sdb1: 17 files, 2466/51145 clusters sudo fsck -V /dev/sdb2 fsck from util-linux 2.23.2 sudo fsck -V /dev/sdb3 fsck from util-linux 2.23.2 [/sbin/fsck.xfs (1) -- /] fsck.xfs /dev/sdb3 If you wish to check the consistency of an XFS filesystem or repair a damaged filesystem, see xfs_repair(8).
Si des erreurs sont présentes sur une partition, vous êtes généralement invité à les réparer. Ci-dessous, se trouve l'exemple d'une session interactive de réparation d'un volume de démarrage ext4 corrompu pour une instance Ubuntu :
sudo fsck -V /dev/sdb1 fsck from util-linux 2.31.1 [/sbin/fsck.ext4 (1) -- /] fsck.ext4 /dev/sdb1 e2fsck 1.44.1 (24-Mar-2018) One or more block group descriptor checksums are invalid. Fix<y> yes Group descriptor 92 checksum is 0xe9a1, should be 0x1f53. FIXED. Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Block bitmap differences: Group 92 block bitmap does not match checksum. FIXED. cloudimg-rootfs: ***** FILE SYSTEM WAS MODIFIED ***** cloudimg-rootfs: 75336/5999616 files (0.1% non-contiguous), 798678/12181243 blocks
Note
En général, les systèmes de fichiers XFS réparent automatiquement leurs contenus lors du démarrage du système, corrigeant ainsi toute corruption éventuelle pendant le processus de démarrage. Vous pouvez utiliser la commande
xfs_repair
pour forcer une réparation pour des scénarios où la corruption du volume de démarrage empêche l'utilisation de la fonctionnalité de réparation automatique, comme illustré dans l'exemple suivant :sudo xfs_repair /dev/sdb3 Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... ... Phase 7 - verify and correct link counts... done