Por que o sistema de arquivos do Linux é projetado como uma árvore de diretórios única?

90

Alguém pode explicar por que o Linux é projetado como uma árvore de diretórios única?

Considerando que, no Windows, podemos ter várias unidades, como C:\ e D:\ , há uma única raiz no Unix. Alguma razão específica aí?

    
por user2720323 07.10.2013 / 18:51

12 respostas

191

Como o sistema de arquivos Unix é anterior ao Windows por muitos anos, pode-se reescrever a pergunta "por que o Windows usa um designador separado para cada dispositivo?".

Um sistema de arquivos hierárquico tem a vantagem de que qualquer arquivo ou diretório pode ser encontrado como um filho do diretório raiz. Se você precisar mover dados para um novo dispositivo ou um dispositivo de rede, o local no sistema de arquivos poderá permanecer o mesmo e o aplicativo não verá a diferença.

Suponha que você tenha um sistema em que o sistema operacional seja estático e que exista um aplicativo com altos requisitos de E / S. Você pode montar / usr somente leitura e colocar / opt (se o aplicativo estiver lá) em unidades SSD. A hierarquia do sistema de arquivos não muda. No Windows isso é muito mais difícil, especialmente com aplicativos que insistem em viver em C: \ Program Files \

    
por 07.10.2013 / 19:17
87

Isto é em parte por razões históricas, e em parte porque faz mais sentido desta maneira.

Multics

Multics foi o primeiro sistema operacional a introduzir o sistema de arquivos hierárquico como o conhecemos hoje, com diretórios que podem conter diretórios. Citando “Um sistema de arquivos de uso geral para armazenamento secundário” da R.C. Daley e P.G. Neumann:

Section 2 of the paper presents the hierarchical structure of files, which permits flexible use of the system. This structure contains sufficient capabilities to assure versatility. (…)

For ease of understanding, the file structure may be thought of as a tree of files, some of which are directories. That is, with one exception, each file (e.g., each directory) finds itself directly pointed to by exactly one branch in exactly one directory. The exception is the root directory, or root, at the root of the tree. Although it is not explicitly pointed to from any directory, the root is implicitly pointed to by a fictitious branch which is known to the file system. (…)

At any one time, a user is considered to be operating in some one directory, called his working directory. He may access a file effectively pointed to by an entry in his working directory simply by specifying the entry name. More than one user may have the same working directory at one time.

Como em muitos outros aspectos, a Multics buscou flexibilidade. Os usuários podem trabalhar em uma subárvore do sistema de arquivos e ignorar o resto, e ainda se beneficiar de diretórios para organizar seus arquivos. Os diretórios também eram usados para controle de acesso - o atributo READ permitia que os usuários listassem os arquivos em um diretório, e o atributo EXECUTE permitia que os usuários acessassem arquivos nesse diretório (como muitos outros recursos, viviam no unix).

As Multics também seguiram o princípio de ter um único pool de armazenamento. O papel não se debruça sobre este aspecto. Um único pool de armazenamento era compatível com o hardware da época: não havia dispositivos de armazenamento removíveis, pelo menos nenhum que os usuários se importassem. As Multics tinham um pool de armazenamento de backup separado, mas isso era transparente para os usuários.

Unix

O Unix foi muito inspirado pela Multics, mas visava a simplicidade, enquanto o Multics visava a flexibilidade.

Um único sistema de arquivos hierárquico é adequado para o Unix. Como com as Multics, os pools de armazenamento geralmente não eram relevantes para os usuários. No entanto, havia dispositivos removíveis e o Unix os expôs aos usuários por meio do mount e comandos umount (reservado para o “superusuário”, ou seja, o administrador). Em “Sistema de Compartilhamento de Tempo do UNIX” , Dennis Ritchie e Ken Thompson explicam:

