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
  1. 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
  1. 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é];
  1. 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.
  2. 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.
  3. 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;

Migration des fichiers pour les boîtes de réception

Cette procédure vise à adresser les fichiers qui ne sont pas couverts par la migration des fichiers communauté par communauté. Chaque utilisateur peut avoir une boîte de réception dans laquel se trouve des fichiers. Ceux peuvent avoir été téléversés directement par l'utilisateur ou par un autre utilisateur d'une communauté partagée par les deux utilisateurs. Pour adresser cette situation, il faut récupérer les "RECIPIENTNODEID" d'une façon différente à partir de la table "Users":

sql
select u.NAME as 'Nom usager',
    u.RECIPIENTNODEID, 
    count(fi.fileinfoid) as 'Nombre de fichiers', 
    sum(fi.DOCUMENTSIZE) as 'Taille totale des fichiers'
from Users u
inner join Certificate cert on cert.RecipientNodeId = u.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 u.NAME, u.RECIPIENTNODEID
order by u.name;

Le reste de la procédure est similaire à la migration des fichiers communauté par communauté. Il faut utiliser le "RECIPIENTNODEID" trouvé dans la requête précédente dans la requête de mise-à-jour des certificats.

Migration des fichiers pour les utilisateurs anonymes

Cette procédure vise à adresser les fichiers couverts par les envois rapides. Pour ce cas d'utilisation, le "RECIPIENTNODEID" est récupéré à partir de la table "AnonymousUser". La requête SQL permettant de récupérer les "RECIPIENTNODEID" est similaire aux deux autres :

sql
select u.NAME as 'Nom usager',
    u.RECIPIENTNODEID, 
    count(fi.fileinfoid) as 'Nombre de fichiers', 
    sum(fi.DOCUMENTSIZE) as 'Taille totale des fichiers'
from AnonymousUser u
inner join Certificate cert on cert.RecipientNodeId = u.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 u.NAME, u.RECIPIENTNODEID
order by u.name;

Le reste de la procédure est similaire à la migration des fichiers communauté par communauté. Il faut utiliser le "RECIPIENTNODEID" trouvé dans la requête précédente dans la requête de mise-à-jour des certificats.