Résoudre les problèmes de transfert de système de fichiers

Ce document explique comment identifier et résoudre les problèmes liés au transfert et aux agents de transfert. Il indique également où trouver les journaux des agents, qui vous aideront dans le dépannage de ces problèmes.

Errors

Le tableau suivant décrit les messages d'erreur liés au transfert et indique comment les résoudre :

Message d'erreur Type d'erreur Explication Méthode de dépannage
Modifié lors du transfert FILE_MODIFIED_FAILURE Le fichier source a été modifié lors du transfert chaque fois que le service de transfert de stockage a tenté de copier le fichier source. Empêche les écritures dans le fichier spécifié lors de la prochaine opération du service de transfert de stockage.
Échec du transfert PRECONDITION_FAILURE L'objet Cloud Storage associé au fichier source a été modifié chaque fois que le service de transfert de stockage a tenté d'importer le fichier. Empêchez les différentes tâches de transfert d'écrire le même fichier dans le même bucket Cloud Storage en utilisant des préfixes d'objet Cloud Storage uniques lorsque vous créez des tâches de transfert.
Répertoire source introuvable SOURCE_DIR_NOT_FOUND Soit le chemin source spécifié est incorrect, soit il est correct, mais les agents n'y ont pas tous accès. Vérifiez la configuration de la tâche de transfert et vérifiez que :
Impossible de trouver le répertoire source ou de destination du job ROOT_DIR_NOT_FOUND Soit le chemin source/dest spécifié est incorrect, soit il est correct, mais les agents n'y ont pas tous accès. Vérifiez la configuration de la tâche de transfert et vérifiez que :
Fichier introuvable FILE_NOT_FOUND_FAILURE Le fichier source a été trouvé, mais il a été supprimé avant de pouvoir être transféré vers Cloud Storage. Si le fichier a été supprimé par erreur, restaurez-le afin que la prochaine tâche de transfert puisse l'importer.
Bucket de destination introuvable BUCKET_NOT_FOUND Le bucket de destination n'existe pas dans Cloud Storage. Vérifiez qu'il n'y a pas d'erreur de nommage et que le bucket de destination existe.
Objet de métadonnées interne introuvable METADATA_OBJECT_
NOT_FOUND_FAILURE
Le service de transfert de stockage stocke les métadonnées dans le bucket de destination avec le préfixe storage-transfer. Si les fichiers de métadonnées sont supprimés avant la fin des opérations de transfert correspondantes, cette erreur s'affiche. Évitez de supprimer des objets ayant le préfixe storage-transfer/ dans le bucket de destination tant que toutes les tâches de transfert ne sont pas terminées.
Échec en raison d'un nom de fichier non valide INVALID_FILE_NAME Le chemin d'accès à un fichier source n'est pas valide. Vérifiez et corrigez le chemin d'accès au fichier spécifié. Vérifiez que le chemin d'accès ne comporte que des caractères acceptés par Cloud Storage.
Échec en raison d'une classe de stockage non valide INVALID_FILE_STORAGE_CLASS La classe de stockage de la source donnée n'autorise pas les lectures. Consultez la documentation de votre fournisseur de services cloud pour déterminer comment placer les données dans une classe de stockage permettant de les copier.
Échec en raison d'un URI de session d'importation avec reprise non valide SESSION_URI_INVALID L'ID d'importation avec reprise ou l'URI de la session est arrivé à expiration ou a été annulé. L'échec est réessayé de manière incorrecte. Veuillez contacter l'assistance.
Échec en raison d'une taille de fichier non valide INVALID_FILE_SIZE La taille du fichier n'est pas valide. Vérifiez que la taille du fichier est supérieure ou égale à 0 et inférieure ou égale à 5 Tio (taille maximale des objets Cloud Storage) pour les transferts vers Cloud Storage.
Échec dû aux autorisations PERMISSION_FAILURE et UNAUTHENTICATED Un agent de transfert ne dispose pas des autorisations nécessaires pour effectuer une opération. Cette erreur recouvre les deux cas suivants :
  • Un agent ne dispose pas des autorisations Google Cloud nécessaires.
  • Un agent ne peut pas lire un fichier ou un répertoire en raison d'autorisations insuffisantes sur le système de fichiers source.

Effectuez les vérifications suivantes :