Although the root of the file system is always stored on the same device, it is not necessary that the entire file system hierarchy reside on this device. There is a mount system request with two arguments: the name of an existing ordinary file, and the name of a special file whose associated storage volume (e.g., a disk pack) should have the structure of an independent file system containing its own directory hierarchy. The effect of mount is to cause references to the heretofore ordinary file to refer instead to the root directory of the file system on the removable volume. In effect, mount replaces a leaf of the hierarchy tree (the ordinary file) by a whole new subtree (the hierarchy stored on the removable volume). After the mount, there is virtually no distinction between files on the removable volume and those in the permanent file system. In our installation, for example, the root directory resides on a small partition of one of our disk drives, while the other drive, which contains the user's files, is mounted by the system initialization sequence. A mountable file system is generated by writing on its corresponding special file. A utility program is available to create an empty file system, or one may simply copy an existing file system.

O sistema de arquivos hierárquico também tem a vantagem de concentrar a complexidade do gerenciamento de vários dispositivos de armazenamento no kernel. Isso significava que o kernel era mais complexo, mas todos os aplicativos eram mais simples como resultado. Como o kernel precisa se preocupar com dispositivos de hardware, mas a maioria dos aplicativos não, esse é um design mais natural.

Windows

O Windows rastreia sua ascendência de volta para duas linhagens: VMS , um sistema operacional originalmente projetado para o VAX minicomputador e CP / M , um sistema operacional projetado para os primeiros microcomputadores da Intel.

O VMS tinha um sistema de arquivos hierárquico distribuído, Files-11 . Nos Arquivos-11, o caminho completo para um arquivo contém um nome de nó, uma designação de conta nesse nó , um nome de dispositivo, um caminho de árvore de diretórios, um nome de arquivo, um tipo de arquivo e um número de versão. O VMS tinha um poderoso recurso nome lógico , permitindo que os atalhos fossem definidos em diretórios específicos, para que os usuários raramente precisassem se preocupam com a localização “real” de um diretório.

O CP / M foi projetado para computadores com 64kB de RAM e uma unidade de disquete, por isso optou pela simplicidade. Não havia diretórios, mas uma referência de arquivo poderia incluir uma indicação de unidade ( A: ou B: ).

Quando MS-DOS 2.0 introduzia diretórios, ele fazia isso com uma sintaxe compatível com o MS-DOS 1 que seguiu o CP / M. Então, os caminhos estavam enraizados em uma unidade com um nome de uma única letra. (Além disso, o caractere de barra / foi usado no VMS e CP / M para iniciar opções de linha de comando, portanto, um caractere diferente tinha que ser usado como um separador de diretório. É por isso que o DOS e o Windows posterior usam barra invertida, embora alguns componentes internos também suporta slash).

O Windows manteve a compatibilidade com o DOS e a abordagem do VMS, de modo que manteve a noção de letras de unidade mesmo quando se tornaram menos relevantes. Hoje, sob o capô, o Windows usa caminhos UNC ( originalmente desenvolvido pela Microsoft e pela IBM para OS / 2 , de ancestralidade relacionada). Embora isso seja reservado para usuários avançados (provavelmente devido ao peso do histórico), o Windows permite a montagem por meio de pontos de nova análise .

    
por 08.10.2013 / 02:58
36

Não há preocupações de segurança por trás de uma única árvore de diretórios.

Os caras que projetaram o Unix tinham um monte de experiência com sistemas operacionais que exigiam que os usuários soubessem qual dispositivo físico continha um determinado recurso. Como parte do propósito de um sistema operacional é criar uma máquina abstrata sobre hardware real, eles acharam muito mais simples dispensar o endereçamento de recursos por sua localização física e decidiram colocar tudo em uma única árvore de nomes.

Esta é apenas uma parte do gênio por trás do design do Unix .

    
por 07.10.2013 / 19:09
28

Observe que os nomes das letras das unidades do MS-DOS, que persistem no Windows moderno, são uma exceção aqui. Os nomes das letras de unidade não são a melhor representação de uma estrutura de sistema de arquivos que possui várias raízes. Eles são uma implementação palha de tal sistema.

