Неверная ссылка между устройствами linux

Проблема: балуюсь DC++, есть папка с расшаренными файлами /mnt/sda1/foo/ есть другая папка с кучей файлов в числе которых, один который я хотел бы расшарить /mnt/sdb2/bar/film.avi 0_o Но на sda1 нет свободного места и в голове возник хитрый план: ln /mnt/sdb2/bar/film.avi /mnt/sda/foo/ Который провалился с треском ибо «Неверная ссылка между устройствами»

Можно конечно расшарить папку /mnt/sdb2/foobar/ переместив (или добавив хардлинк на) film.avi но это решение меня огорчает 🙁

Подскажите пожалуйсто решение в духе того что пытался сделать я: расшарить /mnt/sdb2/bar/film.avi, так как-будто он лежит в /mnt/sda1/foo/

Большое спасибо всем заранее

> ln /mnt/sdb2/bar/film.avi /mnt/sda/foo/ Который провалился с треском ибо «Неверная ссылка между устройствами»

А нужно: ln -s (не хардлинк, а символическая ссылка).

Хардлинки между устройствами невозможны. Можно попробовать симлинки, хотя шансы невелики.

Жёсткие ссылки возможны только в пределах одной ФС. Можно попробовать символические ссылки.

Чисто для разнообразия предложу aufs.

Между устройствами нельзя создавать хардлинки, ибо хардлинк — это всёго лишь ещё одно название именованной области данных на носителе (файл). Фактически, нет разницы, какое имя у файла было первым. а какое потом стало хардлинком: при удалении первоначального имени хардлинк остаётся полноценным именем файла (со всеми инодами). Хардлинк — это свойство ОДНОЙ файловой системы.

Возможно, Вам поможет man mount на предмет опции —bind
Но —bind работает только с каталогами, поэтому придётся создать пустой подкаталог. например, /mnt/sda1/foo/3rd-party-films и на него забиндить каталог с нужными файлами.

Уважайте собеседников, пожалуйста.

Эх, хороший ты человек Slavaz, хорошо и терпеливо объясняешь.

> балуюсь DC++, есть папка с расшаренными файлами . Но на sda1 нет свободного места

у твоего DC++клиента нет менеджера шары? Он не может брать файлы более чем с одного каталога на одном диске?

выбрось этот ужасный DC++-клиент и поставь что-нибудь адекватное eiskaltdcpp. DC++клиент — сам по себе менеджер маунтпойнтов, его нет смысла обманывать хардлинками.

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

Так-же поищу клиент который делал бы все это за меня.

aufs тоже посмотрел, сразу стало чисто и разнообразно .-)

Источник

Почему я не могу создать жесткую ссылку из файла устройства в каталоге, отличном от /dev?

Когда я захотел создать жесткую ссылку в моем каталоге /home в режиме root , Linux показал следующее сообщение об ошибке:

Ниже приведено сообщение об ошибке:

Но я мог создать только жесткую ссылку в каталоге /dev , и это было невозможно в других каталогах.

Теперь я хочу знать, как создать жесткую ссылку из существующего файла устройства (например, sdb1 ) в /home (или другие каталоги)?

2 ответа

Но я мог только создать жесткую ссылку в каталоге /dev, и это было невозможно в других каталогах.

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

Читайте также:  Изменить cid sd карты windows

Например, если ваш /home находится в другом разделе, чем ваш корневой раздел, вы не сможете жестко связать —- +: = 1 =: + —- до /tmp/foo .

Теперь, как отметил @RichardNeumann, /home/user/ обычно монтируется как файловая система devtmpfs. См. Этот пример:

Поэтому вы можете создавать жесткие ссылки на файлы в [[email protected]

]$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% / devtmpfs 4063180 0 4063180 0% /dev tmpfs 4078924 0 4078924 0% /dev/shm tmpfs 4078924 9148 4069776 1% /run tmpfs 4078924 0 4078924 0% /sys/fs/cgroup /dev/sda1 1038336 202684 835652 20% /boot tmpfs 815788 28 815760 1% /run/user/1000 внутри /dev .