L'objet est soumis aux règles de conservation des buckets et ne peut pas être supprimé, écrasé ou archivé PERMISSION_FAILURE Une règle de conservation est appliquée au bucket, et l'objet existe déjà dans le bucket. Le service de transfert de stockage ne peut pas écraser les objets existants dans le bucket. Cette erreur peut s'afficher si le fichier a été modifié à la source ou si le service de transfert de stockage tente d'importer deux fois en raison des conditions du réseau et que la première importation a réussi. Vérifiez que les données de votre bucket Cloud Storage correspondent à vos attentes. Vous pouvez vérifier que la taille et l'heure de modification des fichiers sources correspondent à leurs équivalents d'objet Cloud Storage en exécutant à nouveau la tâche et en confirmant qu'il n'y a pas d'erreur.
Le service ne disposait pas des autorisations nécessaires SERVICE_PERMISSION_FAILURE Le service de transfert de stockage ne dispose pas des autorisations nécessaires pour effectuer l'opération. Le service de transfert de stockage utilise un compte de service géré par Google, généralement au format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com, pour accéder aux ressources. Pour déterminer votre numéro de projet PROJECT_NUMBER spécifique, utilisez l'appel d'API googleserviceaccounts.get. Vérifiez que le compte de service dispose des rôles suivants:
  • roles/storagetransfer.serviceAgent dans le projet
  • roles/storage.admin sur tous les buckets de destination
Agent non compatible AGENT_UNSUPPORTED_VERSION La version de l'agent n'est plus compatible avec le service de transfert de stockage. Il s'agit d'une erreur temporaire, due à une mise à jour défectueuse de l'agent. Si cette erreur se produit, procédez comme suit :
  1. Arrêtez tous les agents.
  2. Récupérez la dernière image Docker en exécutant la commande suivante : sudo docker pull gcr.io/cloud-ingest/tsop-agent
  3. Exécutez la commande Docker run pour démarrer tous les conteneurs d'agent.
Si le problème persiste, contactez l'équipe d'assistance.
Échec causé par l'inadéquation du hachage HASH_MISMATCH_FAILURE Chaque fois que le service de transfert de stockage a tenté d'importer ce fichier, les octets téléchargés étaient corrompus. Par conséquent, le hachage du fichier sur site ne correspondait pas à celui de l'objet Cloud Storage obtenu. Cette erreur peut être due à un certain nombre de problèmes potentiels. Si le taux d'échecs dus à l'inadéquation du hachage est faible (moins de 1 %) et le volume du transfert important, réessayez de transférer les fichiers ayant échoué. Si le taux d'échecs dus à l'inadéquation du hachage (1 % ou plus) est élevé, nous vous recommandons de rechercher sur la machine de l'agent l'existence de défaillances matérielles potentielles affectant la mémoire, le processeur, ou autres.
Échec causé par un mode de fichier non compatible UNSUPPORTED_FILE_MODE Le service de transfert de stockage a rencontré un fichier dont le mode n'est pas compatible, tel qu'un appareil, un socket, un pipeline nommé ou un fichier irrégulier. Supprimez ces types de fichiers particuliers du répertoire source.
Échec causé par une erreur dans le système de fichiers FILESYSTEM_ERROR Un agent a rencontré une erreur du système de fichiers ou du système d'exploitation lors de l'exécution d'une opération sur le système de fichiers, telle que "read", "seek" ou "stat". Lisez la description de l'échec pour comprendre quelle opération du système de fichiers a échoué. Assurez-vous que le système de fichiers est accessible à l'agent sur site et qu'il réalise sans problème les opérations de base sur les fichiers.
Échec en raison d'une erreur inconnue UNKNOWN_FAILURE Une erreur inattendue s'est produite. Lisez la description de l'échec. Si la description de l'échec ne contient pas suffisamment d'informations pour résoudre le problème, veuillez contacter l'assistance.
Échec causé par une spécification non valide INVALID_SPEC L'agent a reçu une spécification interne corrompue. Vérifiez la corruption des données sur les hôtes de l'agent et contactez l'assistance si vous n'en trouvez aucune.
Échec en raison d'un fichier manifeste vide ou non valide CONFORMANCE_FAILURE L'agent ne peut pas lire ni obtenir d'octets CSV valides en raison d'un formattage ou d'entrées CSV non valides. Assurez-vous que les entrées du fichier manifeste sont des chemins de fichier valides. Si la description de l'échec ne contient pas suffisamment d'informations pour résoudre le problème, veuillez contacter l'assistance.
Retour à des importations avec reprise plutôt qu'à des importations en plusieurs parties en raison de erreur "Autorisation refusée" PERMISSION_FAILURE Les importations multiparties ont été activées pour ce transfert, mais les autorisations appropriées n'ont pas été définies sur le bucket. Pour connaître les autorisations requises, consultez la section Importations multiparties de la page Autorisations du système de fichiers.

Afficher les journaux des agents