Um sistema de arquivos corretamente implementado que suporta múltiplas raízes permitiria nomeação arbitrária para os volumes, como dvdrom:/path/to/file.avi . Tal como o sistema iria se livrar dos problemas de interface de usuário risível que infestam o Windows. Por exemplo, se você conectar um dispositivo como uma câmera, a interface do Windows Explorer fará com que você acredite que existe um dispositivo chamado Câmera (ou qualquer outro) e que você tenha um caminho como Computer\Camera\DCIM\... . No entanto, se você recortar e colar a versão textual desse caminho para fora do Explorer, isso não funcionará porque alguns dos componentes do nome do caminho são uma ficção de interface do usuário, desconhecida do sistema operacional subjacente. Em um sistema implementado corretamente com várias raízes, seria ótimo: haveria um caminho camera:\DCIM\... que é reconhecido uniformemente em todos os níveis do sistema. Além disso, se você portar sobre um disco rígido antigo de um PC antigo, você não ficaria com algum nome de letra de unidade como F: , mas sim seria capaz de nomeá-lo como quiser, como old-disk: .

Assim, se o Unix tiver várias raízes na estrutura do sistema de arquivos, isso seria feito da mesma forma, e não como no MS-DOS e no Windows com nomes de unidade de uma letra. Em outras palavras, vamos apenas comparar o esquema Unix com um bom design multi-raiz.

Então, por que o Unix não possui uma implementação sã de múltiplas raízes, em favor de uma implementação sã de raiz única? É provavelmente apenas por simplicidade. Os pontos de montagem fornecem toda a funcionalidade de poder acessar volumes por meio de nomes. Não há necessidade de estender o namespace com uma sintaxe de prefixo adicional.

Matematicamente falando, qualquer gráfico de árvore disjunto ("floresta") pode ser unido adicionando um nó raiz e tornando as partes separadas seus filhos.

Além disso, é mais flexível que os volumes não precisem estar no nível raiz. Como não há sintaxe especial que denota volume (é apenas um componente de caminho), os pontos de montagem podem estar em qualquer lugar. Se você trouxer três discos antigos para sua máquina, poderá tê-los como /old-disk/one , /old-disk/two , etc. Você pode organizar discos da maneira que quiser, da maneira como organiza arquivos e diretórios.

Os aplicativos podem ser gravados, os quais dependem dos caminhos, e a validade dos caminhos pode ser mantida quando os dispositivos de armazenamento são reconfigurados. Por exemplo, os aplicativos podem usar caminhos conhecidos como /var/log e /var/lib . Cabe a você se /var/log e /var/lib estão no mesmo volume de disco ou em volumes separados. Você pode migrar um sistema para uma nova topologia de armazenamento, preservando os caminhos.

Os pontos de montagem são uma boa ideia, e é por isso que o Windows os usa desde o Windows 2000.

Volume mount points are robust against system changes that occur when devices are added or removed from a computer. Microsoft Technet

    
por 07.10.2013 / 22:04
13

O * nix e o Windows montam suas unidades. No Windows, eles são montados automaticamente em pontos de montagem que, por padrão, estão em ordem alfabética crescente. Esses padrões são:

  • A: e B: = > disquetes
  • C: = > primeira partição do primeiro disco rígido
  • D: = > próxima partição ou próximo disco rígido ou unidade de CD / DVD, se nenhuma outra partição estiver presente.

Cada um desses pontos de montagem é um diretório.

No * nix, os pontos de montagem são decididos pelo usuário. Por exemplo, tenho uma partição montada como / e outra como /home . Portanto, /home é uma unidade separada, seria equivalente a E: no Windows.

Em ambos os casos, Windows e * nix, os pontos de montagem são diretórios separados. A única diferença é que no * nix, esses diretórios separados são subdiretórios de / , de C: enquanto no Windows, cada ponto de montagem é montado diretamente sob o / , sob My Computer digamos.

Do ponto de vista do usuário, a principal vantagem é que as montagens são completamente transparentes. Eu não preciso saber que o diretório /home está realmente em uma partição separada. Eu posso apenas usá-lo como um diretório normal. Em vez disso, no DOS, eu teria que chamá-lo explicitamente pelo nome do ponto de montagem, digamos E:\home

