4 votes

Comment copier un fichier spécial (steam.pipe) sous Ubuntu ?

J'avais utilisé Ubuntu pendant un certain temps, et j'avais rencontré ce problème :

Je suis en train d'utiliser Ubuntu 14,10 en ce moment et j'ai Steam installé dans mon dossier /home/user/.steam. Lorsque je copiais le dossier .steam dans mon répertoire personnel et que la barre de progression était près de la fin, un message s'affichait indiquant "Impossible de copier un fichier spécial steam.pipe", plus ou moins comme ça.

J'avais rencontré ce problème depuis l'utilisation d'Ubuntu 14.04, mais je sais que ce n'est pas un problème de distribution / version mais plutôt un problème de copie de fichiers. Heureusement, je peux gérer ce problème en utilisant la commande dans mon dossier .steam :

sudo cp -f ./steam.pipe /[destination]

En fin de compte, juste ce jour-là, je ne pouvais pas copier ce fichier en utilisant la commande ci-dessus. Le terminal restait bloqué à :

Idad@IdadComp:/home/Idad/.steam$sudo cp -f ./steam.pipe /[destination]

et ne revenait pas à

Idad@IdadComp:/home/Idad/.steam$

indiquant que le processus de copie n'était pas terminé.

Ma question est, comment puis-je copier ce fichier steam.pipe ?

J'ai essayé :

  1. Exécuter nautilus en mode superutilisateur, mais cela a échoué.
  2. Essayer de compresser et décompresser ce fichier dans le dossier de destination, mais une erreur est survenue lors de la décompression du fichier steam.pipe.
  3. Et aussi lu ce lien Comment copier ou sauvegarder rapidement et facilement un "fichier spécial" ?, mais je n'ai obtenu aucun résultat.

Merci d'avance pour votre aide. :)

6voto

Eliah Kagan Points 111731

Comme muru le dit, vous ne devriez pas avoir à sauvegarder steam.pipe. Steam devrait pouvoir le recréer s'il est manquant. Cependant, lors de la sauvegarde de votre dossier ~/.steam, vous devriez vérifier si vous avez également un dossier ~/.local/share/Steam. Si c'est le cas, vous voudrez probablement le sauvegarder aussi. Il contient généralement la plupart des fichiers associés à une installation Steam, y compris vos jeux Steam installés.

J'ai écrit le reste de cette réponse au cas où :

  • Vous voulez savoir pourquoi vous avez eu du mal à le copier avec Nautilus et cp.
  • Vous voulez savoir comment copier des fichiers comme steam.pipe, au cas où vous auriez besoin de le faire un jour.

Le résumé exécutif est que vous devriez utiliser rsync pour vos sauvegardes. Voir ci-dessous pour les détails, explications et alternatives.


Pourquoi steam.pipe est spécial

steam.pipe est un FIFO, aussi appelé tube nommé :

ek@Io:~/.steam$ ls -l steam.pipe
prw------- 1 ek ek 0 Mar  7 20:12 steam.pipe
ek@Io:~/.steam$ file steam.pipe
steam.pipe: fifo (named pipe)

Les FIFO ne sont pas des fichiers réguliers, mais plutôt des entrées spéciales dans le système de fichiers avec lesquelles on peut interagir comme s'il s'agissait de fichiers. Écrire dans le FIFO stocke les données en mémoire, où elles restent jusqu'à ce que le FIFO soit lu. Lire depuis un FIFO obtient les données dans l'ordre où elles ont été écrites (donc c'est du Premier Entré, Premier Sorti).

Pourquoi vous avez eu des problèmes à le copier

Il existe en fait deux comportements distincts que l'on peut souhaiter lorsque l'on essaie de copier un FIFO. Celui que vous souhaitez dépend de la situation.

  • Vous pourriez vouloir dupliquer le FIFO, c'est-à-dire en créer un autre. (Dans ce contexte, c'est ce que vous voulez.)
  • Vous pourriez vouloir lire des données depuis le FIFO, c'est-à-dire copier son contenu. (Cela peut ne pas sembler comme "copier", mais rappelez-vous, c'est analogue à ce qui se passe lorsque vous copiez un fichier - le fichier est ouvert, ses données sont lues, et les mêmes données sont écrites dans un nouveau fichier.)

