Ссылки на файлы, относительно устройства хранения. [Решено]

Здравствуйте!
Проблема не столько связана с Gentoo, сколько с Линуксом вообще.
Есть файл-сервер (NAS QNAP TS-101 с Линуксом на борту) подключенный по сети к компьютеру. Работает по протоколу NFS v3.
На сервере есть отдельная папка для обмена (BitTorrent). В ней полный хаос.
Хочется сделать библиотеку с вменяемыми названиями и т.д. вне этой папке, но на том же сервере.

Если создавать символические ссылки, то в них прописывается абсолютный путь к файлу, что накладывает ограничения на то, как монтировать файл-сервер к компьютеру.
Если использовать жесткие ссылки, то это воспринимается, как новый файл, занимающий место (по результатам df). Это недопустимо.

В идеале, хотелось бы создать ссылки, относительно точки монтирования, в то же время, не зависимой от нее.
Иначе, ссылки вида "../../../имя файла".

Подскажите пожалуйста, можно ли сделать что-то подобное?

Жесткие ссылки не занимают

Жесткие ссылки не занимают место. Это как бы несколько имен для одного блока данных. Файл не удалиться пока у него не удалено хотя бы одно имя.
Они бы вам вполне подошли.

Симлинки скорее всего будут указывать не туда куда надо при монтировании по нфс.

Опишите подробнее структуру папок в торентах.
можно смнтировать более высокий уровень иерархии и можно использовать mount -o bind или unionfs

..................................................................
Unix - дружественная система, но своих друзей она хорошо выбирает.

(Про жесткие ссылки.) Меня не

(Про жесткие ссылки.) Меня не устраивает неверное отображение свободного места. А так же, не получится ли так, что при достижении предельного значения занимаемого места (из-за жестких ссылок), новые файлы откажутся записываться?

Структура монтируемого диска: Папки, файлы и, в том числе, расшаренная папка Торрентов. В ней - хаос. Нет никакой структурной упорядоченности.
Хочу создать структуру библиотеки вне расшаренной папки (на уровень выше, то есть, в корне монтируемого диска). Точную структуру пока не придумал, но, при неоходимости, количество вложенных папок может быть уравнено (для ссылок, вида ../../).

(Про mount -o bind) К сожалению, не подойдет, так как должно быть применено к папке (если я ошибаюсь, буду очень рад, если поправите). Но. Во-первых, не все файлы внутри расшаренной папки находятся в поддиректориях. Есть те, что паходятся непосредственно в расшаренной папке. Во-вторых, в библиотеке требуется изменение названий самих файлов.

(Про unionfs) Пока не понял, что это такое. Разбираться буду завтра вечером. Но большое спасибо за предложение!

Цитата: (Про жесткие ссылки.)

Цитата:
(Про жесткие ссылки.) Меня не устраивает неверное отображение свободного места. А так же, не получится ли так, что при достижении предельного значения занимаемого места (из-за жестких ссылок), новые файлы откажутся записываться?

Нет конечно ). Ссылки не занимают свободное место на диске для хранения данных, но занимают одну запись inode, равно как и любой файл.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Хм. Хорошо. Допустим. Скажите

Хм. Хорошо. Допустим.
Скажите пожалуйста, а есть ли способ узать истинное значение свободного места?

df у меня не показывает

df у меня не показывает уменьшение свободного места при создании хардлинков

ссылки (мягкие или жесткие)

ссылки (мягкие или жесткие) через NFS не передадутся (вернее останутся ссылками, но относительно новой системы)

вам нужно использовать монтирование на стороне файл-сервера через bind

что-то добрый я сегодня ....

Я ошибаюсь, или всё таки не

Я ошибаюсь, или всё таки не я?
Жёсткие ссылки являются синонимами файлов. По сути это ещё одно имя, привязанное к inode. И утверждение, что жесткие ссылки не передадутся через NFS неверно. В отличие от мягких, конечно.

mkdir /tmp/test
cd /tmp/test
echo "original" >> original
ln ./original ./original.hardlink

cp ./original ./original-copy
cp ./origiginal.hardlink ./hardlink.copy
echo "a" > ./original-copy
echo "b" > ./hardlink-copy

после выполнения этой последовательности команд в системе будет один файл с двумя именами (./original ./original.hardlink), содержащий текст "original", и еще два других с "a" и "b" соответственно.
Этим "тестом" я обращаю внимание на то, что жесткие ссылки ведут себя при копировании как обычные файлы.

То есть высказывание о том, что жесткие ссылки как-то там не передадутся, а останутся ссылками ошибочно.

Может быть я неправильно понял и имелось ввиду, что жесткие ссылки нельзя создать на другой файловой системе (nfs)? Тогда да, правда Ваша.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

А в чем проблема?