As unidades externas são montadas praticamente da mesma maneira em ambos os sistemas. Diga D: para o Windows e /mnt/cdrom para o Linux. Cada um desses é um diretório, eu realmente não vejo a diferença. Quando você coloca um CDROM em sua unidade no Windows, o disco é montado em D: como no Linux.

    
por 07.10.2013 / 19:16
10

Concordo com as respostas acima, especialmente a resposta de Doug O'Neal, mas acho que todas elas perdem um pouco, assim como os pontos de montagem explícitos do dispositivo, como MS-DOS "C:" ou "A:".

Rob Pike escreveu O Nome Hediondo sobre a sintaxe dos nomes, mas Russ Cox abaixou :

Name spaces... are most powerful when new semantics can be added without adding new syntax.

Um espaço de nome único onde os dispositivos podem ser montados arbitrariamente permite operações realmente flexíveis. Eu uso regularmente /mnt/sdb1 e /mnt/cdrom para colocar temporariamente um disco ou CD não utilizado no sistema de arquivos geral. Não é incomum ter diretórios pessoais em um servidor NFS, para que, não importa em qual máquina você efetue login, você obtenha o mesmo $HOME em todos os lugares.

Tudo se resume a isto: ter uma sintaxe especial para coisas especiais coloca limites definidos sobre o que você pode fazer. Se você puder montar apenas um disco ou CD ou DVD não utilizado, ou um sistema de arquivos de rede / "compartilhamento" em "E:" ou "W:" ou qualquer outra coisa, você terá muito menos flexibilidade.

    
por 07.10.2013 / 19:34
5

Isso é bobo. O Windows também possui um único ponto de hierarquia. Mas está oculto e não padronizado. Como a maioria das coisas windows.

Nesse caso, é o conceito "Meu computador". Isso é o equivalente a root (/) no Unix. Lembre-se que root é um conceito que existe no kernel. voce gosta ou nao. Assim como as janelas tratam o "Meu Computador". Claro, você pode montar uma partição no root no unix, e é isso que a maioria das pessoas faz. E muitas coisas vão olhar para um caminho específico para coisas (por exemplo, / etc /), mas você não está limitado por isso. Por todos os meios, monte suas unidades em / C: /. você não está proibido de fazer isso em unix.

C: \ não é uma raiz no Windows, é o ponto de montagem de uma partição. Que deve estar no nível superior "Meu Computador". Enquanto no unix você pode montar uma partição sob qualquer outra árvore. Então linux você pode ter C: montado em / enquanto você tem D: montado em /mnt/d/ ... ou até mesmo montado em / mas isso é complicado e depende de como os dois sistemas de arquivos se comportam quando são montados no topo de um caminho já montado.

Assim, você pode obter exatamente o mesmo que você tem com o Windows "forçando" você mesmo a seguir as mesmas janelas de limitações impostas aleatoriamente em você.

/ (treat this as "My Computer")
/c/ (mount your first data partition here)
/d/ (mount your second data partition here)

Então você teria que passar nas opções de montagem nas opções de inicialização. já que você não terá um / etc / ... mas isso também está simulando as limitações que as janelas impõem, como o que ele faz.

    
por 08.10.2013 / 00:44
5

A razão para o Windows ter letras de unidade provavelmente vai além da Microsoft e do DOS. A atribuição de cartas a unidades removíveis era comum em sistemas IBM, portanto, a Microsoft pode estar apenas agindo de acordo com as instruções da IBM, copiando o CP / M. E inicialmente, o DOS não tinha diretórios de qualquer maneira.

Quando o MS-DOS é executado em computadores com um ou dois discos removíveis e sem mídia fixa, você realmente não precisa de um sistema de arquivos com diretórios. Com um, ou talvez dois, discos de 180 kilobyte, você nunca teve arquivos suficientes para ter muita dificuldade em organizá-los.

link

    
por 08.10.2013 / 03:03
4

Na verdade, o Linux é baseado no Unix (ou é Unix, veja discussão ) e Unix vem do ambiente de mainframe, onde o uso de vários dispositivos era bastante óbvio. Montar dispositivos em uma única árvore de diretórios oferece flexibilidade máxima e não limita o número de dispositivos que o sistema operacional pode acessar.

