изменить дату символической ссылки на bindfs

У меня такое ощущение, что я не могу изменить дату символических ссылок на bindfs. См. Следующую стенограмму того, что я пробовал.

На EXT4:

nailor@needle:~$ mkdir /tmp/ex nailor@needle:~$ cd /tmp/ex nailor@needle:/tmp/ex$ touch realfile nailor@needle:/tmp/ex$ ln -s realfile linkfile nailor@needle:/tmp/ex$ stat realfile linkfile File: `realfile' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 22678377 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ nailor) Gid: ( 1000/ nailor) Access: 2013-09-09 00:46:15.356004837 +0200 Modify: 2013-09-09 00:46:15.356004837 +0200 Change: 2013-09-09 00:46:15.356004837 +0200 Birth: - File: `linkfile' -> `realfile' Size: 8 Blocks: 0 IO Block: 4096 symbolic link Device: 801h/2049d Inode: 22678380 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ nailor) Gid: ( 1000/ nailor) Access: 2013-09-09 00:46:34.299766676 +0200 Modify: 2013-09-09 00:46:27.227855586 +0200 Change: 2013-09-09 00:46:27.227855586 +0200 Birth: - nailor@needle:/tmp/ex$ touch -h realfile linkfile nailor@needle:/tmp/ex$ stat realfile linkfile File: `realfile' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 22678377 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ nailor) Gid: ( 1000/ nailor) Access: 2013-09-09 00:46:46.931607877 +0200 Modify: 2013-09-09 00:46:46.931607877 +0200 Change: 2013-09-09 00:46:46.931607877 +0200 Birth: - File: `linkfile' -> `realfile' Size: 8 Blocks: 0 IO Block: 4096 symbolic link Device: 801h/2049d Inode: 22678380 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ nailor) Gid: ( 1000/ nailor) Access: 2013-09-09 00:46:49.899570563 +0200 Modify: 2013-09-09 00:46:46.931607877 +0200 Change: 2013-09-09 00:46:46.931607877 +0200 Birth: - 

На bindfs:

 nailor@needle:/tmp/ex$ mkdir sub nailor@needle:/tmp/ex$ bindfs -n . sub nailor@needle:/tmp/ex$ cd sub nailor@needle:/tmp/ex/sub$ touch -h realfile linkfile nailor@needle:/tmp/ex/sub$ stat realfile linkfile File: `realfile' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 17h/23d Inode: 2 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ nailor) Gid: ( 1000/ nailor) Access: 2013-09-09 00:47:34.000000000 +0200 Modify: 2013-09-09 00:47:34.000000000 +0200 Change: 2013-09-09 00:47:34.755006803 +0200 Birth: - File: `linkfile' -> `realfile' Size: 8 Blocks: 0 IO Block: 4096 symbolic link Device: 17h/23d Inode: 3 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ nailor) Gid: ( 1000/ nailor) Access: 2013-09-09 00:46:49.899570563 +0200 Modify: 2013-09-09 00:46:46.931607877 +0200 Change: 2013-09-09 00:46:46.931607877 +0200 Birth: - 

Как вы можете видеть, времена для символической ссылки не изменялись в bindfs. Это проблема, например, rsync, потому что я получаю:

 rsync: failed to set times on "link1": No such file or directory (2) rsync: failed to set times on "link2": No such file or directory (2) ... 

Я обнаружил, что это известная проблема с sshfs ( http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=640038 ), но не нашел ничего упоминания о bindfs. Теперь мне интересно, есть ли такие упоминания и / или объяснения недостающих функциональных возможностей и / или ответа, если это влияет на плавкий предохранитель в целом …

2 Solutions collect form web for “изменить дату символической ссылки на bindfs”

Файловые системы, в которых вы не можете изменить дату символической ссылки, являются общими. Это само по себе не является ошибкой bindfs или sshfs.

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

В Linux rsync вызывает utimensat с флагом AT_SYMLINK_NOFOLLOW чтобы изменить время символьной ссылки. Насколько я могу судить, проблема в том, что API FUSE не имеет соответствующего флага для utimens (или utime ), поэтому реализация файловой системы видит только запрос на изменение времени и отсутствие указания на то, следует ли следовать символической ссылке или нет. Отсутствие каких-либо конкретных указаний, как bindfs, так и sshfs действуют обратно совместимым способом: они изменяют цель символической ссылки. Для сломанной символической ссылки это приводит к ошибке ENOENT.

На первый взгляд, я думал, что это ошибка в FUSE: поскольку FUSE не может передать флаг AT_SYMLINK_NOFOLLOW , он должен вернуть ошибку (EINVAL или ENOTSUP). Тем не менее, из беглого чтения кода Linux VFS , похоже, что код, специфичный для файловой системы, вызывается либо на символической ссылке, либо на ее цели, и поэтому не должен следовать какой-либо символической ссылке. Это имеет смысл: цель символической ссылки может быть в другой файловой системе.

Поэтому я думаю, что это ошибка в bindfs и sshfs (и, вероятно, во многих других файловых системах FUSE): если указано изменить метаданные символической ссылки, они должны влиять только на эту символическую ссылку или возвращать ошибку, если запрошенное изменение не является возможное.

Эта ошибка теперь исправлена в bindfs версии 1.12.3.

Ответ Гилла объясняет ошибку великолепно.

  • Поведение Asterisk при создании ссылок
  • undefined symbol: _ZN5boost15program_options11to_internalERKSs
  • Символьная ссылка не является рекурсивной
  • Программа не работает при вызове через символическую ссылку
  • Symlink в тот же каталог
  • Bash, когда мой домашний каталог является символической ссылкой
  • Создание символической ссылки с двоеточием в имени на cygwin bash
  • файл hardlink / softlink в один файл
  • символическая ссылка на каталог и относительный путь
  • Найти использование дисковых папок с символическими ссылками
  • Как символическая ссылка представлена ​​в файловой системе по жесткой ссылке?
  • Linux и Unix - лучшая ОС в мире.