Жесткие ссылки просто создают другую запись в каталоге, указывая на файл (где файл — это файл, такой как вещь, например каталог). Поэтому жесткие ссылки не могут ссылаться на файл в другой файловой системе.

Софт-ссылки в этом случае вы друг. Используйте ln -s . Софтлинки могут проходить через файловые системы и даже указывать на то, чего там нет.

Источник

С примонтированного раздела не удаляются файлы в корзину

Есть SSD и HDD, структура разделов выглядит следующим образом:

100 ГБ
/media/storage

Из хомяка сделал симлинки следующего вида:
ln -s /media/storage/Downloads

/Downloads
ln -s /media/storage/Music

/Music
ln -s /media/storage/Video

При попытке удалить файл из любой папки, которая сделана через симлик, ФМ выдает ошибку «Не удалось удалить файл в корзину. Неверная ссылка между устройствами.» (в англ. локали он выглядит так: «Unable to trash file. Invalid cross-device link.»).

Причем заметил одну закономерность — такая проблема наблюдается только при попытке удалить файл, располагающийся в «корне» папки (например

/Downloads), файлы, расположенные «глубже» (например

/Downloads/Soft) удаляются корректно. Проблема касается только файлов, папки удаляются нормально.

И еще: из /media/storage/Downloads всё удаляется как положено.

ОС: Xubuntu 15.04
ФМ: Thunar

Проблему частично решил, вместо симлинков примонтировал разделы через fstab:

/media/storage/Documents /home/maxim/Documents none bind 0 0
/media/storage/Downloads /home/maxim/Downloads none bind 0 0
/media/storage/Music /home/maxim/Music none bind 0 0
/media/storage/Pictures /home/maxim/Pictures none bind 0 0
/media/storage/Video /home/maxim/Video none bind 0 0

Теперь никаких ошибок при удалении, но тем не менее удаленные файлы не попадают в корзину, а вместо этого в каждой такой папке создается директория .Trash-1000 со всем хламом. По сути это тоже корзина, но мне не нужно 6 корзин, разбросанных по системе.

Кто знает как объединить все эти корзины в одну? Ну или на худой конец как чистить этот мусор через cron.

А удалось решить проблему как-то иначе?

У меня debian с xfce 4.12, такая же точно проблема — не удаляются файлы, скажем, из

/Видео , но зато из подпапок все удаляется.

Даже создал тему, но пока никаких советов.

Хочу еще заметить, что эта ошибка появилась словно сама — сидишь себе, работаешь спокойно, все хорошо, а на следующий день появляется вот такой вот баг.

Я за бан этого ублюдка!

Тут бы совсем не плохо было бы узнать файловую систему и пройтись по правам файлов, кому они принадлежат? Каким ФМ пользуешься? Какой дистр? И т.д. Линукс — это много всего и работает по разному, соответственно и проблемы могут быть разные.

Источник

Почему жесткие ссылки не разрешены для каталогов?

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

Я попробовал эти команды:

Я просто хочу знать причину этого. Это одинаково для всех дистрибутивов GNU/Linux и Unix (BSD, Solaris, HP-UX, IBM AIX) или только в Ubuntu или Linux?

Читайте также:  Deezer для mac os

4 ответа

Жесткие ссылки на каталоги нарушают файловую систему несколькими способами

Они позволяют создавать петли

Жесткая ссылка на каталог может ссылаться на самого родителя, который создает цикл файловой системы. Например, эти команды могут создать цикл с обратной ссылкой l :

Файловая система с циклом каталогов имеет бесконечную глубину:

Избегать бесконечного цикла при обходе такой структуры каталогов довольно сложно (хотя, например, POSIX требует find чтобы избежать этого).

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

Они нарушают однозначность родительских каталогов

В цикле файловой системы существует несколько родительских каталогов:

В первом случае /tmp/a является родительским каталогом /tmp/a/b ,
Во втором случае /tmp/a/b/l является родительским каталогом /tmp/a/b/l/b , который так же, как /tmp/a/b ,
Таким образом, у него есть два родительских каталога.

Они умножают файлы

Файлы идентифицируются путями после разрешения символических ссылок. Так

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

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

Ваш пример

Как тогда могут работать мягкие ссылки на каталоги?

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

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

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

Команда readlink Можно найти путь к своему каноническому пути:

Мягкие ссылки отличаются от того, что использует файловая система

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

Источник

Символические и жесткие ссылки Linux

Символические и жесткие ссылки — это особенность файловой системы Linux, которая позволяет размещать один и тот же файл в нескольких директориях. Это очень похоже на ярлыки в Windows, так как файл на самом деле остается там же где и был, но вы можете на него сослаться из любого другого места.

В Linux существует два типа ссылок на файлы. Это символические и жесткие ссылки Linux. Они очень сильно отличаются и каждый тип имеет очень важное значение. В этой небольшой статье мы рассмотрим чем же отличаются эти ссылки, зачем они нужны, а также как создавать ссылки на файлы в Linux.

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

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

Читайте также:  Лицензия windows 10 pro getgenuine

Вот основные особенности символических ссылок:

  • Могут ссылаться на файлы и каталоги;
  • После удаления, перемещения или переименования файла становятся недействительными;
  • Права доступа и номер inode отличаются от исходного файла;
  • При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
  • Можно ссылаться на другие разделы диска;
  • Содержат только имя файла, а не его содержимое.

Теперь давайте рассмотрим жесткие ссылки.

Жесткие ссылки

Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок — это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности:

  • Работают только в пределах одной файловой системы;
  • Нельзя ссылаться на каталоги;
  • Имеют ту же информацию inode и набор разрешений что и у исходного файла;
  • Разрешения на ссылку изменяться при изменении разрешений файла;
  • Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.

Использование ссылок в Linux

Теоретические отличия вы знаете, но осталось закрепить все это на практике, поэтому давайте приведем несколько примеров работы со ссылками в Linux. Для создания символических ссылок существует утилита ln. Ее синтаксис очень прост:

$ ln опции файл_источник файл_ссылки

Рассмотрим опции утилиты:

  • -d — разрешить создавать жесткие ссылки для директорий суперпользователю;
  • -f — удалять существующие ссылки;
  • -i — спрашивать нужно ли удалять существующие ссылки;
  • -P — создать жесткую ссылку;
  • -r — создать символическую ссылку с относительным путем к файлу;
  • -s — создать символическую ссылку.

Создание символических ссылок

Сначала создайте папку test и перейдите в нее:

mkdir test && cd test

Затем создайте файл с именем source с каким-либо текстом:

echo «текст текст текст текст» > source
$ cat source

Файл готов, дальше создадим символическую ссылку Linux, для этого используется команда ln с опцией -s:

ln -s source softlink

Попробуем посмотреть содержимое файла по ссылке:

Как видите, нет никакой разницы между ней и исходным файлом. Но утилита ls покажет что это действительно ссылка:

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

Теперь удалите исходный файл и посмотрите что будет:

Вы получите ошибку, что такого файла не существует, потому что мы действительно удалили исходный файл. Если вы удалите ссылку, то исходный файл останется на месте.

Создание жестких ссылок

Снова создайте файл source с произвольным текстом:

echo «текст текст текст текст» > source
$ cat source

Теперь создадим жесткую ссылку Linux. Для этого достаточно вызвать утилиту без параметров:

ln source hardlink

Посмотрите содержимое файла:

Данные те же самые, а если мы посмотрим вывод утилиты ls, то увидим что inode и права доступа тоже совпадают:

Если для одного из файлов поменять разрешения, то они изменяться и у другого. Теперь удалите исходный файл:

Затем посмотрите содержимое:

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

Выводы

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

На завершение видео про ссылки в Linux:

Источник

Оцените статью