Récupération d'un volume d'initialisation endommagé pour les instances basées sur Linux
Si votre instance ne parvient pas à s'initialiser correctement ou si elle s'initialise avec le volume d'initialisation défini sur l'accès en lecture seule, le volume d'initialisation de l'instance est peut-être endommagé. Bien que ce soit rare, le volume d'initialisation peut être endommagé dans les cas suivants :
-
Lors de l'arrêt forcé d'une instance à l'aide de l'API.
-
Lors du blocage système d'une instance dû à une erreur de système d'exploitation ou de logiciel, de l'expiration d'un redémarrage ou d'un arrêt progressif de l'instance, puis d'un arrêt forcé.
-
Lors de l'apparition d'une erreur ou d'une panne dans l'infrastructure sous-jacente alors que des écritures sur disque critiques étaient en attente dans le système.
Dans la plupart des cas, un simple redémarrage peut résoudre les problèmes d'altération du volume d'initialisation. Le redémarrage est ainsi la première action à entreprendre dans le cadre du dépannage.
Cette rubrique explique comment déterminer si le volume d'initialisation de votre instance basée sur Linux est endommagé, ainsi que les étapes à suivre pour dépanner et récupérer le volume d'initialisation endommagé. Pour les instances Windows, reportez-vous à Récupération d'un volume d'initialisation endommagé pour les instances Windows.
Détection de l'altération d'un volume d'initialisation
L'altération d'un volume d'initialisation peut empêcher l'initialisation d'une instance. Vous risquez donc de ne pas pouvoir vous connecter à l'instance via SSH. A la place, vous pouvez utiliser la fonctionnalité de connexion à la console pour une instance afin de vous connecter à l'instance qui ne fonctionne pas correctement. Pour plus d'informations sur l'utilisation de cette fonctionnalité, reportez-vous à Dépannage des instances à l'aide des connexions à la console pour une instance.
Cette section indique comment utiliser une connexion à la console série afin de déterminer si un volume d'initialisation est endommagé.
Si vous savez déjà que le volume d'initialisation de votre instance est endommagé ou si vous utilisez une image personnalisée importée, passez à la section Récupération du volume d'initialisation, qui décrit comment utiliser une deuxième instance avec les outils de système de fichiers standard pour détecter et réparer un volume d'initialisation endommagé.
- Créez une connexion à la console série pour l'instance.
-
Connectez-vous à l'instance par le biais de la console série.
A ce stade, il est normal que la console série semble se bloquer, car le système est peut-être déjà en panne.
- Redémarrez l'instance à partir de la console.
-
Une fois le processus de redémarrage lancé, revenez à la fenêtre de terminal : les messages système provenant de l'instance commencent à apparaître.
-
Surveillez les messages qui apparaissent lors du démarrage du système. La plupart des systèmes d'exploitation configurent le volume d'initialisation en lecture seule dès qu'une altération du disque est détectée, afin d'empêcher que les écritures ne viennent endommager davantage le volume. Par conséquent, recherchez les messages indiquant que le volume d'initialisation est en lecture seule. Voici quelques exemples :
-
Sur une instance comportant des volumes d'initialisation attachés iSCSI, le service
iscsiadm
ne parviendra pas à attacher un volume car celui-ci est en lecture seule. Cela empêchera généralement les instances de continuer à s'initialiser. La console série peut afficher un message semblable au suivant :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
-
Sur une instance comportant des volumes d'initialisation attachés et paravirtualisés, le système peut poursuivre le processus d'initialisation, mais se trouvera dans un état dégradé car rien ne peut être écrit sur le lecteur d'initialisation. La console série peut afficher des messages d'erreur semblables au message suivant :
[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 courants en cas d'altération d'un volume d'initialisation. Cependant, selon le système d'exploitation, d'autres messages d'erreur et comportements peuvent survenir. Si vous ne voyez pas ceux décrits ici, consultez la documentation relative à votre système d'exploitation pour obtenir des informations de dépannage supplémentaires.
-
Récupération du volume d'initialisation
Pour dépanner et récupérer un volume d'initialisation endommagé, vous devez le détacher de l'instance, puis l'attacher à une deuxième instance en tant que volume de données.
Détachement du volume d'initialisation
Si vous avez détecté que le volume d'initialisation de votre instance est endommagé, vous devez le détacher de l'instance pour pouvoir réaliser les étapes de dépannage et de récupération.
Attachement du volume d'initialisation en tant que volume de données à une deuxième instance
Pour la deuxième instance, il est recommandé d'utiliser une instance exécutant un système d'exploitation qui correspond le plus au système d'exploitation de l'instance du volume d'initialisation. Les volumes d'initialisation d'instances Linux peuvent uniquement être attachés à d'autres instances Linux. La deuxième instance doit se trouver dans les mêmes domaine de disponibilité et région que l'instance du volume d'initialisation. Si aucune instance existante n'est disponible, créez une instance Linux en suivant les étapes décrites dans Création d'une instance. Une fois que vous disposez de la deuxième instance, assurez-vous que vous pouvez vous y connecter et qu'elle est fonctionnelle avant de passer aux étapes de récupération. Pour connaître les étapes permettant d'accéder à l'instance, reportez-vous à Connexion à une instance Linux. Après avoir vérifié que l'instance est fonctionnelle, procédez aux étapes suivantes.
-
Exécutez la commande
lsblk
et notez les lecteurs actuellement présents sur 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 d'initialisation à la deuxième instance en tant que volume de données. Pour plus d'informations, reportez-vous à Attachement d'un volume d'initialisation.Procédure d'attachement du volume d'initialisation en tant que volume de données
- Ouvrez le menu de navigation et sélectionnez Compute. Sous Compute, sélectionnez Instances.
- Cliquez sur l'instance à laquelle attacher un volume.
- Sous Ressources, cliquez sur Volumes de blocs attachés.
- Cliquez sur Attacher un volume de blocs.
-
Sélectionnez le type d'attachement du 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.
Si vous sélectionnez iSCSI comme type d'attachement du volume, vous devez vous connecter au volume.Pour plus d'informations, reportez-vous à Connexion à un volume de blocs.
- Dans la liste déroulante Compartiment du volume de blocs, sélectionnez le compartiment.
- Choisissez l'option Sélectionner le volume, puis sélectionnez le volume dans la section Volume d'initialisation de la liste déroulante Volume de blocs.
- Sélectionnez Lecture/Ecriture comme type d'accès.
-
Cliquez sur Attacher.
Lorsque l'icône du volume ne le répertorie plus comme ayant le statut Attachement, passez aux étapes suivantes.
- Réexécutez la commande
lsblk
pour vérifier que le volume d'initialisation se présente maintenant comme un volume attaché à l'instance. Dans cet exemple de sortie pourlsblk
, le volume d'initialisation attaché en tant que volume de données apparaît avec la valeursdb
: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 du volume.L'exemple suivant pour la commande
fsck
montre la sortie lorsqu'il n'existe aucune erreur ou altération sur 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 se trouvent sur une partition, vous êtes généralement invité à les réparer. Voici un exemple de session de réparation interactive d'un volume d'initialisation ext4 endommagé 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
Remarque
En règle générale, les systèmes de fichiers XFS réparent automatiquement leur contenu lors de l'initialisation du système, en corrigeant toute altération lors du processus d'initialisation. Vous pouvez utiliser la commande
xfs_repair
pour forcer la réparation dans les scénarios où l'altération du volume d'initialisation empêche le fonctionnement de la réparation automatique, comme indiqué 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