alex000090 написал(а):
Здравствуйте!

В идеале, хотелось бы создать ссылки, относительно точки монтирования, в то же время, не зависимой от нее.
Иначе, ссылки вида "../../../имя файла".

Подскажите пожалуйста, можно ли сделать что-то подобное?

Такое вполне возможно и даже работает.
Единственный минус. Помочь в создании таких ссылок некому. Командеры и файл-менеджеры обычно строят абсолютные ссылки. Далее их надо править или руками или специально обученным скриптом.
С проверкой всё проще. Можно смонтировать "не туда", а далее скриптом (он достаточно простой и где-то попадался в книгах или инете) произвести поиск брошенных ссылок.

чушь Kevol написал(а): Такое

чушь

Kevol написал(а):

Такое вполне возможно и даже работает.

ключевое слово - nfs

что-то добрый я сегодня ....

Какой вы безопеляционый!

А самому попробовать? Может чушью окажется Ваше мнение?

Всё завист от того куда ведут ссылки.

для примера.

/mnt/drive
монтируем туда наше устройство.

на устройстве имеем
catalog/packet_a -> ../thema1/my-packet
thema1/my_packet
thema1/my_packet/file1.txt

cat /mnt/drive/catalog/packet_a/file1.txt

работает?

теперь монтируем в /home/DRIVE
cat /home/DRIVE/catalog/packet_a/file1.txt

Неужели не работает?

И какая разница - nfs оно или нет?

ЗЫ. А ключевым словом было не nfs, а жесткие ссылки. Следовательно каталог размещен на том же разделе.

А один из быстрых вариантов

А один из быстрых вариантов реализации этой идейки, вижу таким:

  1. работа ведется на одном разделе и только.
  2. Создается временная директория ( TMP_DIR )в которую жестко линкуются все нужные файлы из исходной папки ( SRC_DIR )
  3. Создается новая директория с понятной структурой ( NEW_DIR )
  4. Ручками, или по критериям файлы из TMP_DIR переносятся в NEW_DIR
  5. Требуется пробежаться по всем файлам NEW_DIR, и по их имени:
    • Удалить файл из SRC_DIR
    • Создать мягкую ссылку NEW_DIR/file ==> /SRC_DIR/file. разумеется относительную, а не с абсолютными путями.

В результате получится:

  • Отсортированная папка NEW_DIR
  • Папка SRC_DIR с кучей симлинков.

Благодаря тому, что в SRC_DIR будут только симлинки, всегда можно будет: отличить свежескаченные файлы от уже присутствующих и "обработать" их по той же схеме - переброс в NEW_DIR, создание ссылки в SRC_DIR

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Именно это (в моем понимании)

Именно это (в моем понимании) и вопрошал топикастер.
И не понятно - что его смущало, и что вызвало волну отрицания у отвечавших.

PS. Жесткие ссылки возможны только если иноды из одного раздела. Поэтому все относительные ссылки останутся валидными при любом монтировании раздела.
Этот прием помню издревле. Еще в ранних версиях Линукс.

PPS. Такой прием с организацей данных - именно то что мне не хватало Виндовс. Когда данные имеют множественное представление, каждое из которых удобно в условиях решения конкретной задачи. И в тот же самый момент легко определить их истинный источник.

Наличие же жестких ссылок часто играло злую шутку. Помню, как пару дней потратил выискивая проблему при настройке RedHat-7, из-за того, что им понравилось размещать конфигурацинные файлы в etc c использованием жестких ссылок.

Kevol написал(а): Помню, как

Kevol написал(а):
Помню, как пару дней потратил выискивая проблему при настройке RedHat-7, из-за того, что им понравилось размещать конфигурацинные файлы в etc c использованием жестких ссылок.

эт вы о чем? )))) поподробнее пожалуйста!

самое доступное описание символических и жестких ссылок есть в книге Робачевского "Операционная система Unix". Всем, у кого есть хоть какие-то сомнения в своих познаниях советую прочитать (всего 2 страницы) ;)

Theli написал(а): Kevol

Theli написал(а):
Kevol написал(а):
Помню, как пару дней потратил выискивая проблему при настройке RedHat-7, из-за того, что им понравилось размещать конфигурацинные файлы в etc c использованием жестких ссылок.

эт вы о чем? )))) поподробнее пожалуйста!

Да-да, подтверждаю, натыкался на такое, в том числе на каких-то ранних ASPLinux-ах, клон редхата.
Где-то в районе /etc/sysconfig/nerwork-script
Ух, как я рад что забыл этот redhell :) и есть Gentoo!

Agressor написал(а): Да-да,

Agressor написал(а):
Да-да, подтверждаю, натыкался на такое, ...

На какое? В чём суть проблемы-то? ))

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Там настройки сети

