File systems (Português)
Do Wikipédia:
- Na computação, um sistema de arquivos (em inglês, "file system" or "filesystem") controla como os dados são armazenados e recuperados. Sem um sistema de arquivos, as informações colocadas em uma mídia de armazenamento seriam um grande corpo de dados, sem nenhuma maneira de saber onde uma informação é interrompida e a próxima começa. Ao separar os dados em partes e dar um nome a cada parte, as informações são facilmente isoladas e identificadas. Tomando seu nome da maneira como os sistemas de informação em papel são nomeados, cada grupo de dados é chamado de "arquivo". A estrutura e as regras lógicas usadas para gerenciar os grupos de informações e seus nomes são chamadas de "sistema de arquivos".
Partições de unidades individuais podem ser configuradas usando um dos muitos sistemas de arquivos disponíveis diferentes. Cada um tem suas próprias vantagens, desvantagens e idiossincrasias únicas. Uma breve visão geral dos sistemas de arquivos suportados segue; os links são para páginas da Wikipédia que fornecem muito mais informações.
Tipos de sistemas de arquivos
Veja filesystems(5) para uma visão geral e Wikipedia:Comparison of file systems para uma comparação detalhada das funcionalidades. Sistemas de arquivos suportados pelo kernel estão listados em /proc/filesystems
.
Sistema de arquivos | Comando de criação | Conjunto de patches para o kernel | Utilitários do userspace | Notas |
---|---|---|---|---|
APFS | mkapfs(8) | linux-apfs-dkms-gitAUR[link quebrado: package not found] | apfsprogs-gitAUR | sistema de arquivos do macOS (10.13 e posterior). Somente leitura, experimental. |
Bcachefs | bcachefs(8) | linux-bcachefs-gitAUR | bcachefs-tools-gitAUR | |
Reiser4 | mkfs.reiser4(8) | reiser4progsAUR | ||
ZFS | zfs-linuxAUR, zfs-dkmsAUR | zfs-utilsAUR | porte, OpenZFS |
Journaling
Todos os sistemas de arquivos acima, com exceção do exFAT, ext2, FAT16/32, Reiser4 (opcional), Btrfs e ZFS, usam journaling. O journaling fornece resiliência a falhas registrando as alterações antes que elas sejam confirmadas no sistema de arquivos. No caso de uma falha no sistema ou falha de energia, esses sistemas de arquivos são mais rápidos para voltar a ficar online e menos propensos a serem corrompidos. O registro ocorre em uma área dedicada do sistema de arquivos.
Nem todas as técnicas de journaling são iguais. Ext3 e ext4 oferecem journaling de modo de dados, que registra dados e metadados, além da possibilidade de registrar apenas alterações de metadados. O journaling em modo de dados tem uma penalidade de velocidade e não é ativado por padrão. Na mesma linha, o Reiser4 oferece os chamados "modelos de transação" que não apenas alteram os recursos que oferecem, mas também em seu modo de journaling. Ele usa diferentes técnicas de journaling: um modelo especial chamado logs errantes que elimina a necessidade de gravar no disco duas vezes write-anywhere—uma abordagem pura de copiar-ao-gravar (principalmente equivalente ao padrão do btrfs, mas com um design de "árvore" fundamentalmente diferente) e uma abordagem combinada chamada hybrid que alterna heuristicamente entre as duas anteriores.
Os outros sistemas de arquivos fornecem journaling em modo ordenado, que registra apenas metadados. Embora todo o journaling retorne um sistema de arquivos a um estado válido após uma falha, o journaling no modo de dados oferece a maior proteção contra corrupção e perda de dados. Há um comprometimento no desempenho do sistema, no entanto, porque o journaling no modo de dados realiza duas operações de gravação: primeiro no journal e depois no disco (que o Reiser4 evita com o recurso "registros errantes"). A troca entre velocidade e dados do sistema segurança deve ser considerada ao escolher o tipo de sistema de arquivos Reiser4 é o único sistema de arquivos que, por padrão, opera com atomicidade total e também fornece somas de verificação para metadados e dados em linha (as operações ocorrem inteiramente, ou não e não corrompem ou destroem completamente) dados devido a operações que ocorrem pela metade) e, por design, são muito menos propensos à perda de dados do que outros sistemas de arquivos como Btrfs.
Os sistemas de arquivos baseados na cópia na gravação (também conhecidos como gravação em qualquer lugar), como Reiser4, Btrfs e ZFS, não precisam usar o journal tradicional para proteger os metadados, porque eles nunca são atualizados no local. Embora o Btrfs ainda tenha uma árvore de logs semelhante a um diário, ele é usado apenas para acelerar o fdatasync/fsync.
Sistema de arquivos baseados em FUSE
Veja FUSE.
Sistemas de arquivos empilháveis
- eCryptfs — O sistema de arquivos empresárial criptográfico é um pacote de encriptação de disco para Linux. É implementado com uma camada de encriptação no nível do sistema de arquivos e compátivel com POSIX, propondo funcionalidade similar ao GnuPG a nível do sistema operacional.
- mergerfs — Um sistema de arquivos de união baseado no FUSE.
- mhddfs — Sistema de arquivos de união FUSE para múltiplos HDDs.
- http://mhddfs.uvw.ru || mhddfsAUR
- overlayfs — OverlayFS é um serviço de sistema de arquivos que implementa uma montagem de união para outros sistemas de arquivos.
- Unionfs — Unionfs é um serviço de sistema de arquivos para Linux, FreeBSD e NetBSD que implementa uma união para outros sistemas de arquivos.
- https://unionfs.filesystems.org/ || not packaged? search in AUR
- unionfs-fuse — Uma implementação do Unionfs para o userspace.
Sistema de arquivos somente leitura
- EROFS — O Enhanced Read-Only File System é um sistema de arquivos somente leitura leve, que visa melhorar o desempenho e compactar a capacidade de armazenamento.
- SquashFS — SquashFS é um sistema de arquivos compactado somente leitura. SquashFS compacta arquivos, inodes e diretórios, suporta tamanhos de blocos até 1 MB para maior compactação.
Sistemas de arquivos em cluster
- Ceph — Unificado, distribuído sistema de armazenamento feito para excelente desempenho, confiabilidade e escabilidade.
- https://ceph.com/ || cephAUR
- Glusterfs — Sistema de arquivos de cluster capaz de ecalar para vários peta-bytes.
- IPFS — Um protocolo de hipermídia ponto a ponto para fazer a web mais rápida, segura e aberta. IPFS aims replace HTTP and build a better web for all of us. Usa blocos para guardar partes de um arquivos, cada célula de rede guarda somente o conteúdo que é do seu interesse, oferece desduplicação, distribuição, sistema escalável limitado somente pelos usuários. (atualmente em alpha)
- https://ipfs.io/ || go-ipfs[link quebrado: replaced by kubo]
- MooseFS — MooseFS é sistema de arquivos tolerante a falhas, alta disponibilidade e de alto desempenho distribuído em rede.
- OpenAFS — Implementação de código aberto do sistema de arquivos distribuído AFS
- OrangeFS — OrangeFS é um sistema de arquivos de rede em expansão feito para transparentemente acessar discos de armazenamento baseado em multiplos servidores, em paralelo. Tem suporte otimizado MPI-IO para aplicações paralelas e distribuídas. Simplifica o uso de armazenamento paraleo não somente para clientes Linux como também para Windows, Hadoop, e WebHAV. Compátivel com POSIX. Parte do Linux desde a versão 4.6.
- https://www.orangefs.org/ || not packaged? search in AUR
- Sheepdog — Sistema de armazenamento de objetos distribuído para serviços de volume e container e gerencia os discos e células de forma inteligente.
- Tahoe-LAFS — Tahoe Least-Authority Filesystem é um sistema de arquivos distribuído grátis e aberto, seguro, descentralizado, tolerante a falhas e banco de dados ponto a ponto.
Identificando sistemas de arquivos existentes
Para identificar sistemas de arquivos existentes, você pode usar o lsblk:
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sdb └─sdb1 vfat Transcend 4A3C-A9E9
Um sistema de arquivos existente, se presente, vai ser mostrado na coluna FSTYPE
. Se montado, vai aparecer na coluna MOUNTPOINT
.
Criar um sistema de arquivos
Sistemas de arquivo são normalmente criados em uma partição, dentro de containers lógicos como LVM, RAID e dm-crypt, ou em um arquivo normal (veja Wikipedia:Loop device). Esta seção descreve o caso da partição.
- Depois de criar o novo sistema de arquivos, dados antes presentes nesta partição podem não ser mais recuperados. faça um backup de quaisquer dados que você deseja manter.
- O propósito de dada partição pode restringir a escolha do sistema de arquivos. Por exemplo, uma partição de sistema EFI deve ter um sistema de arquivos FAT32, e o sistema de arquivo do diretório
/boot
deve ser suportado pelo gerenciador de boot.
Antes de continuar, identifique o dispositivo onde o sistema de arquivos vai ser criado e se ele está ou não montado. Por exemplo:
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 C4DA-2C4D ├─sda2 ext4 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 /mnt └─sda3 56adc99b-a61e-46af-aab7-a6d07e504652
Sistemas de arquivos montados devem ser desmontados antes de proceder. No exemplo acima um sistema de arquivo existente no /dev/sda2
está montado em /mnt
. Este deve ser desmontado com:
# umount /dev/sda2
Para achar somente os sistemas de arquivos montados, veja #Listar sistemas de arquivos montados.
Para criar um novo sistema de arquivos, use o mkfs(8). Veja #Tipos de sistemas de arquivos para o exato tipo, e também os utilitários do userspace que você pode instalar para um sistema de arquivos particular.
Por exemplo, para criar um novo sistema de arquivos do tipo ext4 (comum para partições de dados no Linux) no /dev/sda1
, rode:
# mkfs.ext4 /dev/sda1
- Use a opção
-L
do mkfs.ext4 para especificar um rotúlo (label) sistema de arquivos. e2label pode ser usado para mudar o rotúlo de um sistema de arquivos existente. - Sistemas de arquivos podem ser redimensionados depois da criação, no entanto, podem existir com certas limitações. Por exemplo, o tamanho do sistema de arquivos XFS pode ser aumentado, mas não reduzido. Veja Wikipedia:Comparison of file systems#Resize capabilities e a documentação do respectivo sistema de arquivos para detalhes.
O novo sistema de arquivos pode ser montado para um diretório de escolha.
Montar um sistema de arquivos
Para manualmente montar um sistema de arquivos localizado em um dispositivo (exemplo, uma partição) para um diretório, use mount(8). Este exemplo monta /dev/sda1
no /mnt
.
# mount /dev/sda1 /mnt
Isto liga o sistema de arquivos em /dev/sda1
para o diretório /mnt
, fazendo seu conteúdo visível. Quaisquer dados que existiam no /mnt
antes desta ação ficam invisíveis até que o dispositivo seja desmontado.
O fstab contém informações de como dispositivos devem ser automaticamente montados, se presentes. Veja o artigo do fstab para mais informações de como modificar este comportamento.
Se um dispositivo é especificado no /etc/fstab
e somente o dispositivo ou ponto de montagem é dado na linha de comando, a informação presente no fstab vai ser usada para a montagem. Por exemplo, se o /etc/fstab
contém uma linha indicando que /dev/sda1
deveria ser montado para /mnt
, então o seguinte vai automaticamente montar o dispositivo para este diretório:
# mount /dev/sda1
Ou
# mount /mnt
mount contém algumas opções, muitas destas dependem do sistema de arquivos especificado. As opções podem ser mudadas, ao:
- usar opções na linha de comando com mount
- editando o fstab
- criando regras do udev
- compilando o kernel você mesmo
- ou usando scripts para montagem de um sistema de arquivos específico (localizado em
/usr/bin/mount.*
).
Veja estes artigos relacionados e o artigo do sistema de arquivos de interesse para mais informações.
/run/media/system/identificador_do_dispositivo/
. Isto permite facilmente montar um sistema de arquivos sem ter de decidir onde montá-lo. Veja systemd-mount(1) para modo de uso e mais detalhes.Listar sistemas de arquivos montados
Para listar todos os sistemas de arquivos montados, use findmnt(8):
$ findmnt
findmnt recebe uma variedade de argumentos que podem filtrar a saída e mostra informações adicionais. Por exemplo, é possível receber um dispositivo ou ponto de montagem como um argumento para somente mostrar informações sobre ele:
$ findmnt /dev/sda1
findmnt coleta informações do /etc/fstab
, /etc/mtab
, e /proc/self/mounts
.
Desmontar um sistema de arquivos
Para desmontar um sistema de arquivos, use umount(8). O dispositivo que contém o sistema de arquivos (exemplo, /dev/sda1
) ou o ponto de montagem (exemplo, /mnt
) deve ser especificado:
# umount /dev/sda1
ou
# umount /mnt