Skip to main content

104.1 Criar partição e Sistema de arquivos



Em qualquer sistema operacional, um disco precisa ser particionado antes de ser usado. Uma partição é um subconjunto lógico do disco físico e as informações sobre as partições são armazenadas em uma tabela de partição. Esta tabela inclui informações sobre o primeiro e o último setores da partição e seu tipo, e mais detalhes sobre cada partição.

Normalmente, cada partição é vista por um sistema operacional como um “disco” separado, mesmo se todas residirem na mesma mídia física. No Linux, cada partição é atribuída a um diretório em /dev, como /dev/sda1 ou /dev/sda2.


Para um sistema já particionado, você pode ver todas as partições do sistema em /proc/partitions.

$ cat /proc/partitions 
major minor #blocks name

8 0 976762584 sda
8 1 976760832 sda1
8 16 117227520 sdb
8 17 98318 sdb1
8 18 16384 sdb2
8 19 116582944 sdb3
8 20 523334 sdb4
8 32 937692504 sdc
8 33 7999488 sdc1
8 34 19999744 sdc2
8 35 250000384 sdc3
8 36 149999616 sdc4
8 37 157286400 sdc5
8 38 352404480 sdc6
8 48 976762584 sdd
8 49 488186584 sdd1
8 50 488574976 sdd2

# O número MAJOR corresponde ao tipo de dispositivo (ou driver) e pode ser encontrado em /proc/devices. Neste caso, 8 corresponde a sd (3 corresponde a IDE). O número principal determina o driver de dispositivo a ser usado com este dispositivo.

# O número MINOR é uma identificação única de uma instância desse tipo de dispositivo. O arquivo devices.txt na árvore do kernel contém uma lista completa dos números principais e secundários.

# BLOCKS - Lista o número de blocos de disco físico contidos em uma partição específica.

# NAME - O nome da partição.


FDISK


O utilitário padrão para gerenciar partições MBR no Linux é fdisk, mas ele teve uma atualização que lhe permite trabalhar com GPT também.

Opções do FDISKDescrição
mAbre a ajuda.
nCria uma nova partição.
pPartição primária.
ePartição extendida.
+NYN=Tamanho da partição e Y letra que representa a unidade (K,M,G,T,P).
FMostra o espaço vazio não alocado.
gCria uma nova tabela do tipo GPT.
oCria uma nova tabela do tipo DOS/MBR.
wEscreve as alterações no disco e sai.
qSai sem salvar as alterações.
ddeleta uma partição.
lLista os tipos de partição conhecida (Flag para FileSystem).
iInformações das partições.
tMuda o tipo de partição (Flag para FileSystem).
pMostra a tabela de partições

Vamos brincar um pouco, vamos editar o segundo disco da máquina:

$ sudo fdisk /dev/vdb

# Aperte 'n' para criar uma nova partição:
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)

# Selecione a opção primária:
Select (default p): p

# Selecione qual o número da partição:
Partition number (1-4, default 1): 1

# O próprio fdisk vai determinar o setor inicial, pode dar enter:
First sector (2048-41943039, default 2048):

# Escolha o tamanho de 2GB (+2G)
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): +2G

# Perceba que ele já atribui o tipo da partição como Linux (code 83)
Created a new partition 1 of type 'Linux' and of size 2 GiB.

# Agora aperta 'w' para salvar e sair:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Usando a opção 'p':

Command (m for help): p
Disk /dev/vdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x984b142c

Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 4196351 4194304 2G 83 Linux

# Device
O dispositivo atribuído à partição.

# Boot
Mostra se a partição é “inicializável” ou não.

# Start
O setor onde a partição começa.

# End
O setor onde termina a partição.

# Sectors
O número total de setores na partição. Multiplique pelo tamanho do setor para obter o tamanho da partição em bytes.

# Size
O tamanho da partição em formato “legível por humanos”. No exemplo acima, os valores estão em gigabytes.

# Id
O valor numérico que representa o tipo de partição.