Vous avez essayé deux programmes :

  • Nautilus détecte automatiquement les entrées spéciales comme les FIFO, refuse de copier à partir d'eux, et vous avertit qu'il l'a fait.
  • cp lit les données du FIFO, au lieu de créer une copie du FIFO lui-même. S'il n'y a pas de données dans le FIFO, cp stagne jusqu'à ce qu'un processus y écrive.

Faire des copies de fichiers spéciaux (comme les FIFO)

Pour dupliquer un FIFO, vous pouvez utiliser rsync avec le flag --specials :

ek@Io:~$ cd steam-backup
ek@Io:~/steam-backup$ rsync --specials ~/.steam/steam.pipe .
ek@Io:~/steam-backup$ ls -l steam.pipe
prw------- 1 ek ek 0 Apr 22 11:43 steam.pipe

C'est si vous voulez le copier séparément. Pour copier un dossier entier à des fins d'archivage - c'est-à-dire, où vous voulez que la plupart des choses soient comme avant, pour que cela fonctionne correctement lors de la restauration - vous pouvez utiliser rsync -a:

rsync -a .steam/ steam-backup

Pour plus d'informations sur rsync, consultez "rsync" dans le wiki d'aide d'Ubuntu, le site web rsync upstream, et man rsync (qui explique spécifiquement ce que fait le flag -a).

cp est bien adapté pour les cas d'utilisation simples, mais je suggère rsync pour faire des sauvegardes.

Les spéciaux peuvent également être archivés

Une autre façon de sauvegarder un dossier est de faire une archive avec tar, et cela préservera également automatiquement les FIFOs (c'est-à-dire, ils seront recréés lors de l'extraction) :

ek@Io:~$ tar cvJf steam-backup.tar .steam
.steam/
.steam/registry.vdf
.steam/sdk32
.steam/bin64
.steam/root
.steam/steam_install_agreement.txt
.steam/steam
.steam/steam.pipe
.steam/steam.pid
.steam/bin
.steam/sdk64
.steam/bin32

Recréer le FIFO manuellement

Si un FIFO manque (dans une sauvegarde, ou en général) et que vous devez le restaurer, vous pouvez simplement en créer un nouveau avec mkfifo.

Vous voudrez le créer avec les bonnes permissions. En exécutant ls -l sur steam.pipe, vous verrez un masque de permissions de prw-------. p signifie simplement qu'il s'agit d'un pipe nommé (FIFO). Le reste signifie qu'il est lisible et inscriptible par son propriétaire et n'a pas d'autres permissions (voir FilePermissions pour plus de détails). Le masque de permissions octal est donc de 600 (ou 0600), vous voudrez donc passer -m 600 à mkfifo:

ek@Io:~/steam-backup$ mkfifo -m 600 steam.pipe
ek@Io:~/steam-backup$ ls -l steam.pipe
prw------- 1 ek ek 0 Apr 22 12:09 steam.pipe

La duplication d'un FIFO ne duplique pas son "contenu"

Ce n'est pas un problème pour les sauvegardes, mais vous devriez savoir que la duplication d'un FIFO (par exemple, avec rsync) crée simplement un nouveau FIFO similaire. S'il y a des données dans le FIFO prêtes à être lues, ces données ne seront pas disponibles dans le nouveau FIFO.

La raison pour laquelle ce n'est pas un problème pour les sauvegardes est que les FIFO ne sont pas destinés au stockage à long terme. Ils ne sont pas vraiment destinés au stockage du tout. Les données dans un FIFO ne sont pas écrites sur le disque, et lorsqu'un processus écrit dans un FIFO, l'écriture n'est même pas rapportée comme réussie au processus tant que les données n'ont pas été lues. (De même, si un processus lit depuis un FIFO sans données, la lecture stagnera jusqu'à ce que des données soient écrites.)

Vous pouvez le voir en action, et aussi avoir une meilleure idée de comment les FIFO fonctionnent, en créant votre propre FIFO et en expérimentant avec. Vous pouvez créer un nouveau FIFO foo avec les permissions par défaut avec mkfifo foo, et rediriger du texte vers celui-ci avec une commande comme echo 'Bonjour, monde!' > foo. Cela stagnera, car rien n'a encore lu le texte. Ensuite, dans un autre terminal (par exemple, un autre onglet Terminal), lisez le texte avec cat foo et voyez ce qui se passe dans chaque terminal.

2voto

muru Points 180007

Vous ne devriez pas le copier. Les fichiers steam.pid et steam.pipe sont créés par Steam selon les besoins. Ces deux fichiers doivent être exclus des sauvegardes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X