web-dev-qa-db-fra.com

Utilisation de mv et cp sur un serveur sans interface utilisateur (interférer avec le délai d'attente SSH?)

J'ai récemment mis en place un serveur sans interface graphique pour la sauvegarde de très gros fichiers de film et de montage.

J'utilise SSH sur le serveur et, conformément aux guides de bonnes pratiques que j'ai trouvés, j'ai renforcé la sécurité afin que le serveur me déconnecte automatiquement après 5 minutes d'inactivité.

Cela crée maintenant un peu de casse-tête alors que j'essaie de trier et de déplacer ces fichiers.

La publication de mv file1 /new_directory/ peut prendre +5 minutes et je suis souvent déconnecté à mi-parcours.

Lorsque plusieurs fichiers sont en jeu, je suis revenu pour constater que certains fichiers semblaient avoir été transférés et d'autres (à un seuil apparemment arbitraire ... ou à peu près ce que je pense qu'un délai de 5 minutes aurait pu permettre) ne l'ont pas été.

Donc mes questions sont:

  1. Lors de l'émission d'une commande mv, si celle-ci est annulée alors qu'elle est incomplète, existe-t-il un risque de perte de données? Pourrais-je être plus en sécurité avec cp?
  2. Existe-t-il un moyen de définir une commande cp ou mv, puis de s’assurer qu’elle continuera même après ma déconnexion ou la fermeture de ma fenêtre ssh
  3. Y a-t-il un moyen de faire autre chose pendant qu'une mv ou cp est en cours (et ainsi rafraîchir mon compte à rebours)
5
Huw

Ne vous connectez pas en tant que tel. À la place, à partir de votre ordinateur local, exécutez

ssh user@server mv /path/to/source /path/to/dest

Cela devrait vous permettre de contourner le problème.

De manière plus générale, je pense que vous êtes un peu paranoïaque ici. Régler le temps d'inactivité à 5 minutes, puis faire face à ce genre de problème semble ridicule. Réglez-le simplement plus longtemps et évitez le problème.

En ce qui concerne votre première question, mv ne supprimera les fichiers source que si la copie a réussi. Comme expliqué dans info mv (c'est moi qui souligne):

Il utilise d’abord le code utilisé par `cp -a 'pour copier les répertoires et les fichiers demandés, puis (en supposant que la copie réussit) il supprime les originaux. Si la copie échoue, la partie copiée sur la partition de destination est supprimée. Si vous deviez copier trois répertoires d’une partition à l’autre et que la copie du premier répertoire aboutissait, mais que le second ne l’aboutissait pas, le premier resterait sur la partition de destination et les deuxième et troisième sur la partition d’origine.

5
terdon

Il est fortement recommandé de n'effectuer que des tâches d'administration longues avec tmux ou screen (ou Xvnc si vous en avez besoin graphiquement). Cela vous protège des déconnexions réseau et permet de vous reconnecter. Vous pouvez également utiliser mosh, qui est robuste contre les pannes de réseau.

Si vous ne vous souciez plus tant de continuer la session après la fin de votre commande, vous pouvez aussi l'exécuter détaché avec Nohup mv ... (se terminant facultativement avec & à l'arrière-plan immédiatement). Vous devez ensuite surveiller son exécution avec ps. Certains shells peuvent détacher un programme en cours d'exécution (disown ou ne pas les tuer comme setipt NO_HUP de zsh] ou utiliser un démarreur d'arrière-plan tel que at ou cron.

3
eckes