/sbin/mkfs.fs age como um arquivo binário, embora seja um arquivo de link simbólico

0

Considerando a saída do comando ls :

$ ls -l /sbin/mkfs.ext4
lrwxrwxrwx 1 root root 6 Aug  4 00:10 /sbin/mkfs.ext4 -> mke2fs

$ type mkfs.ext4
mkfs.ext4 is hashed (/sbin/mkfs.ext4)

mkfs.ext4 é um link simbólico que aponta para o comando mke2fs . Nada de estranho, tudo de bom e bom. Portanto, executar mkfs.ext4 é o mesmo que executar mke2fs . Observe a chave que adicionei na saída dos comandos abaixo:

$ mke2fs
Usage: {mke2fs} [-c|-l filename] [-b block-size] [-C cluster-size]
                             --sinp--
$ mkfs.ext4
Usage: {mkfs.ext4} [-c|-l filename] [-b block-size] [-C cluster-size]
                             --sinp--

Obviamente, mke2fs usa o nome do arquivo para determinar o tipo de sistema de arquivos apropriado para fazer e até personalizar sua lista de opções:

$ ln -s /sbin/mke2fs mkmk

$ ls -l mkmk 
lrwxrwxrwx 1 direprobs direprobs 12 Aug  8 14:25 mkmk -> /sbin/mke2fs

$ ./mkmk
Usage: mkmk [-c|-l filename] [-b block-size] [-C cluster-size]
                           --sinp--

Eu criei um sistema de arquivos ext2 usando mkmk , o link simbólico que fiz com ln . O que mkmk significa para mke2fs , não deve ser nada!

Como o mke2fs usa nomes de arquivos a partir dos quais é executado para determinar o tipo de sistema de arquivos a ser produzido?

    
por direprobs 08.08.2017 / 13:45

2 respostas

4

Veja a função parse_fs_type em mke2fs.c :

  • se um tipo de sistema de arquivos for especificado explicitamente (usando -t ), use isso
  • se a ferramenta estiver rodando no Hurd, use “ext2”;
  • se o nome do programa for mke3fs , use "ext3";
  • se o nome do programa for mke4fs , use "ext4";
  • se o nome do programa começar com mkfs. , use o sufixo;
  • caso contrário, use o padrão definido em /etc/mke2fs.conf , se houver;
  • caso contrário, use "ext2", a menos que um diário esteja ativado por padrão, nesse caso use "ext3".

A string de texto resultante é usada para encontrar uma definição de sistema de arquivos em /etc/mke2fs.conf (além de “ext2”, que é tratado internamente).

Assim, seu mkmk acabaria usando o tipo de sistema de arquivos ext2.

    
por 08.08.2017 / 14:21
1
  • A opção -t define incondicionalmente o tipo de sistema de arquivos e, com essa opção, o único efeito de qualquer nome do programa é alterar o nome do programa impresso em mensagens de diagnóstico durante a execução do programa. .
  • No Hurd, o ext2 é usado como o tipo de sistema de arquivos, independentemente do nome para o qual o programa é invocado, o que afeta apenas as mensagens de diagnóstico.
  • Caso contrário, o nome base do argumento 'zeroth' do processo é verificado:
    • Se invocado com mke3fs como o nome base, criará um ext3 filesystem, com um diário como se -j tivesse sido especificado.
    • Se invocado com mke4fs como o nome base, criará um sistema de arquivos ext4 .
    • Se o nome da base começar com os 5 caracteres mkfs. , ele usará os caracteres restantes como o tipo de sistema de arquivos, incondicionalmente. Se o nome base também for mkfs.ext3 , ele criará um diário como se -j tivesse sido especificado.
    • Caso contrário, com qualquer outro nome, ele apenas age como o antigo mke2fs , pegando o tipo de sistema de arquivos do arquivo de configuração e mudando de ext2 para ext3 se a opção -j for fornecida.

A maior parte disso pode ser encontrada nos manuais mke2fs e mke2fs.conf . Veja a explicação de fs_type no último e na seção Descrição do primeiro. A única parte que falta nos manuais é que um nome não reconhecido é efetivamente mke2fs .

    
por 08.08.2017 / 14:27