6 votes

Quels sont les pièges des fichiers en dur sur mon PC de bureau ?

Tous les fichiers de contenu identique sur mon PC sont maintenant liés entre eux. (Mes données sont complètement dé-dupliquées. C'est une conséquence de la façon dont j'ai copié mes données depuis mon ancien ordinateur).

Quels sont les pièges dont je dois être conscient maintenant que certaines actions sur un fichier peuvent affecter silencieusement un certain nombre d'autres fichiers ?

Je sais que la suppression du fichier sur lequel je travaille n'est pas un problème (en supposant que je l'ai supprimé volontairement). Cela n'affecte aucun des autres fichiers liés et je ne vois pas comment l'action de suppression pourrait entraîner des effets secondaires inattendus.

Déplacer ou renommer le fichier n'est pas un problème. Je ne vois pas de conséquences inattendues.

Je ne pense pas que la copie de fichiers liés en dur soit un problème, mais je ne suis pas aussi confiant quant aux conséquences inattendues à cet égard. Ce que j'ai vu, c'est que faire une copie (sur le même disque) d'un fichier lié à l'aide de la commande cp maintient la copie liée à la source (i.e., le numéro d'inode ne change pas dans la copie). Copier vers un autre système de fichiers rompt évidemment le lien dur. (Je suppose qu'un piège est d'oublier ce fait, étant donné que mon PC a 3 disques durs).

La modification des permissions affecte tous les fichiers liés. Jusqu'à présent, cela s'est avéré pratique. (J'ai fait en sorte qu'un grand nombre de fichiers liés en dur soient en lecture seule).

Aucune des opérations ci-dessus ne semble produire de conséquences majeures inattendues.

Cependant, comme me l'a fait remarquer Daniel Beck dans un commentaire, l'édition ou la modification d'un fichier peut parfois poser problème. Cela dépend de l'outil et peut-être du type d'édition. (Par exemple, l'édition de petits fichiers texte à l'aide de sed semble toujours rompre le lien alors que l'utilisation de nano ne le fait pas). Cela introduit la possibilité que l'édition d'un fichier puisse affecter 何れも les fichiers liés (c'est-à-dire, modifier l'inode original).

La solution que je propose La seule solution est de rendre tous les fichiers liés en dur en lecture seule (et c'est déjà le cas pour la plupart). Si je ne peux pas le faire pour certains fichiers, je délierais ces fichiers particuliers. Y a-t-il un problème avec cette approche en lecture seule ?

Je suppose que si je vais éditer un fichier et que je constate qu'il est en lecture seule, je me souviendrai de délier ce nom de fichier tout en le rendant accessible en écriture. Un piège pourrait donc être d'oublier cette règle. Dans ce cas, je devrai me fier à mes sauvegardes.

Ai-je raison dans les déclarations ci-dessus ? Et que dois-je savoir d'autre ?

BTW, je suis sous Kubuntu 12.04. J'utilise également btrfs. (J'ai 2 SSD et 1 disque dur dans le PC. Je vais également ajouter un disque dur externe USB. Je suis également connecté à un réseau et je monte quelques partages NFS. Je ne suppose pas que ces derniers bits soient pertinents pour la question, mais je les ajoute juste au cas où).

Par ailleurs, comme j'ai plusieurs disques (avec des systèmes de fichiers distincts), pour dissocier un fichier, il me suffit de le copier sur un autre disque, puis de le déplacer à nouveau. Cependant, l'utilisation de sed fonctionne également (dans mes tests). Voici mon script :

sed -i 's/\(.\)/\1/' file1

Étonnamment, cela permet même de dissocier les fichiers de zéro octet. D'après mes tests, il semble également fonctionner sur les fichiers non textuels sans aucune option spéciale. (Mais je comprends que l'option --binary peut être nécessaire sous Windows, MS-DOS et Cygwin). Cependant, copier sur un autre disque et revenir en arrière peut être la meilleure façon de délier. Pour mon cas d'utilisation, unlink ne permet pas vraiment de "délier", mais plutôt de "supprimer".

2voto

Michael Tsang Points 346

Un écueil est l'écrasement des fichiers.

Certaines applications essaient de supprimer le fichier et d'en écrire un nouveau avec le nom d'origine. Dans ce cas, les noms de fichiers seront découplés. D'autres applications essaient d'ouvrir directement le fichier pour l'écrire. Dans ce cas, le contenu des autres noms est également modifié. Cependant, comme vous rendez tous les fichiers liés en double r/o, cela peut être facilement distingué.

2voto

Steven Green Points 702

Voici les pièges auxquels j'ai pensé jusqu'à présent :

1. Il est possible de modifier involontairement le contenu d'un ou plusieurs fichiers x lors de l'édition du fichier y.

Une solution de contournement pour cela, comme indiqué dans ma question initiale, est de rendre tous les fichiers liés en dur en lecture seule par défaut. Pour les fichiers qui sont souvent modifiés, je n'utiliserai tout simplement pas de liens durs, car ils ne sont probablement pas appropriés.

