Dropbox синхронизирует жесткие ссылки?

У меня есть папка с большими файлами. Я хочу, чтобы эта папка находилась в двух разных местах одновременно - мои домашние документы и моя папка документов колледжа.

Я сделал это с помощью символической ссылки из папки College в папку Home.

К сожалению, Dropbox синхронизирует мою папку College - и мое файловое пространство было быстро использовано.

Идет ли Dropbox по жестким ссылкам, и если да, то как их создать?

2 ответа

Решение

Нет, это не так.

Когда вы обновляете файл, Dropbox разрывает все ссылки. Таким образом, в примере, который @Falk дает выше, если он отредактировал этот файл с удаленного компьютера, при его обратной синхронизации ссылка была бы разорвана, и Dropbox содержал бы новый файл с именем testfile (Falks conflicted copy),

Единственная работающая ссылка - это мягкая ссылка, в которой исходный файл находится в папке dropbox. Вот скрипт, который я использовал для тестирования:

# 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

Оказывается, этот ответ был ошибочным, см. Пост Эндрю для правильного ответа.

Да, я делаю.

Я протестировал его со стандартной бесплатной учетной записью dropbox с папкой dropbox на томе btrfs.

Тест был:

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

Первый номер из ls -li Команда показывает номер индекса, число между разрешениями и именем пользователя - это счетчик ссылок (показывает, сколько жестких ссылок имеет файл).

Сразу же после запуска команды ln значок "dropbox try" показал активность и эффективно загрузил тестовый файл.

Я также проверил, чтобы сделать вторую жесткую ссылку в папке Dropbox, и он также загрузил файл, я не уверен, если он знает, что это только один.

Мой тестовый файл - это небольшой 18 КБ файл.ods, но он также должен работать с большими файлами.

О жестких ссылках и инодах:

Когда вы создаете жесткую ссылку на файл, вы даете ему просто второе имя в другой папке (или то же самое, если хотите).

Это файлы, которые на самом деле не помещаются в папки, они находятся на жестком диске, идентифицированном i-узлом (зависит от типа файловой системы).

Так что же такое папки?

Папки - это просто списки, также идентифицируемые i-узлом, которые содержат имена файлов и других папок, которые "внутри" них. Каждый элемент в этом списке указывает на соответствующий ему i-узел.

Таким образом, если вы создаете жесткие ссылки, оба / все указывают на один и тот же i-узел и, следовательно, все они являются просто файлами (одним и тем же).

Имейте в виду, что некоторые приложения отказываются выполнять свою работу с файлами, имеющими жесткие ссылки. Другие приложения могут случайно или намеренно разорвать жесткие ссылки, превратив один файл с двумя именами в два файла с одним именем.

Википедия дает нам больше информации:

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

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

Для создания жестких ссылок вы можете использовать ln который является инструментом командной строки, вы можете использовать его так:

ln TARGET LINK_NAME

Где target - существующий файл, а link_name - новое имя файла. Когда вы закончите, вы можете проверить с ls -li номер i-узла файла и увидите, что обе ссылки имеют одинаковый номер.

Вот страница руководства: http://linux.die.net/man/1/ln

Другие вопросы по тегам