# Type
A descrição do tipo de partição.

As partições lógicas ficam sempre na ordem.



GDISK


O utilitário gdisk é equivalente a fdisk quando se lida com discos particionados por GPT. Na verdade, a interface é modelada após fdisk, com um prompt interativo e os mesmos (ou muito semelhantes) comandos. Foi desenvolvido para trabalhar com GPT e por isso não possui suporte a MBR.


OpçõesDescrição
bFaz backup dos dados GPT em um arquivo
cMudar o nome de uma partição
dDeleta uma partição
iMostra informações detalhadas sobre uma partição
lLista os tipos de partição conhecidos
nCria uma nova partição
oCriar uma nova tabela de partição GUID vazia (GPT)
pImprimir a tabela de partição
qSair sem salvar as alterações
wSalva e sai
tMuda o código de tipo de partição
vVerificar disco
?Exibe ajuda

Para editar um disco a usabilidade é identifca ao fdisk, até mesmo algumas opções são iguais.



FileSystems


Particionar o disco é apenas o primeiro passo para poder usar um disco. Depois disso, você precisará formatar a partição com um sistema de arquivos antes de usá-lo para armazenar dados.


Um sistema de arquivos controla como os dados são armazenados e acessados no disco. O Linux suporta muitos sistemas de arquivos, alguns nativos, como a família ext(Extended Filesystem), enquanto outros vêm de outros sistemas operacionais como FAT do MS-DOS, NTFS do Windows NT, HFS e HFS + do Mac OS, etc.


A ferramenta padrão usada para criar um sistema de arquivos no Linux é mkfs, que vem com muitas opções de uso.


OpçãoDescrição
-c (device)Faz uma verificação por badblock antes de formatar.
-t (filesystem)Seleciona o tipo de File System que irá ser colocado no disco, mesmo que mkfs.FileSystem (Ex: mkfs.ext4, mkfs.ntfs).

# Criando um filesystem do tipo ext4:
vagrant@debian10:~$ sudo mkfs -t ext4 /dev/vdb1
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: d4959c9a-486f-479d-a475-4962b93bb23d
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done


# Podemos usar a opção curta para qualquer tipo de filesystem existente no sistema.
vagrant@debian10:~$ sudo mkfs.ext4 /dev/vdb1
mke2fs 1.44.5 (15-Dec-2018)
/dev/vdb1 contains a ext4 file system
created on Wed Mar 31 19:22:58 2021
Proceed anyway? (y,N) y
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 8bb72a3b-c269-4375-950b-1e76078dd0c5
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

A ferramenta oficial para criar filesystem do tipo ext é mke2fs.

# Perceba que o mkfs.ext{2,3,4} é apenas um link para a ferramenta verdadeira:
vagrant@debian10:~$ sudo ls -lh /usr/sbin/mkfs.ext2
lrwxrwxrwx 1 root root 6 Jan 10 2020 /usr/sbin/mkfs.ext2 -> mke2fs

vagrant@debian10:~$ sudo ls -lh /usr/sbin/mkfs.ext3
lrwxrwxrwx 1 root root 6 Jan 10 2020 /usr/sbin/mkfs.ext3 -> mke2fs

vagrant@debian10:~$ sudo ls -lh /usr/sbin/mkfs.ext4
lrwxrwxrwx 1 root root 6 Jan 10 2020 /usr/sbin/mkfs.ext4 -> mke2fs

Opções:

OpçãoDescrição
-b SIZEDefine o tamanho dos blocos de dados no fileSystem, que pode ser 1024, 2048 ou 4096 bytes por bloco, a maioria usa 1024.
-cVerifica o dispositivo de destino em busca de blocos danificados antes de criar o sistema de arquivos.
Você pode executar uma verificação completa, mas muito mais lenta, passando esse parâmetro duas vezes, como em mkfs.ext4 -c -c TARGET.
-d DIRECTORYCopia o conteúdo do diretório especificado para a raiz do novo sistema de arquivos. Útil se você precisar “pre-preencher” o disco com um conjunto predefinido de arquivos.
-FPerigo, Esta opção forçará o mke2fs a criar um sistema de arquivos, mesmo se as outras opções passadas para ele ou o destino forem perigosas ou não fizerem sentido algum. Se especificado duas vezes (como em -F -F), ele pode até ser usado para criar um sistema de arquivos em um dispositivo que está montado ou em uso, o que é uma coisa muito, muito ruim de se fazer.
-L VOLUME_LABELIrá definir o rótulo do volume para o especificado em VOLUME_LABEL. Este rótulo deve ter no máximo 16 caracteres.
-nEsta é uma opção verdadeiramente útil que simula a criação do sistema de arquivos e exibe o que seria feito se executado sem a opção 'n'. Pense nisso como um modo de “teste”.
-qModo silencioso. mke2fs será executado normalmente, mas não produzirá nenhuma saída para o terminal. Útil ao executar o mke2fs a partir de um script.
-U IDIsso definirá o UUID (Universally Unique Identifier) de uma partição para o valor especificado como ID. UUIDs são números de 128 bits em notação hexadecimal que servem para identificar exclusivamente uma partição para o sistema operacional. Este número é especificado como uma string de 32 dígitos no formato 8-4-4-4-12, significando 8 dígitos, hífen, 4 dígitos, hífen, 4 dígitos, hífen, 4 dígitos, hífen, 12 dígitos, como D249E380-7719-45A1-813C-35186883987E. Em vez de um ID, você também pode especificar parâmetros como 'clear' para limpar o UUID do sistema de arquivos random, usar um UUID gerado aleatoriamente ou 'time' criar um UUID baseado em tempo.
-VModo detalhado, imprime muito mais informações durante a operação do que o normal. Útil para fins de depuração.

Essas mesma opções estão disponível em mkfs.ext4, porque é um link.



JOURNAL


Um sistema de arquivos que tem o journaling (diário), é mantido um diário ou registro das mudanças que estão sendo feitas no sistema de arquivos durante a gravação no disco, que pode ser usado para reconstruir rapidamente corrupções que podem ocorrer devido a eventos como falha do sistema ou queda de energia. O nível de registro em diário executado pelo sistema de arquivos pode ser configurado para fornecer vários níveis de registro, dependendo de suas necessidades e requisitos de desempenho.


Exemplos de sistemas de arquivos que suportam journaling: Ext3, Ext4, JFS, JFFS, JFFS2, LogFS, NTFS, Reiser4, ReiserFS e XFS.


Um sistema de arquivos com diário registra informações em uma área de log em um disco (o diário e o log não precisam estar no mesmo dispositivo) durante cada gravação. Esta é essencialmente uma "intenção de enviar" dados para o sistema de arquivos. A quantidade de informações registradas é configurável e varia de não registrar nada, registrar o que é conhecido como "metadados" (ou seja, propriedade, informações de carimbo de data, etc.), para registrar os "metadados" e os blocos de dados que devem ser gravados o arquivo. Depois que o log é atualizado, o sistema grava os dados reais nas áreas apropriadas do sistema de arquivos e marca uma entrada no log para dizer que os dados foram confirmados.


Quando um arquivo é acessado no sistema de arquivos, o último instantâneo desse arquivo é lido do disco para a memória. O registro do diário é então consultado para ver se alguma alteração não confirmada foi feita no arquivo desde que os dados foram gravados pela última vez no arquivo (essencialmente procurando por uma "intenção de confirmação" na entrada do registro). Em pontos específicos, o sistema de arquivos atualizará os dados do arquivo no disco a partir das entradas de log não confirmadas e removerá essas entradas do log. A confirmação de operações do log e a sincronização do log e seu sistema de arquivos associado é chamada de ponto de verificação.



PARTED