MISE À JOUR IMPORTANTE : Voici un véritable piège. Parfois, les éditeurs écrasent silencieusement un fichier même s'il est en lecture seule. Par exemple, j'avais un fichier vide avec des permissions de 400 et appartenant à root. J'ai ouvert le fichier dans nano, je l'ai édité et enregistré. nano ne s'est pas plaint qu'il était en lecture seule. Tous les noms de fichiers liés en dur avaient maintenant le mauvais contenu. Malheureusement, le fait de rendre les fichiers en lecture seule n'est pas la solution que j'attendais, et c'est en effet un piège sérieux.

2. Il est possible de créer involontairement une nouvelle copie d'un fichier. C'est essentiellement l'inverse du premier piège. Le fichier unique contenu peut avoir N noms de fichiers. L'édition de l'un de ces noms de fichiers peut maintenant conduire à deux éléments distincts de la base de données de l'entreprise. contenu avec N (nombre de noms de fichiers) qui ne change pas du tout. Je pourrais ne pas être conscient du fait que cela s'est produit (si je ne fais pas attention aux hardlinks).

Une illustration de cela dans mon cas est ma collection de photos désorganisée. J'ai actuellement la même photo stockée sous différents noms dans différents répertoires (par exemple, parce que je l'ai téléchargée de mon appareil photo plusieurs fois sans prendre le temps d'organiser mes photos). Grâce au hardlinking, je ne perds plus beaucoup d'espace à cause de cela. Je préférerais que la modification d'un de ces fichiers affecte toujours tous les noms de fichiers liés (à moins que je n'enregistre spécifiquement la photo modifiée sous un nouveau nom). Cependant, il est fort probable que ce ne soit pas le cas. Le piège est donc que l'édition d'une photo pourrait conduire à une plus grande désorganisation de ma collection de photos. Le même piège pourrait s'appliquer à la musique ou aux vidéos (ou aux images de machines virtuelles, etc.).

La même solution de contournement est la seule que j'ai trouvée : rendre les fichiers en lecture seule, de façon à ce que l'on me rappelle au moment de la modification que je dois faire attention aux liens durs. (Existe-t-il une meilleure solution, par exemple un moyen de relier rapidement tous les noms de fichiers) ?

Une autre conséquence (positive) de l'enregistrement de ma collection de photos est que je peux maintenant l'organiser beaucoup plus rapidement. Par exemple, avec cette commande, je peux trouver toutes les photos en double :

find 2>/dev/null /home/me/Pictures -type f -links +1 -printf "%n\t%i\t%d\t%s\t%t\t%p\n" | sort -gr > /home/me/Pictures/duplicatesList.txt

Grâce à cette liste, je peux supprimer en toute confiance les noms de fichiers que je ne veux pas conserver. Au bout du compte, il se peut que je n'aie plus de photos liées.

3. Je ne peux pas penser à un troisième piège. Si quelqu'un a plus de deux pièges, veuillez répondre et j'accepterai votre réponse (en supposant qu'elle soit meilleure que la mienne).

Dans l'ensemble, je ne pense pas que les liens en dur ajouteront beaucoup de complexité à mes tâches informatiques quotidiennes si je fais en sorte que tous les fichiers liés en dur soient en lecture seule. Je peux le faire facilement avec une commande similaire à celle-ci :

find . -type f -links +1 -perm /g+w,o+w -iname *.gif -exec chmod 444 '{}' \;

Je peux modifier le chemin ou l'extension du fichier si nécessaire. Je n'ai pas l'intention de toucher aux hardlinks utilisés par les installations par défaut de Linux. Je ne travaille avec les hardlinks que dans mes données personnelles. Je pourrais simplement changer tous mes fichiers hardlinkés en lecture seule avec une seule commande.

Au fil du temps, je vais me débarrasser des noms de fichiers inutiles et simplifier mes données (et ma vie). Si les fichiers sont vraiment en lecture seule et que les doublons sont justifiés, je laisserai les liens durs pour ces fichiers indéfiniment.

Cependant, dans certains cas, je dissocie les fichiers et laisse volontairement des fichiers indépendants en double. Ce dernier cas se produit très fréquemment dans les arbres de code source ; le même contenu de fichier est justifié à plus d'un endroit et il devrait être accessible en écriture. Lorsque je rencontre un fichier de code source qui est en lecture seule et que j'ai besoin de l'éditer, je vais le délier. En général, le simple fait d'éditer le fichier permet de le délier. Mais je peux en être sûr en utilisant cette commande, dont je sais qu'elle dissocie les fichiers :

sed -i 's/\(.\)/\1/' file1

Exemples :

Voici un exemple du piège n° 1 ci-dessus. Il s'agit d'un exemple réel de mon système de fichiers sur lequel je viens de tomber.

J'allais éditer de manière destructive "Copie de l'index.html" parce que j'ai vu le fichier "index.original.html" et je pensais que je pouvais éditer la copie en toute sécurité. Cependant, il s'avère que les fichiers sont liés entre eux, et qu'éditer la "copie" aurait également modifié l'original.

Voici l'information montrant que les fichiers ont été liés :

2   45214   6   6641    Thu Oct 30 10:46:00.0000000000 2008 /Site/FusionAppsVPS/index.original.html
2   45214   6   6641    Thu Oct 30 10:46:00.0000000000 2008 /Site/FusionAppsVPS/Copy of index.html

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