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.