Быстро и медленные символьные ссылки

Я думаю, что Вам не нужен VM для этого вообще. Можно создать собственный Archiso, взглянуть на это: https://wiki.archlinux.org/index.php/Archiso

4
31.07.2014, 05:05
2 ответа

Означает ли «разрешенное хранение целевого пути в структурах данных, используемых для хранения файловой информации на диске (inodes)», что быстрая символическая ссылка сохраняет путь к связанному файлу внутри индексный дескриптор быстрой символической ссылки

Да

Действительно ли быстрая символическая ссылка, как и сам файл, имеет только индексный дескриптор и не имеет содержимого файла?

Зависит от того, что вы подразумеваете под «имеет содержимое файла». Никакие символические ссылки не имеют содержимого файла в том смысле, что вы не можете открыть () их и прочитать () из них. Но в смысле, подразумеваемом процитированным вами текстом, «файл содержал текстовую ссылку на цель ссылки». Так что да, эту текстовую ссылку можно рассматривать как «содержимое» файла.

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

Имеет ли медленная символическая ссылка, как сам файл, индексный дескриптор и некоторое содержимое файла, которое является целевым путем?

С той же точки зрения, да!

Что означает «если целевой путь превышает доступное пространство inode»?

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

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

Есть ли какая-нибудь команда, которая может проверить, является ли символическая ссылка быстрой или медленной?

В лучшем случае, инструменты отладки или сброса файловой системы. И это будет полностью зависеть от типа интересующей вас файловой системы (xfs, ext *, btrfs и т. Д.)

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

Вы можете получить целевой путь (содержимое) символической ссылки с помощью readlink , но ls -l тоже подойдет.

5
27.01.2020, 20:49

Из связанной inode вики-страницы:

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

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

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

Как отмечалось выше, ls -i может дать вам номер inode - скорее всего, это место, где находится ссылка. ls -l предоставит вам путь к цели ссылки. Для последнего потребуется системный вызов stat () , но, поскольку список каталогов файла - его dentry - будет содержать его номер inode и имя файла, ls -i ] форма скорее всего не будет. По крайней мере, в зависимости от файловой системы, он, скорее всего, не потребует stat () для любого файлового объекта, кроме содержащего его каталога.

Вы можете изменить способ ls отчета о ссылках со следующими параметрами, как , указанными в POSIX :

-F - Не переходить по символическим ссылкам с именем операнды, если не указаны параметры -H или -L. Напишите косую черту ('/') сразу после каждого пути, являющегося каталогом, звездочку ('*') после каждого исполняемого файла, вертикальную черту ('|') после каждого имени FIFO и знак at ( '@') после каждого, что является символической ссылкой. Для других типов файлов могут быть написаны другие символы.

-H - Если в командной строке указана символическая ссылка, ссылающаяся на файл типа «каталог», ls должен оценить информацию о файле и тип файла как те, на которые ссылается ссылка, а не ссылку. сам; однако ls должен записывать имя самой ссылки, а не файла, на который ссылается ссылка.

-L - Оценить информацию о файле и тип файла для всех символических ссылок (названных в командной строке или встречающихся в файловой иерархии), чтобы они соответствовали файлу, на который ссылается ссылка, а не самой ссылке. ; однако ls должен записывать имя самой ссылки, а не файла, на который ссылается ссылка. Когда -L используется с -l, записывать содержимое символических ссылок в длинном формате (см. Раздел STDOUT).

А как ссылка может быть быстрой ? Из той же связанной вики-страницы :

Встраивание

Может иметь смысл хранить очень маленькие файлы в самом inode, чтобы сэкономить как пространство (блок данных не нужен), так и время поиска (нет требуется дополнительный доступ к диску). Эта функция файловой системы называется встраиванием. Таким образом, при использовании современных файловых систем нельзя предполагать строгое разделение индексных дескрипторов и файловых данных.

Если данные файла умещаются в пространстве, выделенном для указателей на данные, это пространство можно удобно использовать. Например. ext2 хранит данные символических ссылок (обычно имена файлов) таким образом, если размер данных не превышает 60 байт («быстрые символические ссылки») .

Ext4 имеет параметр файловой системы inline_data, который, если он включен во время создания файловой системы, позволяет ext4 выполнять встраивание. Поскольку размер inode ограничен, это работает только для очень маленьких файлов.

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

3
27.01.2020, 20:49

Теги

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