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