2009-08-28 3 views
2

Я знаю, что это условие жестких ссылок, что они не могут охватывать файловые системы. Это относится к монтированию NFS? Учитывая следующую структуру каталогов, смогу ли я создать жесткую ссылку в каталоге A, которая указывает на файл в каталоге B?NFS + Жесткие ссылки?

/root 
    /A 
    /B <-NFS mount 

Например, я хотел бы запустить ln /root/B/file.txt /root/A/linkedfile.txt

ответ

6

Ну, так как /B отдельная файловая система (смонтированная файловая система NFS), вы не можете сделать жесткую связь между ним и /A, потому что они не находятся в одной файловой системе.

Это потому, что не Жесткая сделать копию данных ставят только копию указателя к этим данным, поэтому они должны быть в том же «адресное пространство».

+7

Жесткие ссылки и полезные ссылки - оба * указатели *, в некотором смысле. Разница в том, что в мягкой ссылке хранится текстовое представление пути файловой системы к цели, в то время как жесткая ссылка (поскольку это всего лишь запись в каталоге) просто хранит индексный дескриптор цели, поэтому он должен находиться в той же файловой системе, что и каталог, в котором находится ссылка. –

+0

Кулон во мне чувствует себя вынужденным указать, что альтернатива жесткой ссылке является * символической * ссылкой. –

+4

Я бы добавил, что имена файлов в каталоге также являются указателями. Нет понятия «исходный файл» и «жесткая ссылка на этот файл» - это два имени для одного объекта, и ни одно имя не является специальным. и @JesseHallett, я не согласен с идеей, что они альтернативы; Думаю, лучше сказать, что это разные вещи. –

6

Было бы неплохо сначала понять, что такое жесткая ссылка.

Обычно в unix-подобной системе имя файла в каталоге указывает на номер inode - по существу номер для файла. «Жесткая ссылка» просто создает другое имя файла с тем же номером inode. Теперь у вас есть разные имена, указывающие на один и тот же нумерованный файл.

Но обратите внимание, что между этими двумя именами нет прямой связи. Связь заключается в том, что у Name1 и Name2 есть номер inode, установленный на 12756, но вы ничего не можете задержать и сказать, что «эта вещь в моей руке - это связь между двумя файлами». Это всего лишь две записи в базе данных, в которых используется идентификационный номер. Вы можете сделать запрос (медленный, поскольку вы просматриваете каждую запись файла в системе) для имен файлов, которые имеют идентификационный номер, но это все.

Таким образом, это не означает ничего, чтобы создать «жесткую связь между двумя файловыми системами» - поскольку две файловые системы имеют разные схемы нумерации (inode 1234 в системе один и 1234 на второй системе, указывают на совершенно разные файлы) и единственное, что вам нужно сохранить, - это имя + inodeNumber, ничего не поделаешь.

Смежные вопросы