Недопустимая ссылка перекрестного устройства, в то время как Hardlinking в той же файловой системе

На быстром взгляде это похоже на подлинную fontconfig ошибку мне, так как это работает правильно здесь, и у меня действительно есть и DejaVu и Unifont установленными:

$ fc-match Sans
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans"
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans "
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match "Sans 9"
DejaVuSans.ttf: "DejaVu Sans" "Book"

Но на более внимательном рассмотрении мы видим еще некоторые детали. Все еще может быть fontconfig ошибка где-нибудь, но fc-match по-видимому, возвращает значение по умолчанию, когда оно ничего не находит. Это - просто значение по умолчанию, DejaVu в моей системе:

$ fc-match uni
DejaVuSans.ttf: "DejaVu Sans" "Book"
$ fc-match unifont
Unifont.ttf: "unifont" "Medium"
$ fc-match 4e5zedrkbxp
DejaVuSans.ttf: "DejaVu Sans" "Book"

Страница справочника fc-match(1) подтверждает, что команда не делает точного соответствия, но возвращает то, что это думает, лучшие соответствия. Вы видите их всех с -a или более краткое -s:

$ fc-match -s uni # now it also finds unifont
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
DejaVuSans-Oblique.ttf: "DejaVu Sans" "Oblique"
DejaVuSans-BoldOblique.ttf: "DejaVu Sans" "Bold Oblique"
n019003l.pfb: "Nimbus Sans L" "Regular"
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"
FreeSans.ttf: "FreeSans" "нормален"
KanjiStrokeOrders.ttf: "KanjiStrokeOrders" "Medium"
Eadui.ttf: "Eadui" "Medium"
Unifont.ttf: "unifont" "Medium"
FreeSerif.ttf: "FreeSerif" "нормален"
cu12.pcf.gz: "ClearlyU" "Regular"
cu-pua12.pcf.gz: "ClearlyU PUA" "Regular"
10x20.pcf.gz: "Fixed" "Regular"

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

$ fc-match -s uni | grep -i uni
Unifont.ttf: "unifont" "Medium"

Но, Ваш вопрос о том, как точно он делает соответствие. FcFontMatch(3) и далее примерно подтвердите, что это использует принимать значение по умолчанию/настраивать значение и определенно подтверждает, что сначала изменяет критерий поиска, который Вы передали ему. Для чего-либо еще глубже, необходимо будет осмотреть код (запустите с вышеупомянутой функции).

14
12.06.2013, 12:48
4 ответа

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

Посмотрите man ln и контроль -s опция!

В символьных ссылках общего использования вместо Жестких ссылок.

4
27.01.2020, 19:51
  • 1
    В то время как это могло бы решить проблему, это действительно не объясняет, почему это происходит. –  Bex 18.08.2015, 13:22

наиболее вероятно что Ваш /home каталог не находится на том же разделе как /root каталог.

Можно легко проверить это с cat /etc/fstab hardlinks не может быть создан между различными разделами, только символьные ссылки могут.

7
27.01.2020, 19:51

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

0
01.03.2020, 15:31

Файловые системы, такие как ext3/ext4, используют i -узлов для хранения файловых метаданных -данных (режима, времени, ctime, mtime, uid, gid, размера, количества ссылок _, ACL и т. д.)

i -таблица узлов представляет собой линейный массив struct ext4 _inode. эта структура ext4 _inode имеет поле i _количество ссылок _. это относится к количеству жестких ссылок.

всякий раз, когда создается новая жесткая ссылка на файл, эта ссылка _значение счетчика этих файлов в -узле увеличивается.

напр.

лс -л /home/raju/test.sh

-rwxrwxrwx 2 raju raju 287 23 августа 23 :19 /home/raju/test.sh

здесь 2 — количество ссылок.

разные тома имеют разные i -таблицы узлов.

Каталог

— это плоский файл, в котором имена файлов сопоставляются с номером узла i -в файловой системе.

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

запись каталога одной файловой системы (том1 )не может ссылаться на i -узел, который находится в другой файловой системе (том2 ).

Таким образом, ln завершается с ошибкой недопустимой перекрестной связи -устройства.

но вы всегда можете создать символические ссылки на файлы в разных файловых системах/томах.

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

ссылка:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Table

1
22.09.2020, 08:00

Теги

Похожие вопросы