O que significa a quarta coluna (raiz) em /proc/.../mountinfo?

O que significa a quarta coluna (raiz) em /proc/.../mountinfo?

No procmanual, ele nomeia a 4ª coluna mountinfocomo "root" e a descreve como "o nome do caminho do diretório no sistema de arquivos que forma a raiz desta montagem". Mas como entender isso?

Achei que os elementos básicos de uma montagem fossem a origem e o caminho de destino, já que a "fonte da montagem" é a 10ª coluna e o destino na 5ª coluna, então para que serve a raiz?

Para a maioria das informações de montagem, a raiz é apenas /, parece não ter sentido. Eu só acho que as montagens de ligação têm uma raiz diferente de /, então só é útil em montagens de ligação? E no caso de bind, por que não mostrar o caminho absoluto na raiz? Por exemplo, ao vincular to /run/test_dir/a, /run/test_dir/ba coluna raiz mostra /test_dir/a, por que ocultar a /runparte?

Responder1

É difícil explicar isso com elementos de linguagem (pelo menos com minhas habilidades em inglês) - então decidi dar uma resposta baseada em exemplos:

O diretório raiz é frequentemente chamado deAltíssimaoumais altodiretório. Isso é apenas parcialmente verdade. Este diretórioé assumidoEnquanto oAltíssimadiretório. Você poderia descrevê-lo como "começarei a partir deste diretório - presumo que este seja o diretório mais alto e não haja nada acima".

Alguns exemplos para esclarecer o que significa “root”:

  • Imagine que você execute um servidor web e defina a raiz de um domínio example.comcomo /var/www/html/example.com. Agora você cria um arquivo /var/www/html/example.com/test.html. Se você abrir https://example.com/test.htmlno seu navegador. você obtém o conteúdo do arquivo criado. Se você definir /var/www/htmlcomo root, você deve abrirhttps://example.com/example.com/test.html
  • Se você chrootentrar no diretório /home/test/testSystem/. A raiz deste ambiente seria /home/test/testSystem. Se você fizer isso lsdentro do ambiente chroot, ls /você obterá o conteúdo de/home/test/testSystem/

Ponto de montagem com raiz/

Por exemplo, um USB contém:

/
├── dir1
│   ├── subfile1
│   └── subfile2
├── file1
├── file2
└── file3

Se você montar este USB, /mntobterá a saída normal esperada porque usa o /diretório do USB como root:

531 137 0:52 / /mnt rw,nosuid,nodev shared:75 - /dev/sdb [...]

Portanto, na maioria dos casos, a raiz dos pontos de montagem seria de fato /.

Ponto de montagem com raiz diferente de/

Você pode tentar fazer isso sozinho: Vincule dois diretórios em seu sistema de arquivos com

$ mount --bind /var/test1 /var/test2

A saída de mountinfoseria algo como:

564 29 0:26 /var/test1 /var/test2 rw,relatime shared:1 - ext4 /dev/sda rw [...]

A raiz do ponto de montagem localizada em /var/test2é /var/test1. A fonte de montagem (o que você montou) é/dev/sda

Voltando ao exemplo do USB: Se você agora montar o conteúdo /mnt/dir1em outra coisa, obterá a raiz da montagem /dir1e a fonte da montagem será /dev/sdb(o USB). A /mntparte é descartada aqui.

"Por que esconder a parte /run"

Resumindo: /runfoi descartado porque é uma partição tmpfs. Por que essas peças são removidas?

No exemplo USB montamos dir1em /dev/sdb. /home/test/usbmnt/A saída seria:

564 29 0:26 /dir1 /home/test/usbmnt/ rw,relatime shared:1 - ext4 /dev/sdb rw [...]

Você vê que montamos o conteúdo de /dir1 (do USB e NÃO do seu disco rígido) em um diretório chamado usbmnt. Talvez seja útil lê-lo como /dev/sdb/dir1.

Se a raiz fosse fornecida porque /mnt/usb/dir1não poderíamos saber qual é a localização real no USB: poderia ser /dir1, /usb/dir1ou talvez/mnt/usb/dir1

informação relacionada