Por outro lado, as letras do DOS para unidades são um bom design para um PC com 1 ou 2 estações de disquete e unidade de disco único. O grande disquete 5,25 'é sempre A :, o pequeno 3,5' é sempre B: e o disco rígido é sempre C :. Você sempre sabe se copia um arquivo para o disquete ou para algum lugar no disco. Você não precisa de flexibilidade se não puder conectar fisicamente mais de 2 unidades de disquete e 2 (ou 4) discos rígidos.

O design do DOS foi mais amigável ao usuário final, enquanto o design do Unix é amigável ao administrador. Agora letras de unidade são um fardo para o Windows, os usuários mais dependem de abrir automaticamente a janela do explorador com conteúdo de unidade removível do que saber sua carta ... O Ubuntu faz o mesmo, na verdade.

    
por 08.10.2013 / 08:41
1

Isso não é verdade, na verdade. Windows usa outro esquema de caminhos (bem, não é o mesmo)

"Cartas de unidade" são apenas algo para lembrar facilmente de caminhos, discos e partições.

Os caminhos ARC definem o caminho de um arquivo nas janelas (mas são visíveis para o usuário apenas na inicialização):

link

link

No Windows NT, não há relação entre discos, partições e letras unitárias: você pode "colocar" um volume inteiro em uma pasta (por exemplo, c: \ myseconddisk pode ser um disco físico inteiro!)

    
por 08.10.2013 / 09:08
0

Duas coisas que gostaria de salientar -

  1. Discos rígidos no linux são, de certo modo, letras / nomes atribuídos, como / dev / sdb1. Mas eles podem ser montados em qualquer lugar para serem alcançados a partir da estrutura única / raiz
  2. O motivo mais comum pelo qual as pessoas (inclusive eu) tinham unidades separadas no Windows era ter um lugar para guardar documentos, músicas, programas, etc., para que, quando o Windows, inevitavelmente precisasse ser reinstalado ou substituído, fosse o upgrade ou vírus ou falha no sistema de arquivos, ainda havia acesso a esses arquivos. Eu não tenho esse problema no linux - o sistema de arquivos é muito mais confiável, o SO não quebra a menos por alguma ação direta ou erro da minha parte (ooh! Um repositório de ponta sangrenta, vamos tentar isso!), E atualizações são muito mais simples. E, no caso raro, eu tive que reinstalar, já que todo o software estava disponível através de repos ou ppa's que eu adicionei (e eu poderia facilmente copiar meu diretório home com um live disk), começando do zero e voltando para onde eu Foram necessárias apenas algumas horas versus dias de pesquisa de novos instaladores e / ou chaves de CD antigas ao restaurar meus programas no Windows.
por 08.10.2013 / 14:49
0

Se você olhar para trás no histórico, também poderá ver que o Unix começou na época de sistemas de fita de 8 trilhas para sistemas de dados IBM de áudio e 9 trilhas (8 trilhas / 8 bits para dados, um para paridade). Tecnicamente muito parecido.

Nesse momento, as informações sobre a localização dos arquivos foram armazenadas em partes da informação em fita e para frente e para trás definidas quando você lê dados da fita (como um arquivo, com a posição inicial e assinatura final); Ele explica também por que você não tinha apenas um FAT no início do disco - você tinha vários para acelerar a pesquisa. E se você tivesse várias unidades, elas seriam vinculadas dentro de / dev e via o endereço do arquivo que você moveu entre os dispositivos.

Eu acredito que você poderia ter a opinião de que isso começou apenas mais cedo e que a decisão por trás da área do MS DOS (CP / M) e posterior do Windows NT está simplesmente relacionada às letras de unidade mainframe da VM, em vez de um único ponto de entrada. vez que parecia mais moderno, as quantidades de dados de hoje não existiam e eles não achavam que você acabaria por não ter letras de unidade suficientes ou que seria muito confuso.

9-Track-Drive e Atribuição de letra do Drive

    
por 09.10.2013 / 18:02