Em inglês, sistema de arquivos é escrito como "filesystem" ou "file system". No
GNU/Linux, o nome filesystem serve para identificar dois conceitos distintos:
1. Chamamos de
sistema de arquivos, a estrutura lógica da árvore de diretórios. Essa estrutura é formada pela raiz do sistema, representada pelo diretório barra (/), e pelos subdiretórios abaixo dessa raiz.
A localização dos diretórios e de alguns arquivos essenciais, é definida no documento
Filesystem Hierarchy Standard (FHS). O sistema de arquivos FHS é específico das distribuições GNU/Linux que seguem o padrão LSB -
Linux Standard Base.
2. A expressão "sistema de arquivos", também se refere ao tipo de filesystem que utilizamos para formatar uma partição. Assim, são sistemas de arquivos no Linux:
- ext3;
- ext4;
- XFS;
- JFS;
- ISO9660;
- UDF;
- VFAT;
- SWAP e vários outros.
Para que um sistema de arquivos funcione no Linux, ele DEVE ser compilado junto ao KERNEL e isso pode ser feito de dois modos distintos:
- Compilação estática :: O código do filesystem é compilado junto ao código do kernel e não pode ser removido (descarregado) da memória RAM. Para atualizar esse código, é preciso recompilar o kernel todo.
- Compilação dinâmica :: O código do filesystem é compilado como um módulo do kernel, sendo carregado no momento do boot (initrd) ou a qualquer tempo, quando for necessário para efetuar a montagem de uma partição formatada com esse sistema de arquivo. Para atualizar o código do sistema de arquivos, basta recompilar o módulo. Obs.: um módulo só pode ser removido da memória se não estiver em uso!
Para saber quais sistemas de arquivos estão compilados como módulo no seu kernel, faça:
# ls /lib/modules/$(uname -r)/kernel/fs
9p befs cifs efivarfs freevxfs isofs mbcache.ko nilfs2 qnx4 sysv
adfs bfs coda efs fscache jbd2 minix nls qnx6 ubifs
affs binfmt_misc.ko configfs exofs fuse jffs2 ncpfs ntfs quota udf
afs btrfs cramfs ext4 gfs2 jfs nfs ocfs2 reiserfs ufs
aufs cachefiles dlm f2fs hfs lockd nfs_common omfs romfs xfs
autofs4 ceph ecryptfs fat hfsplus logfs nfsd pstore squashfs
A lista a seguir, mostra os sistemas de arquivo EM USO (carregados na memória RAM):
# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev pipefs
nodev anon_inodefs
nodev devpts
nodev hugetlbfs
nodev pstore
nodev mqueue
ext3
ext2
ext4
vfat
Sistemas de arquivos marcados como
nodev, são virtuais e NÃO podem ser associados a um dispositivo de bloco.
Um dispositivo de bloco é (tipicamente) um disco rígido ou outro dispositivo, que se comporta como um disco rígido por emulação como: CD, DVD, pendrive ou
/dev/loop. Dispositivos de bloco normalmente são montados (mount) para serem utilizados.
Na verdade, alguns dos sistemas listados anteriormente, não são sistemas de arquivos verdadeiros, mas subsistemas do kernel implementados na forma de sistemas de arquivos.
Os sistemas
procfs e
sysfs são exemplos de sistemas de arquivos virtuais, que veremos adiante.