web-dev-qa-db-fra.com

Dropbox synchronise-t-il les liens physiques?

J'ai un dossier de gros fichiers. Je souhaite que ce dossier se trouve à deux endroits différents à la fois: mes documents personnels et mon dossier de documents du Collège.

J'ai fait cela avec un lien symbolique dans le dossier Collège vers le dossier Accueil.

Malheureusement, Dropbox synchronise mon dossier College - et mon espace fichier a été rapidement utilisé.

Dropbox suit-il les liens en dur, et si oui, comment en créer un?

4
Tim

Non, ça ne va pas.

Lorsque vous mettez à jour un fichier, Dropbox rompt tous les liens. Ainsi, dans l'exemple que donne @Falk ci-dessus, s'il modifiait ce fichier à partir d'un ordinateur distant, le lien serait brisé lors de la synchronisation précédente et Dropbox contiendrait un nouveau fichier appelé testfile (Falks conflicted copy).

Le seul lien qui fonctionne est un lien symbolique dans lequel le fichier d'origine est celui du dossier de la boîte de dépôt. Voici le script que j'ai utilisé pour tester:

# symlink with target inside dropbox
echo "symbolic link test" > ~/Dropbox/symlinkToDropbox.txt
ln -s  ~/Dropbox/symlinkToDropbox.txt ~/symlinkToDropbox.txt
cat ~/symlinkToDropbox.txt
echo "edit target of symlink" >> ~/Dropbox/symlinkToDropbox.txt
echo "edit symlink" >> ~/symlinkToDropbox.txt 
cat ~/symlinkToDropbox.txt 
cat ~/Dropbox/symlinkToDropbox.txt 
# symlink with target outside dropbox 
echo "symbolic link test" > ~/symlinkFromDropbox.txt
ln -s ~/symlinkFromDropbox.txt ~/Dropbox/symlinkFromDropbox.txt  # relative symlinks don't work
cat ~/Dropbox/symlinkFromDropbox.txt 
echo "edit target of symlink" >> ~/symlinkFromDropbox.txt
echo "edit symlink" >> ~/Dropbox/symlinkFromDropbox.txt
cat ~/symlinkFromDropbox.txt 
cat ~/Dropbox/symlinkFromDropbox.txt 
# hard link with target inside dropbox
echo "hard link test" > ~/Dropbox/hardlinkToDropbox.txt
ln ~/Dropbox/hardlinkToDropbox.txt ~/hardlinkToDropbox.txt
echo "edit target" >> ~/Dropbox/hardlinkToDropbox.txt 
echo "edit linked file" >> ~/hardlinkToDropbox.txt 
cat ~/hardlinkToDropbox.txt 
cat ~/Dropbox/hardlinkToDropbox.txt 
# hard link with target inside dropbox
echo "hard link test" > ~/hardlinkFromDropbox.txt
ln ~/hardlinkFromDropbox.txt  ~/Dropbox/hardlinkFromDropbox.txt
echo "edit linked file" >> ~/Dropbox/hardlinkFromDropbox.txt 
echo "edit target" >> ~/hardlinkFromDropbox.txt 
cat ~/Dropbox/hardlinkFromDropbox.txt 
cat ~/hardlinkFromDropbox.txt 
#all of that works fine.  
#But now open all of those files from your dropbox folder on another computer and edit them
#Your dropbox will sync, your local versions of all those files will be updated, but NONE OF THE LINKED FILES WILL UPDATE
#The hard links are replaced and the old versions copied as "conflicted copies"
#The symlink where the dropbox file was the link is unlinked

#the symlink where the dropbox file is the original is the only one that works
3
andrew lorien

Il s'est avéré que cette réponse était erronée. Voir l'article d'Andrew pour la bonne réponse.

Oui je le fais.

Je l'ai testé avec un compte Dropbox gratuit standard avec le dossier Dropbox dans un volume btrfs.

Le test était:

ln /media/username/volume/Documents/testfile /media/username/volume/Dropbox/testfile
ls -li /media/username/volume/Documents/testfile
ls -li /media/username/volume/Dropbox/testfile

Le premier numéro de la commande ls -li indique le numéro d'inode, le nombre entre les autorisations et le nom d'utilisateur est le compteur de liens (indique le nombre de liens physiques du fichier).

Immédiatement après avoir exécuté la commande ln, l’icône d’essai de Dropbox indiquait l’activité et téléchargeait effectivement le fichier de test.

J'ai également testé la possibilité de créer un deuxième lien physique à l'intérieur du dossier Dropbox. Le fichier a également été téléchargé. Je ne sais pas si c'est le cas.

Mon fichier de test est un petit fichier .ods de 18 Ko, mais il devrait également fonctionner avec des fichiers plus volumineux.

À propos des liens physiques et des inodes:

Lorsque vous créez un lien physique d'un fichier, vous lui attribuez simplement un deuxième nom dans un dossier différent (ou identique si vous le souhaitez).

Ce sont des fichiers qui ne sont pas vraiment placés dans des dossiers mais sur le disque dur identifié par un i-node (dépend du type de système de fichiers).

Alors, quels sont les dossiers?

Les dossiers ne sont que des listes également identifiées par un i-node qui contient les noms des fichiers et des autres dossiers qui se trouvent "à l'intérieur" d'eux. Chaque élément de cette liste pointe vers son i-node correspondant.

Donc, si vous créez des liens physiques, tous les deux/tous pointent vers le même i-node et par conséquent, ils ne sont que des fichiers (le même).

Sachez que certaines applications refusent de faire leur travail avec des fichiers contenant des liens fixes. D'autres applications peuvent rompre accidentellement ou intentionnellement des liens physiques en transformant un fichier portant deux noms, par exemple, en deux fichiers portant chacun un nom.

Wikipedia nous donne plus d'informations:

https://en.wikipedia.org/wiki/Hard_link

https://en.wikipedia.org/wiki/Inode

Pour créer des liens physiques, vous pouvez utiliser ln, un outil de ligne de commande. Vous pouvez l'utiliser comme ceci:

ln TARGET LINK_NAME

Où cible est le fichier existant et nom_lien le nouveau nom du fichier. Lorsque vous avez terminé, vous pouvez vérifier avec ls -li le numéro de i-node du fichier et vérifier que les deux liens portent le même numéro.

Voici la page de manuel: http://linux.die.net/man/1/ln

2
Falk