203.1 Sistemas de Arquivos e Dispositivos
Comece revendo alguns conceitos estudados na LPIC-1.
FSTAB
MOUNT
O mount
possue algumas opções que estão na sessão Mount Options for ADFS
, essas opções são usadas mais para FAT e NTFS, e sua utilidade é especificar o UID ou GID dos usuários que poderão escrever naquele FileSystem.
Vamos ver alguns arquivos
/proc/mounts
Podemos ver todos os FileSystems que estão montados no sistema, mesmo que rodar apenas o comando
mount
./etc/mtab
Podemos ver todos os FileSystems que estão montados no sistema, mesmo que rodar apenas o comando
mount
.
O mount
possue algumas opções que estão na sessão Mount Options for fat
, essas opções são usadas apenas com FileSystem do tipo FAT e sua família. Aqui podemos configurar 2 opções que outros FileSystems não permitem, que são:
DMASK
Define o
umask
que só é aplicado em diretórios, caso não seja definido nada, o padrão será o umask do processo atual.Exemplo:
dmask=0022
.FMASK
Define o
umask
que só é aplicado em arquivos regulares, caso não seja definido nada, o padrão será o umask do processo atual.Exemplo:
fmask=0022
.
LSBLK
BLKID
E2LABEL
É outro comando que podemos usar para ver o label de uma partição, caso essa partição possua uma label, mas também pode definir um label.
# No caso nao tem label, então não mostra nada:
$ sudo e2label /dev/vda1
# Colocando um label:
$ sudo e2label /dev/vda1 "particao1"
# Verificando de novo:
$ sudo e2label /dev/vda1
particao1
Outra forma de mudar o label de uma partição é usando o comando
$ sudo tune2fs –L DESCRIPTION DEVICE
.
FINDFS
Caso você tenha o Label, UUID ou PARTUUID de uma partição e precise saber qual device pertence, use este comando. Observer que UUID, LABEL ou PARTUUID devem ser escritos em maiúsculo, caso contrário não vai funcionar.
# Usando o UUID:
$ sudo findfs UUID="06f9bb7b-a89e-485c-9f2a-d71facd28b2a"
/dev/vda1
# Usando o label:
$ sudo findfs LABEL=particao1
/dev/vda1
# Usando o PARTUUID:
$ sudo findfs PARTUUID="a6dccb81-02"
/dev/vda2
FINDMNT
Muito similar ao comando mount
, na verdade o resultado é o mesmo, a única diferença é na forma como o resultado é exibido.
$ findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/vda3 ext4 rw,relatime,errors=remount-ro
├─/sys sysfs sysfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/kernel/security securityfs securityfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/cgroup tmpfs tmpfs ro,nosuid,nodev,noexec,mode=755
│ │ ├─/sys/fs/cgroup/unified cgroup2 cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate
│ │ ├─/sys/fs/cgroup/systemd cgroup cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd
│ │ ├─/sys/fs/cgroup/freezer cgroup cgroup rw,nosuid,nodev,noexec,relatime,freezer
│ │ ├─/sys/fs/cgroup/pids cgroup cgroup rw,nosuid,nodev,noexec,relatime,pids
│ │ ├─/sys/fs/cgroup/devices cgroup cgroup rw,nosuid,nodev,noexec,relatime,devices
│ │ ├─/sys/fs/cgroup/cpu,cpuacct cgroup cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct
│ │ ├─/sys/fs/cgroup/net_cls,net_prio cgroup cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio
│ │ ├─/sys/fs/cgroup/perf_event cgroup cgroup rw,nosuid,nodev,noexec,relatime,perf_event
│ │ ├─/sys/fs/cgroup/memory cgroup cgroup rw,nosuid,nodev,noexec,relatime,memory
│ │ ├─/sys/fs/cgroup/hugetlb cgroup cgroup rw,nosuid,nodev,noexec,relatime,hugetlb
│ │ ├─/sys/fs/cgroup/cpuset cgroup cgroup rw,nosuid,nodev,noexec,relatime,cpuset
│ │ ├─/sys/fs/cgroup/rdma cgroup cgroup rw,nosuid,nodev,noexec,relatime,rdma
│ │ └─/sys/fs/cgroup/blkio cgroup cgroup rw,nosuid,nodev,noexec,relatime,blkio
│ ├─/sys/fs/pstore pstore pstore rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/bpf none bpf rw,nosuid,nodev,noexec,relatime,mode=700
│ ├─/sys/kernel/debug debugfs debugfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/kernel/tracing tracefs tracefs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/fuse/connections fusectl fusectl rw,nosuid,nodev,noexec,relatime
│ └─/sys/kernel/config configfs configfs rw,nosuid,nodev,noexec,relatime
├─/proc proc proc rw,nosuid,nodev,noexec,relatime
│ └─/proc/sys/fs/binfmt_misc systemd-1 autofs rw,relatime,fd=28,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=16355
├─/dev udev devtmpfs rw,nosuid,noexec,relatime,size=2995016k,nr_inodes=748754,mode=755
│ ├─/dev/pts devpts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000
│ ├─/dev/shm tmpfs tmpfs rw,nosuid,nodev
│ ├─/dev/mqueue mqueue mqueue rw,nosuid,nodev,noexec,relatime
│ └─/dev/hugepages hugetlbfs hugetlbfs rw,relatime,pagesize=2M
├─/run tmpfs tmpfs rw,nosuid,nodev,noexec,relatime,size=608488k,mode=755
│ ├─/run/lock tmpfs tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k
│ └─/run/user/1000 tmpfs tmpfs rw,nosuid,nodev,relatime,size=608484k,mode=700,uid=1000,gid=1000
└─/boot /dev/vda1 ext4 rw,relatime
SYNC
Como o Sistema Operacional por padrão usa ASYNC (descrito no comando mount), toda a informação vai primeiro para cache para depois ser gravada de fato no disco, o que o comando sync
faz é pegar toda essa informação do cache e gravar em disco.
## Podemos fazer o sync para um FileSystem ou para um arquivo individual:
# Para um arquivo:
$ sudo sync -d teste1.txt
# Para um FileSystem:
$ sudo sync -d /dev/vda2
SWAP
Swap é um recurso utilizado para gravar informações em disco quando não temos mais memória RAM disponível, é uma forma de evitar que o servidor pare de funcionar por falta de memória, mas não é algo que vamos querer usar, o disco é sempre mais lento na gravação/leitura do que a memória RAM, mas é um recurso muito útil para impedir que o servidor pare de funcionar.
Existem dois tipos de Swap:
Partição
Nesse modelo vamos criar uma partição e usar ela como área de swap, toda a partição será disposta para isso, não podendo ser usada para outra finalidade.
Arquivo
Nesse modelo vamos criar um arquivo (do tamanho que quisermos) e vamos definir ele como Swap File, apesar de receber o nome de arquivo (tudo no Linux é visto como arquivo, não um arquivo regular, mas um arquivo no geral) ele está mais uma partição virtual, é como um pequeno container (partição) dentro de uma outra partição.
# Vamos ver se tenho swap nesse servidor:
$ sudo cat /proc/swaps
Filename Type Size Used Priority
/dev/vda2 partition 1999868 0 -2
# Possuo uma partição como Swap, com 1999868 KB, o que me da quase 2GB de Swap.
# Uma outra forma de verificar é:
$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/vda2 partition 1.9G 0B -2
Swap Partição
# Instale o FileSystem que permite a utilização da partição como swap na partição desejada:
$ sudo mkswap /dev/vdb2
Setting up swapspace version 1, size = 5 GiB (5367656448 bytes)
no label, UUID=5b8b3946-7d43-4225-8446-0c53a654303
# Ative o swap nesse partição
$ sudo swapon /dev/vdb2
# Para desativar uma partição basta usar:
$ sudo swapoff /dev/vda2
# Ou para desativar toda a swap do sistema (todos os arquivos e HDs com swap):
$ sudo swapoff -a
# Agora veja novamente quais recursos temos de swap:
$ sudo cat /proc/swaps
Filename Type Size Used Priority
/dev/vda2 partition 1999868 0 -2
/dev/vdb2 partition 5241852 0 -3
Uma coisa que não fizemos é adicionar o tipo de filesystem como swap, isso não determina o que pode ser escrito no disco, mas visualmente é útil para que outras pessoas tenham ideia de qual a finalidade daquela partição.
# Perceça que o rótulo da partição está como Linux (código 83):
$ sudo fdisk -l | grep vdb2
/dev/vdb2 10487808 20971519 10483712 5G 83 Linux
# Vamos mudar para swap:
$ sudo echo -e "t\n2\n0x82\nw" | fdisk /dev/vdb
# Agora veja o rótulo novamente:
$ sudo fdisk -l | grep vdb2
/dev/vdb2 10487808 20971519 10483712 5G 82 Linux swap / Solaris
Por fim temos que inserir isso no fstab
para que continue funcionando após reiniciar o sistema:
# Obtenha o UUID da partição do Swap:
$ sudo blkid /dev/vdb2
/dev/vdb2: UUID="5b8b3946-7d43-4225-8446-0c53a6543037" TYPE="swap" PARTUUID="0386ff79-02"
# Edite o arquivo abaixo:
$ sudo vim /etc/fstab
#### INICIO ####
# Swap instalada em /dev/vdb2
UUID="5b8b3946-7d43-4225-8446-0c53a6543037" none swap sw 0 0
#### FIM ####
Onde temos none
poderia colocar como swap
, já que aqui teríamos que colocar onde montar, mas deixar como none funciona melhor, outro detalhe é que em sw
poderia ser usado como defaults
, mas como estamos trabalhando com swap, melhor deixar assim (mas funcionaria sem problemas).
Swap File
A melhor forma de criar um swap na minha opnião, podemos redimensionar de forma simples o tamanho do arquivo, apagar, criar outro, sem falar que em algumas VPS você não tem a possibilidade de ter um swap usando partição, mas acaba ganhando um SSD de 10 gigas nos alugueis mais barato, e com isso, podemos criar um swap bem rápido usando o ssh e "aumentando" a quantidade de ram.
# Crie o arquivo que vamos usar como swap:
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.18072 s, 909 MB/s
# Outra forma de criar o arquivo swap é usando o comando abaixo:
$ sudo fallocate -l 2G /swapfile
# Instale o FileSystem que permite a utilização da partição como swap na partição desejada:
$ sudo mkswap /swapfile
mkswap: /swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=ed7b4328-6f34-4f2f-8bcf-81b8d1173745
# Mude a permissão para 0600:
$ sudo chmod 0600 /swapfile
# Ative o swap nesse arquivo:
$ sudo swapon /swapfile
# Para desativar uma partição basta usar:
$ sudo swapoff /dev/vda2
# Ou para desativar toda a swap do sistema (todos os arquivos e HDs com swap):
$ sudo swapoff -a
# Agora veja quais recursos temos de swap:
$ sudo cat /proc/swaps
Filename Type Size Used Priority
/dev/vda2 partition 1999868 0 -2
/dev/vdb2 partition 5241852 0 -3
/swapfile file 1048572 0 -4
# Edite o arquivo abaixo:
$ sudo vim /etc/fstab
#### INICIO ####
# Swap instalada em /swapfile
/swapfile none swap sw 0 0
#### FIM ####
Remover Swap
Vamos ver como remover um arquivo swap e como remover o swap por partição. Sempre que desativar a swap ela não irá mais funcionar, mas ainda pode ser necessário remover o espaço alocado para a Swap no disco.
# Primeiro desative a swap desejada (no caso vou remover todas):
$ sudo swapoff -a
# Para um arquivo ou disco em especifico:
$ sudo swapoff /dev/vda2
$ sudo swapoff /swapfile
# Agora delete o espaço da Swap (usando swap com partição):
# Remova a partição do disco.
# Agora delete o arquivo da Swap (usando swap file).
# Remova do /etc/fstab também.