Les journaux des agents contiennent des informations sur les processus des agents. Ils peuvent vous aider à résoudre les problèmes de connexion des agents. Si les agents sont répertoriés comme connectés dans Google Cloud Console mais que des transferts échouent, consultez la section Afficher les erreurs pour voir quelques-unes des erreurs de transfert. Pour afficher les journaux qui contiennent un enregistrement pour chaque fichier que le service de transfert de stockage a traité lors d'un transfert, consultez la section Afficher les journaux de transfert.

Par défaut, les journaux des agents sont stockés dans le répertoire /tmp. Vous pouvez modifier l'emplacement de stockage à l'aide de l'option de ligne de commande --log-dir=logs-directory.

Les journaux sont nommés de la façon suivante :

agent.hostname.username.log.log-level.timestamp

Où :

  • hostname est le nom de l'hôte sur lequel l'agent est exécuté.
  • username est le nom de l'utilisateur exécutant l'agent.
  • log-level a l'une des valeurs suivantes :
    • INFO : messages d'information
    • ERROR : erreurs rencontrées lors du transfert, mais qui n'empêchent pas la tâche de transfert de se poursuivre
    • FATAL : erreurs rencontrées qui empêchent la tâche de transfert de se poursuivre
  • timestamp est l'horodatage au format YYYYMMDD-hhmmss.thread-id.

Le répertoire des journaux contient les liens symboliques suivants vers les journaux les plus récents pour chacun des niveaux de priorité :

  • agent.ERROR
  • agent.FATAL
  • agent.INFO

Lenteur du transfert

Si le transfert de vos données prend beaucoup de temps, vérifiez les points suivants :

  1. Le débit de lecture de votre système de fichiers doit être environ 1,5 fois supérieur à la vitesse d'importation souhaitée. Vous pouvez utiliser FIO pour tester le débit en lecture de votre système de fichiers.

    Installez fio :

     sudo apt install -y fio
     

    Créez un répertoire fiotest :

     TEST_DIR=/mnt/mnt_dir/fiotest
     sudo mkdir -p $TEST_DIR
     

    Testez le débit en lecture :

     sudo fio --directory=$TEST_DIR --direct=1
        --rw=randread --randrepeat=0 --ioengine=libaio --bs=1M --iodepth=8
        --time_based=1 --runtime=180 --name=read_test --size=1G
     

    Une fois que vous avez exécuté les commandes ci-dessus, Fio génère un rapport. La ligne intitulée "bw" représente la bande passante totale cumulée de tous les threads et peut être utilisée comme valeur représentative du débit en lecture.

  2. Vérifiez votre bande passante Internet disponible vers le service de transfert de stockage à l'aide de l'outil iPerf3.

  3. Assurez-vous que chacun de vos agents de transfert dispose d'au moins quatre processeurs virtuels et de 8 Go de mémoire.

Si vous avez validé les conditions ci-dessus et que vous rencontrez toujours des temps de transfert élevés, vous pouvez ajouter des agents supplémentaires pour augmenter le nombre de connexions simultanées au système de fichiers de vos données.

Pour plus d'informations sur la façon d'optimiser les performances de vos agents de transfert, consultez la section Bonnes pratiques concernant les agents.

Résoudre les erreurs liées aux agents

Les sections suivantes expliquent comment identifier et résoudre les erreurs liées aux agents de transfert:

Les agents ne sont pas connectés

Si les agents de transfert ne sont pas affichés comme étant connectés dans Google Cloud Console:

  1. Vérifiez que les agents peuvent se connecter aux API Cloud Storage :

    1. Pour tester la connexion d'un agent aux API Cloud Storage, exécutez la commande suivante à partir de la machine sur laquelle il est installé :

      gcloud storage cp test.txt gs://my-bucket

      Remplacez :

      my-bucket par le nom de votre bucket Cloud Storage.

  2. Si votre projet utilise VPC Service Controls, affichez les journaux des agents pour consulter les erreurs. Si VPC Service Controls est mal configuré, les journaux des agents INFO contiennent l'erreur suivante :

    Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: id

    Dans ce résultat :

Les agents sont connectés, mais les tâches échouent

Si les agents sont affichés comme étant connectés mais que les tâches de transfert échouent, examinez les détails des erreurs concernant les tâches ayant échoué.

Le proxy refuse les adresses IP

Si vous exécutez votre application derrière un proxy tel que Squid et que vous utilisez une liste d'autorisation, vous pouvez constater que des requêtes sont refusées en raison de l'utilisation d'adresses IP au lieu d'hôtes.

Pour résoudre ce problème, utilisez la commande docker run pour exécuter les agents et ajoutez l'indicateur suivant :

--transfer-service-endpoint=storagetransfer.googleapis.com:443

Si vous utilisez un autre point de terminaison pour atteindre googleapis.com (par exemple, Private Service Connect), remplacez googleapis.com par le point de terminaison alternatif.