Posso listar os sistemas de arquivos que um kernel em execução pode suportar?

27

Estou tentando detectar quais sistemas de arquivos um kernel pode suportar. Idealmente, em uma pequena lista de nomes, mas eu aceito tudo o que você tem.

Note que não quero dizer os sistemas de arquivos atuais em uso , apenas aqueles que o kernel atual poderia, teoricamente, apoiar diretamente (obviamente, o fusível poderia suportar mais números infinitos).

Oli
fonte

Respostas:

12

Posso listar os sistemas de arquivos que um kernel em execução pode suportar?

Bem, a resposta /proc/filesystems está simplesmente errada - ela reflete apenas os FSs que já foram usados, mas geralmente há muito mais:

ls /lib/modules/$(uname -r)/kernel/fs

Outra fonte é a /proc/config.gzque pode estar ausente na sua distribuição (e eu sempre me pergunto "por que ?!" no caso).

poige
fonte
2
A configuração do kernel do Ubuntu está incluída, apenas em um local diferente:/boot/config-$(uname -r)
Oli
2
/proc/filesystemsnão está errado , é apenas incompleto .
Scai
3
@poige Por essa lógica, sua resposta é terrivelmente incompleta e errada também. /lib/modules/$(uname -r)/kernel/fsajudará apenas com sistemas de arquivos que foram ativados como módulos, não com os que estão embutidos no kernel. Além disso, um nome de módulo pode não corresponder ao nome do sistema de arquivos que ele fornece e um único módulo pode fornecer vários sistemas de arquivos.
Patrick Patrick
4
Esta resposta é enganosa, se um módulo não estiver carregado, o kernel simplesmente não poderá carregar esse tipo de sistema de arquivos até que ele seja. Afirmar que o kernel pode carregá-lo não está correto - você não sabe se pode até carregar o módulo com êxito. Não há nem uma garantia de que você possa carregar esse módulo.
Chris Baixo
3
@ Poige, na verdade, eu não estou negligenciando /proc/config.gznada. 1) não é garantido que existe, 2) Um nome de módulo pode não corresponder ao nome do sistema de arquivos que ele fornece e um único módulo pode fornecer vários sistemas de arquivos.
Patrick
11

/proc/filesystemslista todos os tipos de sistemas de arquivos suportados pelo kernel em execução, juntamente com os atributos do sistema de arquivos, nodevpara indicar que esse sistema de arquivos não é suportado por um dispositivo de bloco, por exemplo.

man 5 filesystems fornece informações mais detalhadas.

Chris Down
fonte
1
O que nodevsignifica o resultado quando você cat /proc/filesystems?
slm
No meu laptop Arch linux, cat /proc/filesystemslista um monte de "nodev", sistemas de arquivos obviamente para fins especiais, além de ext2, ext3, ext4. Quando olho para dentro /lib/modules/3.11.6-1-ARCH/kernel/fs, vejo vários outros, como "gorduras", "btrfs", "reiserfs", que também são sistemas de arquivos regulares em disco, mas não aparecem na /proc/filesystemlista. O que há com isso?
precisa
1
nodevindica que o sistema de arquivos em questão não é um sistema de arquivos físico que precisa de um dispositivo de bloco para viver, mas sim um sistema de arquivos virtual suportado por algo diferente de um dispositivo de bloco.
Jonathan Callen
5
@BruceEdiger: /proc/filesystemsmostra apenas os sistemas de arquivos que o kernel carregou - até você inserir esses módulos no kernel (o que geralmente acontece automaticamente quando você precisa deles), o kernel não pode suportar esses sistemas de arquivos.
Jonathan Callen
0

Acredito que isso lhe dará o que você deseja:

(cat /proc/filesystems | awk '{print $NF}' | sed '/^$/d'; ls -1 /lib/modules/$(uname -r)/kernel/fs) | sort -u

Explicação

Com base no meu melhor entendimento:

  • cat /proc/filesystems | awk '{print $NF}' | sed '/^$/d' fornece todos os sistemas de arquivos que são suportados nativamente pelo kernel (como sysfs) junto com aqueles que têm seus módulos de kernel atualmente carregados
  • ls -1 /lib/modules/$(uname -r)/kernel/fs fornece a lista de módulos de sistema de arquivos disponíveis para o seu kernel
  • sort -u classifica os resultados combinados dos dois primeiros comandos com duplicatas removidas (mostra apenas resultados exclusivos -u)

Ainda estou aprendendo linux, isso funciona no Arch linux, mas acredito que pelo menos no ubuntu você pode precisar alterar o caminho /lib/modules/$(uname -r)/kernel/fspara um diretório diferente apropriado para sua distribuição.

Chris Magnuson
fonte