GNU Parted é um editor de partição muito poderoso que pode ser usado para criar, deletar, mover, redimensionar, resgatar e copiar partições. Ele pode funcionar com discos GPT e MBR e cobrir quase todas as suas necessidades de gerenciamento de disco.

O contrário de fdiske gdisk, parted faz alterações no disco imediatamente após o comando ser emitido, sem esperar por outro comando para gravar as alterações no disco. Ao praticar, é aconselhável fazê-lo em um disco ou unidade flash vazio ou sobressalente, para que não haja risco de perda de dados caso você cometa um erro.

O parted trabalha com um prompt próprio assim como o gdisk e fdisk (pode usar entradas manuais), mas ele também pode funcionaria com o uso de opções.

# Exibindo informações:
print <free devices>

# Exibe espaço livre no disco mais os ocupados:
print free

# Exibe os dispositivos de armazenamento:
print devices

# Exibe apenas as partições criadas
print

# Muda a tabela de partição:
mklabel msdos
mklabel gpt

# Criar uma partição
mkpart PARTTYPE FSTYPE START END

# É o tipo de partição, que pode ser 'primary', 'logical' ou 'extended' no caso de uma tabela de partição MBR ser usada.

# Especifica qual sistema de arquivos será usado nesta partição. Isso não criará o sistema de arquivos. Ele apenas define um sinalizador na partição que informa ao sistema operacional que tipo de dados esperar dele.

# Especifica o ponto exato no dispositivo onde a partição começa. Você pode usar unidades diferentes para especificar este ponto. '2s' pode ser usado para se referir ao segundo setor do disco, enquanto '1m' se refere ao início do primeiro megabyte do disco. Outras unidades comuns são B(bytes) e %(porcentagem do disco).

# Especifica o fim da partição. Observe que este não é o tamanho da partição, este é o ponto no disco onde ela termina. Por exemplo, se você especificar, '100m' a partição terminará '100 MB' após o início do disco. Você pode usar as mesmas unidades do parâmetro START.


RESIZEPART


O parted pode ser usado para redimensionar partições para torná-las maiores ou menores. No entanto, existem algumas ressalvas:

  • Durante o redimensionamento, a partição não deve ser usada nem montada.
  • Você precisa de espaço livre suficiente após a partição para aumentá-la até o tamanho desejado.

Para fazer o resize usamos resizepart partition_number tamanho.

Exemplo: Um disco de 10GB com 2 partições, cada uma com 5GB, só poderemos aumentar aumentar uma das partiçoes se houver espaço não alocado (livre) após essa partição.


Fazer isso em ferramenta não parted:

Para fazer o resize vamos fazer uma regra de 3:

Tamanho (em MB) = Setor Inicial - Setor Final


Exemplo:

Setor inicial do disco: 9643 Setor final: 7495 Tamanho: 2148 MB aproximadamente.

7495 = 2148
X = 3072

x*2148 = 7495*3072
x*2148 = 23024640
x = 23024640/2148
x = 10719 (Mega Byte)

No parted:

sudo parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.

# Veja o espaço livre:
(parted) print free
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
32.3kB 1049kB 1016kB Free Space
1 1049kB 3000MB 2999MB primary ext4
3000MB 3001MB 1024kB Free Space
2 3001MB 8370MB 5369MB primary
8370MB 14.8GB 6442MB Free Space
4 14.8GB 21.5GB 6663MB primary

# Aumente a 2° partição para ocupar todo o espaço após ela:
(parted) resizepart 2 14.8GB

# verifique novamente:
(parted) print free
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
32.3kB 1049kB 1016kB Free Space
1 1049kB 3000MB 2999MB primary ext4
3000MB 3001MB 1024kB Free Space
2 3001MB 14.8GB 11.8GB primary
14.8GB 14.8GB 12.2MB Free Space
4 14.8GB 21.5GB 6663MB primary

Após termos redimensionado o tamando da partição, precisamos "falar" para o filesystem o que fizemos, para que ele possa reconhecer o aumento na partição. Para partições do tipo ext, podemos usar o comando resize2fs.


