Skip to content

Comment migrer des fichiers entre différents espaces de stockage

Cette page décrit une procédure pour migrer des fichiers entre différentes instances de stockage dans S-Filer.

S-Filer Portal permet aux clients d'utiliser différentes instances de stockage pour les données de fichiers chiffrés. Il comprend également des fonctionnalités pour déterminer l'instance de stockage par défaut ainsi qu'un contrôle granulaire sur quelle communauté utilise quelle instance de stockage. Cependant, la solution n'inclut pas de mécanisme intégré pour migrer les fichiers existants d'une instance de stockage à une autre. La méthode recommandée consiste à définir la nouvelle instance de stockage, la configurer comme par défaut, s'assurer qu'aucune communauté n'utilise l'ancienne instance de stockage, puis laisser les politiques de rétention de fichiers supprimer progressivement les fichiers de l'ancienne instance.

Si le besoin est de déplacer rapidement tous les fichiers d'un stockage à un autre sans attendre l'application des politiques de rétention de fichiers, vous pouvez utiliser cette procédure pour le faire. Pour accomplir cette tâche, elle utilise une fonctionnalité dans S-Filer appelée "Rechiffrement de fichiers" qui est normalement utilisée lorsqu'une clé utilisée pour chiffrer les fichiers expire avant que les politiques de rétention de fichiers n'aient supprimé le fichier.

Attention

Cette fonctionnalité n'est pas encore disponible dans la solution. Cette procédure implique de modifier directement les données dans la base de données et donc comporte certains risques de corruption des données. Ne pas tenter ceci sans avoir d'abord consulté le support OKIOK et assurez-vous que les étapes sont réalisées dans un environnement non productif avant de les exécuter en production.

Prérequis

  1. Créer une nouvelle instance de stockage correspondant à l'endroit où vous souhaitez déplacer les fichiers si cela n'est pas déjà fait.
  2. Trouver l'ID des instances de stockage. Exécuter la requête suivate et trouver les lignes correspondant à la source (noter la valeur "ID" comme SOURCE_STORAGE_INSTANCE_ID) et à la destination (noter la valeur "ID" comme DESTINATION_STORAGE_INSTANCE_ID) de l'opération de migration.
    sql
    SELECT * from StorageInstance
  3. S'assurer que le stockage source n'est pas le défaut et n'est utilisé pour aucune communauté sinon les fichiers continueront d'être téléversés dans ce stockage.

Migration des fichiers communauté par communauté

Dans cette approche, tous les fichiers ne sont pas migrés en une seule fois, mais plutôt sur une base communauté par communauté.

  1. Liste des communautés où les fichiers sont stockés sur le stockage source comme ceci :
    sql
    select c.NAME as 'Nom de la communauté',
       c.RECIPIENTNODEID, 
       count(fi.fileinfoid) as 'Nombre de fichiers', 
       sum(fi.DOCUMENTSIZE) as 'Taille totale des fichiers'
    from Community c
    inner join Certificate cert on cert.RecipientNodeId = c.RECIPIENTNODEID
    inner join FileVersion fv on fv.RecipientCertificateId = cert.Id
    inner join TransferContext tc on tc.TRANSFERCONTEXTID = fv.TRANSFERCONTEXTID
    inner join FileInfo fi on fi.FILEINFOID = tc.FILEINFOID
    where fi.STORAGEINSTANCEID = [SOURCE_STORAGE_INSTANCE_ID]
    group by c.NAME, c.RECIPIENTNODEID
    order by c.name
  2. Pour une communauté donnée, changez la date de création et d'expiration de tous les certificats pour cette communauté :
    sql
    update Certificate set 
       CreationDate = '2001-01-01 00:00:00', 
       ExpirationDate = '2001-01-01 00:00:00' 
    where RECIPIENTNODEID = [RECIPIENTNODEID de la communauté];
  3. Utilisez le planificateur dans le configurateur pour exécuter manuellement le travail de "Renouvellement des clés". Cela garantira qu'il y a une nouvelle clé à utiliser pour le rechiffrement.
  4. Ensuite, exécutez manuellement le travail de "Rechiffrement des fichiers". Ce travail rechiffrera tous les fichiers et, ce faisant, les déplacera vers le nouveau stockage.
  5. Ce travail peut prendre beaucoup de temps pour traiter tous les fichiers. Pour suivre son progrès, vous pouvez utiliser cette requête :
    sql
    SELECT c.id AS certificateId, c.expirationDate AS certificateExpirationDate,
        COUNT(CASE WHEN fi.storageInstanceId = [SOURCE_STORAGE_INSTANCE_ID] THEN 1 ELSE NULL END) AS nbFilesSource,
        COUNT(CASE WHEN fi.storageInstanceId = [DESTINATION_STORAGE_INSTANCE_ID] THEN 1 ELSE NULL END) AS nbFilesDestination
    FROM Certificate c
        INNER JOIN RecipientNode rn ON c.recipientNodeId = rn.nodeId
        INNER JOIN FileVersion fv ON fv.recipientCertificateId = c.id
        INNER JOIN TransferContext tc ON tc.transferContextId = fv.transferContextId
        INNER JOIN FileInfo fi ON fi.fileInfoId = tc.fileInfoId
    WHERE rn.recipientCommId IS NOT NULL
        AND rn.recipientName = [Nom de la communauté]
    GROUP BY c.id, c.expirationDate;