Архитектура файловых систем Linux (Быть или не быть циклическим ссылкам)
Модератор: Модераторы разделов
-
codec
- Сообщения: 1
- ОС: Debian GNU/Linux 4.0 'Etch'
Архитектура файловых систем Linux
Всем привет.
Я не так давно в Линуксе, и на данный момент меня мучает вопрос: а оптимально ли использование в Linux так называемых Symbolic Links? (в принципе и Hard Links наверное, если они могут ссылаться на каталоги, которые в на физическом уровне тоже представляют из себя файлы).
С одной стороны бонус в виде того, что не надо делать физические копии один и тех же файлов.
С другой стороны недостаток в виде потери древовидной структуры файловой системы, и превращения ее в неупорядоченный граф.
Как в случае такого графа работает поиск по диску? Ведь он должен как то отслеживать, что текущие ребро графа диска он еще не проходил?
Я не так давно в Линуксе, и на данный момент меня мучает вопрос: а оптимально ли использование в Linux так называемых Symbolic Links? (в принципе и Hard Links наверное, если они могут ссылаться на каталоги, которые в на физическом уровне тоже представляют из себя файлы).
С одной стороны бонус в виде того, что не надо делать физические копии один и тех же файлов.
С другой стороны недостаток в виде потери древовидной структуры файловой системы, и превращения ее в неупорядоченный граф.
Как в случае такого графа работает поиск по диску? Ведь он должен как то отслеживать, что текущие ребро графа диска он еще не проходил?
C2D E6400 3.2Ghz, 2GB DDR2 800 CL4, GF 7900GS 580/1400 512Mb, SATA2 WD2500KS
-
codec
- Сообщения: 1
- ОС: Debian GNU/Linux 4.0 'Etch'
Re: Архитектура файловых систем Linux
На мой взгляд решение очень сомнительное. Может я чего не понимаю и смысл не только в одном сэкономленоом месте? Но после прочтения стандарта FHS я для себя ничего другого не вынес.
А вот проблемы в связи с линками возникают на мой взгляд серъезные.
- Усложнение ядра
- Потеря упорядоченной структуры дерева.
Кто нибудь кинет ссылочку на ньюс группы разработчиков, где это можно обсудить?
А вот проблемы в связи с линками возникают на мой взгляд серъезные.
- Усложнение ядра
- Потеря упорядоченной структуры дерева.
Кто нибудь кинет ссылочку на ньюс группы разработчиков, где это можно обсудить?
C2D E6400 3.2Ghz, 2GB DDR2 800 CL4, GF 7900GS 580/1400 512Mb, SATA2 WD2500KS
-
snake
- Бывший модератор
- Сообщения: 677
Re: Архитектура файловых систем Linux
Вам так жалко бедное ядро ниасиливающее непомерной работы по учету линков?(codec @ Dec 19 2006, в 20:12) писал(а):А вот проблемы в связи с линками возникают на мой взгляд серъезные.
- Усложнение ядра
Легко работает. См. man find за разъяснениями.(codec @ Dec 19 2006, в 20:01) писал(а):Как в случае такого графа работает поиск по диску?
Теоретически, жеские ссылки на каталоги возможны, но делать их может только рут и, вообеще, такое занятие считается крайне нездоровым.(codec @ Dec 19 2006, в 20:01) писал(а):в принципе и Hard Links наверное, если они могут ссылаться на каталоги
Все хорошо в меру. В любом случае линки предают дополнительную гибкость в управлении системой, а это никогда не лишне, если, конечно, не перегибать.(codec @ Dec 19 2006, в 20:01) писал(а):а оптимально ли использование в Linux так называемых Symbolic Links?
Стоит ли напоминать, что отдаленным и несовсем полноценным, но все-таки аналогом симлинков являются ярлыки в виндос. И то, что они там эволюционируют уже лет 15, о чем-то то говорит, ведь так!? Кстати, интересный факт: ntfs поддерживает хардлинки. (правда, виндовс не имеет штатных средств к созданию оных
А чего тут обсуждать то? Им уже лет 25 и все споры похоронены под такой глубиной культурного слоя, что представляют интерес чисто археологический. Тем более их все равно не отменишь, даже если очень сильно захотеть: слишком много стандартных вещей замешано на симлинках, хотя бы тот же SysV init(codec @ Dec 19 2006, в 20:12) писал(а):Кто нибудь кинет ссылочку на ньюс группы разработчиков, где это можно обсудить?
История уже все рассудила: Линкам быть!
В реальности все не так, как на самом деле...
JabberID: zmeyk@jabber.ru
JabberID: zmeyk@jabber.ru
-
codec
- Сообщения: 1
- ОС: Debian GNU/Linux 4.0 'Etch'
Re: Архитектура файловых систем Linux
man find
Действительно помогло. Спасибо.
-P Never follow symbolic links. This is the default behaviour.
В случае с софт линками ясно теперь. Они действительно не нарушают древовидную структуру файловой системы.
Сравнение с ярлыками помоему удачное. Почему я сразу не провел паралели, так это наверное потому что ярлыки в виндовс не есть часть функциональности ни файловой системы ни ядра. Это просто файлы специального содержания, которые обрабатываются оболочкой - эксплорером.
А вот хард линки на папки - действительно нарушают. Потому как распознать циклический линк на их основе я думаю действительно сложно. И понятно почему они попали в немилость ;-) Надеюсь в скором времени это будет действительно не вопрос, и эту функциональность вообще заблокируют.
Да я знаю что в NTFS есть хард линки на физическом уровне. И слава богу что нет доступных возможностей из создавать.
Хм. Похоже у меня больше нет вопросов. Все выяснилось достаточно легко.
C2D E6400 3.2Ghz, 2GB DDR2 800 CL4, GF 7900GS 580/1400 512Mb, SATA2 WD2500KS
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Архитектура файловых систем Linux
codec, Вас не смущает что в _любой_ обычной папке находится по крайней мере два хардлинка на папки ... и пользуются ими очень часто 
-
codec
- Сообщения: 1
- ОС: Debian GNU/Linux 4.0 'Etch'
Re: Архитектура файловых систем Linux
diesel
Согласно спецификации файловой системы. Каждый каталог имеет две специальные ссылки '..' и '.'. Во всех каталогах (кроме /) .. - ссылается на родительский каталог, а . - на самого себя. В корневом каталоге .. - тоже ссылается на себя.
Не смущает потому что это _специализированные_ ссылки, необходимые для поддержания структуры FS.
И я надеюсь что существующая инфраструктура не позволяет менять описанное поведение ссылок.
Согласно спецификации файловой системы. Каждый каталог имеет две специальные ссылки '..' и '.'. Во всех каталогах (кроме /) .. - ссылается на родительский каталог, а . - на самого себя. В корневом каталоге .. - тоже ссылается на себя.
Не смущает потому что это _специализированные_ ссылки, необходимые для поддержания структуры FS.
И я надеюсь что существующая инфраструктура не позволяет менять описанное поведение ссылок.
C2D E6400 3.2Ghz, 2GB DDR2 800 CL4, GF 7900GS 580/1400 512Mb, SATA2 WD2500KS
-
polachok
- Бывший модератор
- Сообщения: 2199
- Статус: главный форумный маргинал
- ОС: gnu/linux
Re: Архитектура файловых систем Linux
быть или не быть циклическим ссылкам
ln -s a b
ln -s b a
cat a
cat: a: Слишком много уровней символьных ссылок
И немедленно выпил.
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
-
codec
- Сообщения: 1
- ОС: Debian GNU/Linux 4.0 'Etch'
Re: Архитектура файловых систем Linux
(diesel @ Dec 20 2006, в 00:36) писал(а):Нинада ничего блокировать!!!
В данном случае речь идет о потенциально опасной функциональности. И блокирование таких вещей - как движение в сторону улучшения архитектуры.
Вы ведь не будете говорить "Давайте оставим" различного рода дыры, недоработки?
Если в данном случае коммунити признало нард линки на папки "злом", то разумно в будущем, оставив делту по времени для программного обеспечения которое возможно это функциональность использует, избавляться от этого.
Это на самом деле тонкий вопрос - найти золотую середину между исторически сформировавшимися вещами и актуальными улучшениями.
В том же стандарте FHS встречается не раз записи вроде "mtab does not fit the static nature of /etc: it is excepted for historical reasons".
(polachok @ Dec 20 2006, в 00:14) писал(а):ln -s a b
ln -s b a
cat a
cat: a: Слишком много уровней символьных ссылок
Это как я понимаю пример "как ни надо делать" =) Будемс знать.
C2D E6400 3.2Ghz, 2GB DDR2 800 CL4, GF 7900GS 580/1400 512Mb, SATA2 WD2500KS
-
snake
- Бывший модератор
- Сообщения: 677
Re: Архитектура файловых систем Linux
Хард линки на папки просто так может создать только рут. Деструктивного в этом не больше, чем в сакраментальном rm -Rf /. По здравому размышлению, даже меньше. Рут сказал "надо" значит действительно надо, на то он и рут --- знает, что делает.
А если не знает, то тут никакие подстеленные саломки не спасут --- проблема некомпетенции техническими средствами не решается.
И еще не принято в *nix ради отдельных частных случаев нарушать общие принципы.
А если не знает, то тут никакие подстеленные саломки не спасут --- проблема некомпетенции техническими средствами не решается.
И еще не принято в *nix ради отдельных частных случаев нарушать общие принципы.
В реальности все не так, как на самом деле...
JabberID: zmeyk@jabber.ru
JabberID: zmeyk@jabber.ru
-
aLexx programmer
- Сообщения: 985
- Статус: Турук-Макто
- ОС: Gentoo -> Ubuntu
Re: Архитектура файловых систем Linux
(codec @ Dec 20 2006, в 02:03) писал(а):В данном случае речь идет о потенциально опасной функциональности.
Почти любая функциональность с какой-то стороны "потенциально опасна"
(codec @ Dec 20 2006, в 02:03) писал(а):Это как я понимаю пример "как ни надо делать" =) Будемс знать.
Это пример того, что цикл символических ссылок можно отследить.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Архитектура файловых систем Linux
Я бы тут кое-что уточнил:(snake @ Dec 20 2006, в 02:16) писал(а):Хард линки на папки просто так может создать только рут.
(man ln) писал(а):В существующих реализациях, если команда ln может создавать жесткую ссылку на каталог, то она может это делать только от лица суперпользователя. POSIX запрещает системному вызову link(2) и утилите ln создавать жесткие ссылки на каталоги
Код: Выделить всё
# ln new/ 1
ln: `new/': не допускается создавать жесткие ссылки на каталоги
$ ln --version
ln (GNU coreutils) 5.97
Copyright (C) 2006 Free Software Foundation, Inc.2codec:
Кстати, насчёт жёстких ссылок. Для ясности нужно было добавлять "второй хардлинк", потому как первоначальное "имя файла" на самом деле тоже является жёсткой ссылкой на этот файл. При создании второй жёсткой ссылки на тот же файл она становится полностью равноправной с первой; то есть файл имеет два "имени". То есть к примеру с точки зрения конечного результата команды "cp 1 2 && rm 1" и "ln 1 2 && rm 1" совершенно идентичны (с точностью до физического размещения файла на диске, но так глубоко лезть нет смысла). А файл считается удалённым, когда на него не осталось _ни одной_ жёсткой ссылки. Вообще, у всей этой системы со ссылками (жёсткими и мягкими) плюсов значительно больше, чем минусов.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
unflag
- Бывший модератор
- Сообщения: 1030
- Статус: здесь могла бы быть ваша реклама
- ОС: Debian testing/Win Server 2008
Re: Архитектура файловых систем Linux
2codec:
Если вам так не нравятся линки, то сделайте
И не мучайтесь
А все уже созданные хардлинки удалите. Только вот что хорошего у вас получится после такого членовредительства - вопрос еще тот. Собственно, а почему вы решили, что линки уродуют структуру фс? Может быть, ваше видение её как раз и есть неправильно?
Если вам так не нравятся линки, то сделайте
Код: Выделить всё
alias ln='echo низя'И не мучайтесь
А все уже созданные хардлинки удалите. Только вот что хорошего у вас получится после такого членовредительства - вопрос еще тот. Собственно, а почему вы решили, что линки уродуют структуру фс? Может быть, ваше видение её как раз и есть неправильно?
One day! One day, who knows?
Someday! Someday I suppose!
Конференция в jabber: linuxforum@conference.jabber.ru
-
codec
- Сообщения: 1
- ОС: Debian GNU/Linux 4.0 'Etch'
Re: Архитектура файловых систем Linux
Да я не мучаюсь. И удалять ничего не собираюсь. Просто хочу понять что как и почему сделано =)
Хм. А вот тут мне не совсем ясно, почему именно с точностью до физического размещения на диске.
В соответствии с Bash Reference, пункт 3.2.3 Lists of Commands.
по идее
"cp 1 2 && rm 1" - сначала должна быть создана физически новая копия файла 1, потом создан хард линк на 2, а потом удален хард линк на 1.
а
"ln 1 2 && rm 1" - создан второй хард линк 2 на файл 1 (который физически никуда не двигался), а потом удален хард линк 2.
Или я чтото не так понимаю?
(t.t @ Dec 20 2006, в 10:31) писал(а):"cp 1 2 && rm 1" и "ln 1 2 && rm 1" совершенно идентичны (с точностью до физического размещения файла на диске, но так глубоко лезть нет смысла)
Хм. А вот тут мне не совсем ясно, почему именно с точностью до физического размещения на диске.
В соответствии с Bash Reference, пункт 3.2.3 Lists of Commands.
A list is a sequence of one or more pipelines separated by one of the operators `;', `&', `&&', or `||', and optionally terminated by one of `;', `&', or a newline.
...
command1 && command2
command2 is executed if, and only if, command1 returns an exit status of zero.
по идее
"cp 1 2 && rm 1" - сначала должна быть создана физически новая копия файла 1, потом создан хард линк на 2, а потом удален хард линк на 1.
а
"ln 1 2 && rm 1" - создан второй хард линк 2 на файл 1 (который физически никуда не двигался), а потом удален хард линк 2.
Или я чтото не так понимаю?
C2D E6400 3.2Ghz, 2GB DDR2 800 CL4, GF 7900GS 580/1400 512Mb, SATA2 WD2500KS
-
polachok
- Бывший модератор
- Сообщения: 2199
- Статус: главный форумный маргинал
- ОС: gnu/linux
Re: Архитектура файловых систем Linux
"ln 1 2 && rm 1" - создан второй хард линк 2 на файл 1 (который физически никуда не двигался), а потом удален хард линк 2.
почему - 2 ?
И немедленно выпил.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Архитектура файловых систем Linux
Правильно с точностью до поправки, на которую намекает полячок. Если подробнее: в первом случае жёсткая ссылка 2 создаётся на физическую копию файла, после чего первая ссылка удаляется, а то, на что она ссылалась, как файл больше недоступно (но физически данные никуда не делись, пока не будут затёрты); во втором ничего никуда не копировалось -- это почти полный аналог "mv 1 2". Т.е. физически разница между этими двумя вариантами будет: в первом случае файл 2 будет лежать в другом месте, а по старому расположению останется недоступная копия, которая отныне будет восприниматься как свободное место. А на пользовательском уровне разницы никакой (между результатами, а не действиями): в обоих случаях файл, доступный ранее под именем 1, теперь будет доступен под именем 2.(codec @ Dec 20 2006, в 12:55) писал(а):по идее
"cp 1 2 && rm 1" - сначала должна быть создана физически новая копия файла 1, потом создан хард линк на 2, а потом удален хард линк на 1.
а
"ln 1 2 && rm 1" - создан второй хард линк 2 на файл 1 (который физически никуда не двигался), а потом удален хард линк 2.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
codec
- Сообщения: 1
- ОС: Debian GNU/Linux 4.0 'Etch'
Re: Архитектура файловых систем Linux
(polachok @ Dec 20 2006, в 12:12) писал(а):почему - 2 ?
Это просто опечатка. Я хотел написать там 1.
2 t.t.
Так всетаки на физическом уровне операции таки разные как я и полагал.
2 Bruce
Зачем это надо я и так понимаю. Спасибо.
C2D E6400 3.2Ghz, 2GB DDR2 800 CL4, GF 7900GS 580/1400 512Mb, SATA2 WD2500KS