Там настройки сети размещались в более-менее внятном месте /etc , где их можно было редактором изменить. А читался при загрузке файл из другого места в /etc. Этот файл был жесткой ссылкой на первый.

Не трудно догадаться, к чему приводило восстановление методом копирования из архива первого файла. ;)

Подробности местоположения и названия забыл. Да и вспоминать не охота. Но суть проблемы передал полностью.

Kevol написал(а): Не трудно

Kevol написал(а):
Не трудно догадаться, к чему приводило восстановление методом копирования из архива первого файла. ;)

мне почему-то трудно :( ну да ладно...

Жесткую ссылку затирало и

Жесткую ссылку затирало и получалось два разных файла - один который правишь, и он типа нормальный, а второй который читается - он не менялся в результате, посему от изменений толку ноль, а непонятно почему.

аааа.... ну да... у команды

аааа.... ну да...
у команды cp например есть такой параметр -d
man cp:

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

просто при перезаписи исходного файа он сначала удаляется!, а потом воздается новый и данные пишутся в него, т.е. inode как раз и меняется... так сделано для уменьшения фрагментации файлов! чет я об этом не подумал совсем :)

для tar вроде подобные опции были...

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

Более того, при работе с

Более того, при работе с архивами необходимо знать, учитывать, что объекты могут быть ссылками, что и сделано в tar по умолчанию. Можно, конечно же раскрывать ссылки, но для этого требуется указать соответствующие опции --dereference --hard-dereference. Кроме того надо сохранять и права доступа -p.

Но решение красношапки, реально странное. Софт-ссылки были бы уместнее и нагляднее. А "беда" вовсе не в жестких ссылках — в неумелом обращении с ними.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

kstati написал(а): А "беда"

kstati написал(а):
А "беда" вовсе не в жестких ссылках — в неумелом обращении с ними.

+1

Хорошо сказали ;)

kstati написал(а): в неумелом

kstati написал(а):
в неумелом обращении с ними.

Умения приходят с опытом.

Жесткие ссылки атавизм. Много кто сталкивался с ними в поледнее время?
Резонный вопрос - почему?

Мой ответ. Это специальная технология позволяющаяя сократить объем информации на носителе в рамках одного раздела.

Цитата: Мой ответ. Это

Цитата:
Мой ответ. Это специальная технология позволяющаяя сократить объем информации на носителе в рамках одного раздела.

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

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

но для множественного

но для множественного представления одной и той же информации.

вполне уместны софтлинки: ибо - работают по дефолту в пределах 1 компа, а не 1-й файловой системы ( ну а не по дефолту есть системы отслеживания связей между ссылками и их объектами )

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Цитата: Мой ответ. Это

Вот, например-с. Есть задачка.
Один пользователь создает файл в своём домашнем каталоге и хочет им поделиться. Мягкая ссылка не даст такой возможности ибо нет доступа на чтение к каталогу. А жесткая - да пожалуйста!
Вот примерчик-тест, чтобы понятно было "зачем нужны".

mkdir -p /tmp/test/root/
mkdir -p /tmp/test/user/
echo "echo GoodScript" > /tmp/test/root/good_script.sh
ln -s /tmp/test/root/good_script.sh /tmp/test/bin/good_script_link
ln /tmp/test/root/good_script.sh /tmp/test/bin/good_script_hard_link
chmod 1766 /tmp/test/root/good_script.sh
sudo chown -R root:root /tmp/test/root/
/tmp/test/bin/good_script_link
/tmp/test/bin/good_script_hard_link

При этом скрипт лежит как в общедоступном месте, так и в папке root, доступной далеко не каждому.
То есть жесткие ссылки иногда-таки нужны.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Не хватает mkdir -p

Не хватает

mkdir -p /tmp/test/bin
...
sudo chmod 755 /tmp/test/root/good_script.sh
...
sudo chmod 700 /tmp/test/root/

chmod 1766 /tmp/test/root/good_script.sh не несет смысловой нагрузки, ибо тогда в обоих случаях получается access denied - прав на запуск хардлинк не даст.

А может быть просто запустить

upd.
понял очепяточку ) 1755. Я это и собирался сделать, но допустил ошибку.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Это всё равно ответы на свой вопрос.

Много кто сталкивался за последнее время с жесткими ссылками?

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

Символические ссылки

Ребят, всем большое спасибо! Разобрался с относительными сивмолическими ссылками (второрой из приведенных вариантов), так что буду делать на их основе.

Хотя, остается интересным, можно ли ссылке указать путь так, чтобы он отсчитывался от точки монтирования (неапример, спецсимволы, указывающие на точку монтирования)?

ln -s

ln -s ../../somedir/some_subdir/file ./some-relative-link
ls -l ~/some-relative-link

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".