Antes de redimensionar, é aconselhável desmontar a partição.

# Comando RESIZE2FS DEVICE SIZE
$ sudo resize2fs /dev/vdb2
# Se omitir o tamanho, o sistema usará todo o espaço disponível da partição.


BRTFS


Btrfs (oficialmente o B-Tree Filesystem , pronunciado como “Butter FS”, “Better FS” ou mesmo “Butterfuss”, sua escolha) é um sistema de arquivos que está em desenvolvimento desde 2007 especificamente para Linux pela Oracle Corporation e outras empresas, incluindo Fujitsu, Red Hat, Intel e SUSE, entre outros.


Existem muitos recursos que tornam o Btrfs atraente em sistemas modernos onde grandes quantidades de armazenamento são comuns. Entre eles estão o suporte a vários dispositivos (incluindo striping, mirroring e striping + mirroring, como em uma configuração RAID), compressão transparente, otimizações SSD, backups incrementais, snapshots, desfragmentação online, verificações offline, suporte para subvolumes (com cotas), deduplicação e muito mais.


Como é um sistema de arquivos copy-on-write , é muito resistente a travamentos. E além disso, o Btrfs é simples de usar e bem suportado por muitas distribuições Linux. E alguns deles, como o SUSE, o usam como sistema de arquivos padrão.

Em um sistema de arquivos tradicional, quando você deseja sobrescrever parte de um arquivo, os novos dados são colocados diretamente sobre os dados antigos que estão substituindo. Em um sistema de arquivos copy-on-write, os novos dados são gravados para liberar espaço no disco, então os metadados originais do arquivo são atualizados para se referir aos novos dados e somente então os dados antigos são liberados, uma vez que não são mais necessários. Isso reduz as chances de perda de dados em caso de travamento, já que os dados antigos só são descartados depois que o sistema de arquivos tem absoluta certeza de que não são mais necessários e os novos dados estão no lugar.

Está sendo aprimorado para ser o novo filesystem do Linux. Possui tolerancia a falhas e facilidade de administração e reparo.

  • Multi-Device FileSystem / RAID (diretamente no filesystem)

  • Suporta RAID 0, 1, 10 (5 e 6 em desenvolvimento)

  • SubVolumes

    É uma estrtura dentro de um volume, um volume dentro do outro e podemos montar cada volume separadamente.

    • Estrutura dentro de uma partição/volume
    • Pode ser montado separadamente
  • Compressão transparente

    O Btrfs suporta compactação de arquivo transparente, com três algoritmos diferentes disponíveis para o usuário. Isso é feito automaticamente por arquivo, contanto que o sistema de arquivos seja montado com a opção -o compress. Os algoritmos são inteligentes o suficiente para detectar arquivos incompressíveis e não tentarão compactá-los, economizando recursos do sistema. Portanto, em um único diretório, você pode ter arquivos compactados e descompactados juntos. O algoritmo de compactação padrão é ZLIB, mas LZO (mais rápido, pior taxa de compactação) ou ZSTD (mais rápido que ZLIB, compactação comparável) estão disponíveis, com vários níveis de compactação (consulte o objetivo de resposta nas opções de montagem).

    • Compressão pode ser feita diretamente no FS
    • Algoritmos zlib, LZO, ZSTD
  • Snapshot

  • Foto de um FS

  • Conversão de ext para btrfs

    Permite a conversão de qualquer FS EXT para Btrfs sem perda de dados.



EXFAT


O Extended FAT ou FAT64 é uma evoluçao do FAT convencional, mas é um intermediário entre FAT e NTFS, ele é mais simples e leve que o NTFS, permite arquivos maiores que o FAT (era de 4GB), agora no EXFAT é de 16 Exabyte. No Linux é implementado pelos pacotes exfat-fuse e exfat-utils.


É um FS padrão para SDXC (Cartões de memória mais usados por máquinas fotográficas).

# Criar um FS com exfat
$ sudo mkfs.exfat /dev/vdb1