Как объединить файлы с помощью dispatch -conf?

Фон

Скажем, у нас есть следующая настройка каталога:

$ ll
total 0
-rw-r--r-- 2 root root 0 Jul 29 23:36 afile.txt
-rw-r--r-- 2 root root 0 Jul 29 23:36 hL
lrwxrwxrwx 1 root root 9 Jul 30 01:22 sL -> afile.txt

Теперь давайте посмотрим на два ваших вопроса.


Вопросы

  1. If a hard link /hL is given, pointing to the inode of the above file, in what order is the disk accessed?

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

Например:

$ stat hL | head -3
  File: ‘hL’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 667668      Links: 2

против

$ stat afile.txt | head -3
  File: ‘afile.txt’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 667668      Links: 2

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

  1. If a soft link /sL is given, pointing to the above file, in what order is the disk accessed?

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

Например:

$ stat sL | head -3
  File: ‘sL’ -> ‘afile.txt’
  Size: 9           Blocks: 0          IO Block: 4096   symbolic link
Device: fd00h/64768d    Inode: 681295      Links: 1

Здесь мы можем видеть, что она имеет тип «символическая ссылка» и указывает на afile.txt. Также обратите внимание, что у него разные индексы (681295 и 667668 ), еще одно доказательство того, что это потребует дополнительного чтения.

Итак, каков порядок чтения?

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

[pid 18098] stat("/tmp/adir/hL", {st_mode=S_IFREG|0644, st_size=0,...}) = 0
[pid 18098] open("/tmp/adir/hL", O_RDONLY) = 3
[pid 18098] fstat(3, {st_mode=S_IFREG|0644, st_size=0,...}) = 0

Вот вывод команды more /tmp/adir/hL.

Для/tmp/adir/hL:

  • стат/откр (/ )→ стат/откр (tmp )→ стат/откр (adir )→ стат/откр (hL)

Для/tmp/adir/sL:

  • стат/откр (/ )→ стат/откр (tmp )→ стат/откр (adir )→ стат/откр (sL )→ стат/откр (файл.txt)

Дополнительная информация

Страница Википедии о символических ссылках также ускользает от всего этого:

Although storing the link value inside the inode saves a disk block and a disk read, the operating system still needs to parse the path name in the link, which always requires reading additional inodes and generally requires reading other, and potentially many, directories, processing both the list of files and the inodes of each of them until it finds a match with the link's path components. Only when a link points to a file in the same directory do "fast symlinks" provide significantly better performance than other symlinks.

Ссылки

0
11.06.2021, 20:50
0 ответов

Теги

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