menu_book Índice

Logo UFPR

Gerenciamento de Arquivos

Logo Licenciatura

DEE355 – Sistemas Operacionais

Universidade Federal do Paraná (UFPR)

Prof. Jéfer – jefer@ufpr.br

Logo UFPR

Introdução à Gerência de Armazenamento

Logo Licenciatura

Objetivos:

  • Entender como os sistemas operacionais organizam e gerenciam o armazenamento.
  • Analisar sistemas de arquivos (Tanenbaum Cap. 4; Silberschatz Cap. 10).
  • Aplicar comandos e exemplos práticos no Linux.

Base Bibliográfica:

  • Tanenbaum – Cap. 4
  • Silberschatz – Cap. 10
  • Maziero – Parte VI: Gestão de Arquivos (link)
Logo UFPR

Arquivos

Logo Licenciatura

O que são Arquivos?

Arquivos são estruturas usadas para armazenar dados em um sistema de arquivos. Eles podem conter texto, código, imagens, vídeos ou qualquer tipo de informação. Cada arquivo possui atributos como nome, tipo, permissões e metadados.

Aspectos dos Arquivos

Abaixo estão os principais aspectos relacionados a arquivos:

  • Nomeação: Convenções para nomear arquivos.
    Exemplo: relatorio.txt (arquivo de texto), .bashrc (arquivo oculto de configuração).
  • Estrutura: Como os dados são organizados no arquivo.
    Tipos:
    • Sequencial: Dados são armazenados em ordem (ex.: arquivos de texto).
    • Indexada: Usa um índice para acesso rápido (ex.: bancos de dados).
    • Aleatória: Dados podem ser acessados diretamente (ex.: arquivos binários).
  • Tipos: Diferentes tipos de arquivos em um sistema operacional.
    Exemplos:
    • Arquivos regulares: Dados do usuário (ex.: documento.txt).
    • Diretórios: Estruturas que organizam arquivos (ex.: /home).
    • Dispositivos: Representam hardware (ex.: /dev/sda).
    • Links: Atalhos para outros arquivos (ex.: link_simbolico.txt).
  • Acesso: Operações de leitura e escrita.
    Exemplos:
    • Leitura: cat arquivo.txt (exibe o conteúdo).
    • Escrita: echo "texto" > arquivo.txt (adiciona conteúdo).
  • Atributos: Metadados associados a arquivos.
    Exemplos:
    • Permissões: rw-r--r-- (leitura, escrita, execução).
    • Timestamps: Data de criação, modificação e acesso.
    • Tamanho: Em bytes, KB, MB, etc.
  • Operações: Ações básicas com arquivos.
    Exemplos:
    • Criar: touch arquivo.txt.
    • Abrir: nano arquivo.txt (editar com Nano).
    • Deletar: rm arquivo.txt.

Exemplo Prático

Criando e Verificando Atributos de um Arquivo:


# Criar um arquivo
echo "Hello, World!" > hello.txt

# Verificar atributos
stat hello.txt
    

Pergunta: O que o comando stat exibe sobre o arquivo?

Atividade Interativa

Explorando Tipos de Arquivos:

  1. Crie um arquivo de texto: echo "Teste" > teste.txt.
  2. Crie um diretório: mkdir pasta.
  3. Crie um link simbólico: ln -s teste.txt link.txt.
  4. Verifique os tipos de arquivos com ls -l.
  5. Pergunta: Qual é a diferença entre os tipos de arquivos listados?

Atividade Prática Adicional

Gerenciando Permissões de Arquivos:

  1. Crie um arquivo: touch arquivo.txt.
  2. Verifique as permissões atuais: ls -l arquivo.txt.
  3. Altere as permissões para que apenas o proprietário possa ler e escrever: chmod 600 arquivo.txt.
  4. Verifique as permissões novamente: ls -l arquivo.txt.
  5. Pergunta: O que acontece se outro usuário tentar ler o arquivo após a alteração das permissões?

Reflexão Final

Discussão:

  • Por que é importante entender os diferentes tipos de arquivos em um sistema operacional?
  • Como as permissões de arquivos contribuem para a segurança do sistema?
  • Qual é a importância dos metadados (como timestamps) no gerenciamento de arquivos?

Conclusão

Arquivos são a base do armazenamento de dados em sistemas operacionais. Compreender sua estrutura, tipos, atributos e operações é essencial para gerenciar eficientemente informações e garantir a segurança e organização do sistema.

Logo UFPR

Diretórios

Logo Licenciatura

O que são Diretórios?

Diretórios são estruturas usadas para organizar arquivos em um sistema de arquivos. Eles funcionam como "pastas" que agrupam arquivos e outros diretórios, facilitando a navegação e o gerenciamento de dados.

Organização de Diretórios

Existem duas formas principais de organizar diretórios:

  • Nível Único: Todos os arquivos estão em um único diretório.
    Exemplo: Sistemas antigos como o MS-DOS.
  • Hierárquico: Diretórios são organizados em uma estrutura de árvore.
    Exemplo: Sistemas modernos como Linux e Windows.
    Caminhos: Absoluto (/home/usuario/documentos) ou relativo (./documentos).

Operações com Diretórios

Comandos essenciais para gerenciar diretórios no Linux:

  • Criar: mkdir nome_do_diretorio
    Exemplo: mkdir projetos (cria um diretório chamado "projetos").
  • Listar: ls
    Exemplo: ls -l (lista arquivos e diretórios com detalhes).
  • Navegar: cd
    Exemplo: cd projetos (entra no diretório "projetos").
  • Remover: rmdir (para diretórios vazios) ou rm -r (para diretórios com conteúdo).
    Exemplo: rm -r projetos (remove o diretório "projetos" e seu conteúdo).

Exemplo Prático

Criando e Navegando por Diretórios:


# Criar um diretório
mkdir projetos

# Entrar no diretório
cd projetos

# Criar um arquivo
touch plano.txt

# Listar o conteúdo do diretório
ls -l
    

Pergunta: O que acontece se você tentar criar um diretório com um nome que já existe?

Atividade Interativa

Explorando a Estrutura de Diretórios:

  1. Crie uma estrutura de diretórios para um projeto:
  2. 
    mkdir -p projeto/{src,doc,backup}
          
  3. Navegue até o diretório projeto/src e crie um arquivo chamado main.c:
  4. 
    cd projeto/src
    touch main.c
          
  5. Volte ao diretório raiz do projeto e liste a estrutura criada:
  6. 
    cd ../..
    tree projeto
          
  7. Pergunta: Qual é a função do comando tree?

Reflexão Final

Discussão:

  • Por que a organização hierárquica de diretórios é mais eficiente do que a organização em nível único?
  • Como os caminhos absolutos e relativos podem ser úteis em diferentes situações?
  • Qual é a importância de usar comandos como mkdir, ls e cd no dia a dia de um administrador de sistemas?

Logo UFPR

Implementação de Sistemas de Arquivos

Logo Licenciatura

Componentes de um Sistema de Arquivos

Um sistema de arquivos é composto por várias estruturas que gerenciam o armazenamento e o acesso aos dados. Abaixo estão os principais componentes:

  • Blocos: Unidades básicas de armazenamento (ex.: 4 KB).
    Exemplo: Um arquivo de 10 KB ocupa 3 blocos (dois completos e um parcial).
  • Superbloco: Contém metadados sobre o sistema de arquivos, como tamanho, número de blocos livres e estrutura de diretórios.
    Exemplo: O superbloco do ext4 armazena informações sobre o sistema de arquivos.
  • Inodes: Estruturas que armazenam metadados de arquivos, como permissões, tamanho e localização dos blocos.
    Exemplo: Cada arquivo no Linux tem um inode único.

Estratégias de Alocação

Diferentes estratégias são usadas para alocar blocos de dados em um sistema de arquivos:

  • Alocação Contígua: Arquivos são armazenados em blocos sequenciais.
    Vantagem: Acesso rápido.
    Desvantagem: Fragmentação externa.
  • Alocação Encadeada: Blocos são ligados por ponteiros.
    Vantagem: Não há fragmentação externa.
    Desvantagem: Acesso sequencial lento.
  • Alocação Indexada: Usa um índice para localizar blocos.
    Vantagem: Acesso rápido e eficiente.
    Desvantagem: Overhead de armazenamento do índice.

Journaling

O journaling é um mecanismo que registra operações em um log antes de aplicá-las ao sistema de arquivos, garantindo consistência em caso de falhas.

  • Exemplos: Sistemas de arquivos como ext4 e XFS usam journaling.
  • Vantagens:
    • Recuperação rápida após falhas.
    • Redução de corrupção de dados.

Links: Rígidos vs. Simbólicos

Links permitem criar múltiplas referências para um mesmo arquivo ou diretório. Existem dois tipos principais:

  • Links Rígidos: Apontam diretamente para o inode de um arquivo.
    Exemplo: ln arquivo.txt link_rigido.txt.
    Característica: Compartilham o mesmo inode e conteúdo.
  • Links Simbólicos: Apontam para o caminho de outro arquivo.
    Exemplo: ln -s arquivo.txt link_simbolico.txt.
    Característica: Funcionam como atalhos.

Exemplo Prático

Criando e Verificando Links:


# Criar um arquivo
echo "Conteúdo do arquivo" > arquivo.txt

# Criar um link rígido
ln arquivo.txt link_rigido.txt

# Criar um link simbólico
ln -s arquivo.txt link_simbolico.txt

# Verificar inodes
ls -li arquivo.txt link_rigido.txt link_simbolico.txt
    

Pergunta: Qual é a diferença entre os inodes dos links rígidos e simbólicos?

Atividade Interativa

Explorando Estratégias de Alocação:

  1. Crie um arquivo de 1 MB: dd if=/dev/zero of=arquivo.bin bs=1M count=1.
  2. Verifique o uso de blocos: stat arquivo.bin.
  3. Compare o uso de blocos com diferentes sistemas de arquivos (ext4, XFS).
  4. Pergunta: Qual sistema de arquivos é mais eficiente para arquivos pequenos?
Logo UFPR

Gerenciamento e Otimização

Logo Licenciatura

Gerenciamento de Espaço em Disco

O gerenciamento de espaço em disco é essencial para garantir que o sistema opere de forma eficiente. Abaixo estão as principais técnicas:

  • Mapas de Bits: Usa um mapa para indicar blocos livres e ocupados.
    Vantagem: Simples e eficiente para sistemas com muitos blocos pequenos.
  • Lista Livre: Mantém uma lista encadeada de blocos livres.
    Vantagem: Eficiente para sistemas com blocos grandes.

Backups

Backups são cópias de segurança que garantem a recuperação de dados em caso de falhas. Ferramentas comuns incluem:

  • rsync: Sincroniza arquivos e diretórios entre locais.
    Exemplo: rsync -av /home/usuario/ /backup/ (copia arquivos para o diretório de backup).
  • tar: Compacta arquivos e diretórios em um único arquivo.
    Exemplo: tar -czvf backup.tar.gz /home/usuario/ (cria um backup compactado).

Consistência do Sistema de Arquivos

A consistência do sistema de arquivos é verificada para garantir que não haja corrupção de dados. O comando fsck é usado para essa finalidade:

  • fsck: Verifica e repara sistemas de arquivos.
    Exemplo: fsck /dev/sda1 (verifica a partição /dev/sda1).

Otimização de Desempenho

A otimização de desempenho envolve técnicas para melhorar a eficiência do sistema de arquivos:

  • Buffers e Cache: Armazenam dados temporariamente para reduzir o tempo de acesso.
    Exemplo: O cache de disco acelera operações de leitura e escrita.
  • Desfragmentação: Reorganiza blocos de dados para melhorar o acesso sequencial.
    Exemplo: Sistemas como Windows usam desfragmentação, enquanto sistemas Linux (ext4) são menos afetados devido à alocação inteligente de blocos.

Exemplo Prático

Criando um Backup com tar:


# Compactar um diretório
tar -czvf meusdocs.tar.gz projetos/

# Verificar o conteúdo do arquivo compactado
tar -tzvf meusdocs.tar.gz
    

Pergunta: O que o parâmetro -z faz no comando tar?

Atividade Interativa

Explorando Gerenciamento de Espaço em Disco:

  1. Verifique o espaço em disco disponível: df -h.
  2. Analise o uso de espaço em um diretório: du -sh /home/usuario.
  3. Crie um backup do diretório /home/usuario/documentos usando tar.
  4. Pergunta: Qual é a diferença entre df e du?

Reflexão Final

Discussão:

  • Por que é importante realizar backups regularmente?
  • Como a desfragmentação pode melhorar o desempenho de um sistema de arquivos?
  • Qual é o papel do fsck na manutenção da consistência do sistema de arquivos?

Conclusão

O gerenciamento e a otimização de sistemas de arquivos são fundamentais para garantir a eficiência, a segurança e a confiabilidade do armazenamento de dados. Ferramentas como tar, rsync e fsck são essenciais para administradores de sistemas.

Logo UFPR

Exemplos de Sistemas de Arquivos

Logo Licenciatura

Comparação:

  • MS-DOS (FAT32):
    • Simples e amplamente compatível com diferentes sistemas operacionais.
    • Não suporta permissões avançadas de arquivos, o que limita sua segurança.
    • Limitação de tamanho de arquivo (4GB) e partição (2TB).
    • Comum em dispositivos de armazenamento removíveis, como pendrives e cartões SD.
  • UNIX V7 (UFS - Unix File System):
    • Base para muitos sistemas de arquivos modernos.
    • Introduziu conceitos como inodes, que armazenam metadados dos arquivos.
    • Suporta permissões de usuário e grupo, além de links simbólicos.
    • Usado em sistemas BSD e como base para sistemas de arquivos como ext3/ext4 no Linux.
  • Linux Moderno:
    • ext4: Sistema de arquivos padrão em muitas distribuições Linux. Suporta journaling (para recuperação rápida após falhas), tamanhos de arquivo e partição muito grandes (até 1 exbibyte).
    • Btrfs (B-tree File System): Oferece suporte a snapshots, compressão transparente e gerenciamento avançado de armazenamento. Ideal para servidores e ambientes que exigem alta disponibilidade.
    • XFS: Desenvolvido para alto desempenho em sistemas de grande escala. Suporta grandes volumes de dados e é comum em servidores de alto desempenho.
  • Outros Sistemas de Arquivos Relevantes:
    • NTFS (Windows): Suporta permissões avançadas, criptografia, compressão e journaling. Usado principalmente em sistemas Windows.
    • APFS (Apple File System): Desenvolvido pela Apple para macOS, iOS e outros dispositivos. Oferece suporte a snapshots, criptografia nativa e otimização para SSDs.
    • ZFS (Solaris/OpenZFS): Conhecido por sua robustez, suporte a snapshots, integridade de dados e gerenciamento avançado de armazenamento. Usado em servidores e sistemas de armazenamento.

Exemplo Prático:

# Verificar o sistema de arquivos de uma partição
file -s /dev/sda1

# Listar sistemas de arquivos montados
df -Th

# Criar um sistema de arquivos ext4 em uma partição
mkfs.ext4 /dev/sdb1

# Verificar a integridade de um sistema de arquivos ext4
fsck /dev/sda1

Considerações:

  • A escolha do sistema de arquivos depende do uso: desktop, servidor, dispositivos móveis ou armazenamento em nuvem.
  • Características como journaling, snapshots, suporte a grandes volumes e desempenho são fatores decisivos.
Logo UFPR

Organização dos Arquivos & Comandos de Disco

Logo Licenciatura

Estrutura de Diretórios no Linux

O sistema de arquivos do Linux segue uma hierarquia padrão, onde cada diretório tem uma função específica. Abaixo estão os principais diretórios e suas funções:

  • /usr/bin: Armazena os executáveis dos programas instalados.
    Exemplo: Comandos como ls, cp, mv estão aqui.
  • /etc: Contém arquivos de configuração do sistema.
    Exemplo: /etc/passwd (usuários), /etc/shadow (senhas criptografadas).
  • /home: Diretórios pessoais dos usuários.
    Exemplo: /home/usuario contém documentos, downloads e configurações pessoais.
  • /var: Armazena dados variáveis, como logs e caches.
    Exemplo: /var/log (arquivos de log), /var/cache (dados temporários).
  • /lib: Contém bibliotecas compartilhadas necessárias para executar programas.
    Exemplo: Bibliotecas como libc.so (biblioteca padrão do C).
  • /sbin: Armazena executáveis de administração do sistema.
    Exemplo: Comandos como fdisk, ifconfig.

Comandos de Disco e Partições

Comandos essenciais para gerenciar e monitorar o uso de disco e partições:

  • df: Exibe o uso de espaço em disco de forma resumida.
    Exemplo: df -h (mostra o uso em formato legível).
  • du: Mostra o uso de disco de diretórios e arquivos.
    Exemplo: du -sh /home (mostra o tamanho total do diretório /home).
  • ncdu: Versão interativa do du para análise de uso de disco.
    Exemplo: ncdu /var (navegação interativa no diretório /var).
  • iostat: Monitora estatísticas de I/O (entrada/saída) do sistema.
    Exemplo: iostat -x 1 (monitora I/O a cada segundo).
  • gparted, cfdisk, lsblk: Ferramentas para gerenciamento e visualização de partições.
    Exemplo: lsblk (lista dispositivos de bloco e partições).

Compactação e Descompactação de Arquivos

O comando tar é amplamente usado para compactar e descompactar arquivos. Abaixo estão os principais parâmetros:

  • c: Cria um novo arquivo compactado.
    Exemplo: tar -cvf arquivo.tar pasta/ (cria um arquivo .tar).
  • z: Comprime o arquivo com gzip.
    Exemplo: tar -czvf arquivo.tar.gz pasta/ (cria um arquivo .tar.gz).
  • v: Ativa o modo verboso (exibe o progresso).
    Exemplo: tar -cvf arquivo.tar pasta/ (mostra os arquivos sendo compactados).
  • f: Especifica o nome do arquivo de saída.
    Exemplo: tar -cvf backup.tar pasta/ (define o nome do arquivo como backup.tar).
  • x: Extrai arquivos de um arquivo compactado.
    Exemplo: tar -xvf arquivo.tar (extrai os arquivos).

Atividade Prática

Exercício: Use os comandos df, du e tar para:

  1. Verificar o espaço em disco disponível no sistema.
  2. Analisar o uso de espaço no diretório /home.
  3. Compactar o diretório /home/usuario/documentos em um arquivo .tar.gz.
  4. Extrair o arquivo compactado em outro diretório.
Logo UFPR

Atividade Prática

Logo Licenciatura

Explorando Comandos de Arquivos e Diretórios no Linux

Nesta atividade, você vai praticar comandos essenciais do Linux para manipulação de arquivos e diretórios, além de explorar conceitos como links simbólicos, permissões e sistemas de arquivos.

Tarefas:

  1. Crie um diretório de backup:

    Use o comando mkdir backup para criar um diretório chamado backup.

    Pergunta: Qual é a finalidade de um diretório de backup?

  2. Crie um arquivo com texto:

    Use o comando echo "Nota importante" > nota.txt para criar um arquivo de texto.

    Pergunta: O que o operador > faz no comando acima?

  3. Mova o arquivo para o diretório:

    Use o comando mv nota.txt backup/ para mover o arquivo para o diretório backup.

    Pergunta: Qual é a diferença entre os comandos mv e cp?

  4. Crie um link simbólico:

    Use o comando ln -s backup/nota.txt nota_link.txt para criar um link simbólico.

    Pergunta: O que acontece se o arquivo original (nota.txt) for excluído? O link simbólico ainda funcionará?

  5. Verifique os sistemas de arquivos montados:

    Use o comando mount | grep ext4 para listar os sistemas de arquivos do tipo ext4.

    Pergunta: Qual é a função do comando grep nesse contexto?

  6. Verifique permissões de arquivos:

    Use o comando ls -l backup/nota.txt para ver as permissões do arquivo.

    Pergunta: O que significam as permissões -rw-r--r--?

  7. Compacte o diretório de backup:

    Use o comando tar -czvf backup.tar.gz backup/ para compactar o diretório.

    Pergunta: Para que serve o parâmetro -z no comando tar?

  8. Extraia o arquivo compactado:

    Use o comando tar -xzvf backup.tar.gz para extrair o conteúdo.

    Pergunta: O que acontece se você tentar extrair o arquivo em um diretório que já contém um arquivo com o mesmo nome?

Desafio Adicional:

Crie um script de backup automático:

  1. Crie um arquivo chamado backup.sh com o seguinte conteúdo:
  2. 
    #!/bin/bash
    # Script de backup simples
    DATA=$(date +%Y-%m-%d)
    tar -czvf backup_$DATA.tar.gz /caminho/para/diretorio
    echo "Backup concluído: backup_$DATA.tar.gz"
            
  3. Dê permissão de execução ao script: chmod +x backup.sh.
  4. Execute o script: ./backup.sh.
  5. Pergunta: Como você poderia agendar esse script para rodar automaticamente todos os dias?

Reflexão Final:

Discussão:

  • Qual é a importância de organizar arquivos e diretórios em um sistema operacional?
  • Como os links simbólicos podem ser úteis no dia a dia de um administrador de sistemas?
  • Por que é importante entender permissões de arquivos em um ambiente multiusuário?

Logo UFPR

Quiz de Múltipla Escolha

Logo Licenciatura

Responda e teste seus conhecimentos!

Logo UFPR

Perguntas Descritivas

Logo Licenciatura

Responda as seguintes questões:

  1. O que diferencia um link rígido de um link simbólico no Linux?
  2. Como o sistema de arquivos ext4 utiliza journaling para garantir a confiabilidade?
  3. Explique o que o comando stat exibe sobre um arquivo.
  4. Por que a desfragmentação é menos necessária em sistemas modernos como o ext4?
  5. Qual a função do superbloco em um sistema de arquivos?
  6. Como o comando tar auxilia na realização de backups?
  7. Explique o propósito dos diretórios /usr/bin, /etc e /home no Linux.
  8. Descreva a função dos comandos df, du e lsblk na gestão do disco.

Respostas:

  1. O link rígido aponta diretamente para o inode do arquivo, enquanto o link simbólico é um atalho que contém o caminho para o arquivo.
  2. O ext4 registra as operações num log (journaling) antes de efetivar as mudanças, permitindo a recuperação em caso de falha.
  3. O comando stat exibe os metadados do arquivo, como tamanho, permissões, timestamps e número do inode.
  4. Sistemas modernos utilizam alocação dinâmica e blocos esparsos, o que reduz significativamente a fragmentação.
  5. O superbloco armazena informações essenciais do sistema de arquivos, como tamanho, número de blocos e estado do sistema.
  6. O comando tar agrupa e, se especificado, compacta arquivos (ex.: tar -czvf cria, comprime com gzip, mostra o progresso e define o arquivo de saída), facilitando backups.
  7. O diretório /usr/bin contém os executáveis dos programas instalados; /etc guarda os arquivos de configuração; e /home abriga os diretórios pessoais dos usuários.
  8. df exibe o uso geral de espaço em disco; du detalha o uso por diretórios/arquivos; e lsblk lista dispositivos e partições.
Logo UFPR

Simulação de Fragmentação de Disco

Logo Licenciatura

O que é Fragmentação?

  • A fragmentação ocorre quando os blocos de um arquivo não são armazenados de forma contígua no disco, mas sim espalhados em diferentes áreas.
  • Isso acontece devido à alocação dinâmica de espaço em disco, especialmente em sistemas que frequentemente criam, modificam e excluem arquivos.

Tipos de Fragmentação:

  • Fragmentação Interna:
    • Ocorre quando o espaço alocado para um arquivo é maior do que o necessário.
    • Exemplo: Se o sistema aloca blocos de 4KB, mas o arquivo tem apenas 2KB, metade do espaço é desperdiçada.
  • Fragmentação Externa:
    • Ocorre quando há espaços livres no disco, mas eles são pequenos e não contíguos, impossibilitando a alocação de arquivos maiores.
    • Exemplo: Um arquivo de 10MB precisa ser armazenado, mas o disco só tem espaços livres de 2MB, 3MB e 5MB, não contíguos.

Impactos da Fragmentação:

  • Desempenho Reduzido: O sistema precisa realizar mais operações de busca (seek) para acessar os blocos fragmentados, aumentando o tempo de leitura/gravação.
  • Desgaste do Disco: Em discos mecânicos (HDDs), a fragmentação pode aumentar o movimento do cabeçote, causando maior desgaste.
  • Dificuldade de Gerenciamento: Espaços livres pequenos e fragmentados podem dificultar a alocação de novos arquivos.

Como os Sistemas Operacionais Lidam com a Fragmentação?

  • Desfragmentação: Processo de reorganizar os blocos de arquivos para que fiquem contíguos, liberando espaços maiores e melhorando o desempenho.
  • Alocação Inteligente: Alguns sistemas usam algoritmos para alocar blocos de forma mais eficiente, minimizando a fragmentação desde o início.
  • Journaling e Sistemas de Arquivos Modernos: Sistemas como ext4, NTFS e APFS incluem mecanismos para reduzir a fragmentação, como a alocação antecipada de espaço.

Simulação:

Este slide demonstra a alocação aleatória de blocos em um disco virtual para diferentes arquivos (1 e 2), ilustrando a fragmentação – ou seja, quando os blocos alocados não estão contíguos. Clique na área para reiniciar a simulação.

Exemplo Prático:

# Verificar a fragmentação de um sistema de arquivos no Linux
sudo fsck -f /dev/sda1

# Desfragmentar um sistema de arquivos NTFS no Windows
defrag C: /U /V
Logo UFPR

Recuperação de Arquivos

Logo Licenciatura

O que é Recuperação de Arquivos?

  • Processo de restaurar dados perdidos, corrompidos ou excluídos acidentalmente.
  • Pode ser necessário em casos de falhas de hardware, exclusão acidental, corrupção de sistemas de arquivos ou ataques de malware.

Técnicas de Recuperação:

  • Análise da Estrutura do Sistema de Arquivos:
    • Identificação de metadados (como inodes em sistemas UNIX) para localizar arquivos excluídos.
    • Uso de ferramentas como debugfs (Linux) para inspecionar sistemas de arquivos ext3/ext4.
  • Recuperação de Dados Brutos:
    • Varredura do disco em busca de assinaturas de arquivos (ex: cabeçalhos de imagens, documentos).
    • Ferramentas como photorec são especializadas nessa técnica.
  • Recuperação de Partições Perdidas:
    • Restauração de tabelas de partição corrompidas ou excluídas.
    • Ferramentas como testdisk ajudam a reconstruir partições.

Ferramentas de Recuperação:

  • extundelete:
    • Recupera arquivos excluídos em sistemas de arquivos ext3/ext4.
    • Funciona analisando os metadados do sistema de arquivos.
    • Exemplo de uso: extundelete /dev/sda1 --restore-all.
  • testdisk:
    • Recupera partições perdidas e arquivos excluídos.
    • Suporta diversos sistemas de arquivos (FAT, NTFS, ext, etc.).
    • Interface interativa e fácil de usar.
  • photorec:
    • Focado na recuperação de arquivos de mídia (fotos, vídeos, documentos).
    • Ignora a estrutura do sistema de arquivos, buscando diretamente por assinaturas de arquivos.
    • Funciona mesmo em discos corrompidos ou formatados.

Boas Práticas para Evitar Perda de Dados:

  • Backups Regulares:
    • Use ferramentas como rsync, tar ou soluções de backup automatizado.
    • Armazene backups em locais seguros e separados do sistema principal.
  • Monitoramento de Integridade:
    • Verifique regularmente a saúde do disco com ferramentas como smartctl.
    • Use sistemas de arquivos com journaling (ex: ext4, NTFS) para maior resiliência.
  • Prevenção de Exclusões Acidentais:
    • Use o comando rm com cuidado ou configure um alias para mover arquivos para uma "lixeira" em vez de excluí-los permanentemente.
    • Exemplo: alias rm="mv --target-directory=$HOME/.Trash".

Exemplo Prático:

# Recuperar arquivos excluídos com extundelete
sudo extundelete /dev/sda1 --restore-all

# Recuperar partições com testdisk
sudo testdisk /dev/sdb

# Recuperar arquivos de mídia com photorec
sudo photorec /dev/sdc
Logo UFPR

Samba – Compartilhamento Remoto

Logo Licenciatura

O que é o Samba?

  • O Samba é uma implementação de código aberto do protocolo SMB/CIFS (Server Message Block/Common Internet File System).
  • Permite o compartilhamento de arquivos, impressoras e outros recursos entre sistemas Linux/Unix e Windows.
  • É amplamente utilizado em redes mistas (heterogêneas) para facilitar a interoperabilidade.

Benefícios do Samba:

  • Integração de Redes: Conecta sistemas Linux e Windows de forma transparente.
  • Autenticação Centralizada: Pode integrar-se com o Active Directory (AD) para gerenciamento de usuários.
  • Flexibilidade: Suporta desde pequenas redes domésticas até grandes redes corporativas.
  • Segurança: Oferece suporte a criptografia e controle de permissões detalhado.

Configuração do Samba:

  • Arquivo de Configuração: O Samba é configurado por meio do arquivo /etc/samba/smb.conf.
  • Diretórios Compartilhados: Defina compartilhamentos (shares) no arquivo de configuração, especificando o caminho do diretório e as permissões.
  • Permissões: Use diretivas como read only, writeable, valid users e force user para controlar o acesso.
  • Autenticação: Crie usuários do Samba com o comando smbpasswd para permitir o acesso aos compartilhamentos.

Exemplo de Configuração:

[global]
   workgroup = WORKGROUP
   server string = Servidor Samba
   security = user

[compartilhado]
   path = /srv/compartilhado
   read only = no
   valid users = usuario1

Comandos Úteis:

  • Instalar o Samba: sudo apt install samba
  • Adicionar Usuário: sudo smbpasswd -a usuario1
  • Reiniciar o Serviço: sudo systemctl restart smbd
  • Testar Configuração: testparm

Desafios e Boas Práticas:

  • Desafios:
    • Configuração inicial pode ser complexa para iniciantes.
    • Problemas de compatibilidade entre versões do SMB/CIFS.
  • Boas Práticas:
    • Mantenha o Samba atualizado para garantir suporte a novas versões do SMB.
    • Use permissões de arquivo e compartilhamento de forma consistente.
    • Teste a configuração com testparm antes de colocar em produção.

Exemplo Prático:

# Criar um diretório compartilhado
sudo mkdir -p /srv/compartilhado
sudo chmod 777 /srv/compartilhado

# Adicionar um usuário ao Samba
sudo smbpasswd -a usuario1

# Reiniciar o serviço Samba
sudo systemctl restart smbd
Logo UFPR

RAID – Array de Discos

Logo Licenciatura

O que é RAID?

  • RAID (Redundant Array of Independent Disks) é uma técnica que combina múltiplos discos físicos em uma única unidade lógica para melhorar desempenho, confiabilidade ou ambos.
  • É amplamente utilizado em servidores, sistemas de armazenamento e ambientes críticos para garantir alta disponibilidade e tolerância a falhas.

Benefícios do RAID:

  • Melhoria de Desempenho: Leitura e gravação paralelas em múltiplos discos (ex: RAID 0).
  • Tolerância a Falhas: Redundância de dados para recuperação em caso de falha de disco (ex: RAID 1, RAID 5).
  • Escalabilidade: Capacidade de adicionar mais discos para aumentar o armazenamento ou a redundância.

Níveis de RAID:

  • RAID 0 (Striping):
    • Divide os dados em blocos e os distribui entre os discos.
    • Vantagem: Melhora o desempenho de leitura/gravação.
    • Desvantagem: Nenhuma redundância – a falha de um disco resulta em perda de todos os dados.
    • Uso: Ideal para aplicações que exigem alta performance, como edição de vídeo.
  • RAID 1 (Mirroring):
    • Espelha os dados em dois ou mais discos.
    • Vantagem: Tolerância a falhas – se um disco falhar, os dados ainda estão disponíveis no outro.
    • Desvantagem: Custo mais alto, pois metade da capacidade é usada para redundância.
    • Uso: Ideal para sistemas críticos que exigem alta disponibilidade.
  • RAID 5 (Paridade Distribuída):
    • Distribui os dados e a paridade (informação de recuperação) entre os discos.
    • Vantagem: Tolerância a falhas com uso eficiente de espaço – apenas um disco é usado para paridade.
    • Desvantagem: Desempenho de gravação reduzido devido ao cálculo de paridade.
    • Uso: Ideal para servidores de arquivos e bancos de dados.
  • RAID 6 (Dupla Paridade):
    • Similar ao RAID 5, mas com duas paridades, permitindo a falha de até dois discos.
    • Vantagem: Maior tolerância a falhas.
    • Desvantagem: Custo mais alto e desempenho de gravação ainda menor.
    • Uso: Ideal para sistemas que exigem alta confiabilidade, como armazenamento em nuvem.
  • RAID 10 (Combinação de RAID 1 e RAID 0):
    • Combina espelhamento (RAID 1) e striping (RAID 0).
    • Vantagem: Alto desempenho e tolerância a falhas.
    • Desvantagem: Custo elevado, pois metade da capacidade é usada para redundância.
    • Uso: Ideal para aplicações críticas que exigem alta performance e confiabilidade, como servidores de banco de dados.

Exemplo Prático:

# Criar um RAID 1 com mdadm no Linux
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

# Verificar o status do RAID
cat /proc/mdstat

# Adicionar um disco a um RAID existente
sudo mdadm --add /dev/md0 /dev/sdc1

Desafios e Boas Práticas:

  • Desafios:
    • Custo inicial mais alto devido à necessidade de múltiplos discos.
    • Complexidade de configuração e manutenção.
  • Boas Práticas:
    • Escolha o nível de RAID adequado para suas necessidades (desempenho vs. redundância).
    • Monitore a saúde dos discos regularmente com ferramentas como smartctl.
    • Mantenha backups mesmo com RAID, pois ele não substitui uma estratégia de backup completa.
Logo UFPR

Permissões de Arquivos no Linux

Logo Licenciatura

O que são Permissões de Arquivos?

  • No Linux, cada arquivo ou diretório possui permissões que controlam quem pode ler (r), escrever (w) ou executar (x) o arquivo.
  • As permissões são definidas para três categorias de usuários:
    • Proprietário (User): O dono do arquivo.
    • Grupo: Usuários que pertencem ao grupo do arquivo.
    • Outros (Others): Todos os demais usuários.

Representação Simbólica:

  • r – Permissão de leitura (read).
  • w – Permissão de escrita (write).
  • x – Permissão de execução (execute).

Representação Numérica:

  • Cada permissão é representada por um valor numérico:
    • r = 4
    • w = 2
    • x = 1
  • As permissões são somadas para cada categoria. Por exemplo:
    • rwx = 4 + 2 + 1 = 7
    • r-x = 4 + 0 + 1 = 5
    • r-- = 4 + 0 + 0 = 4

Exemplo:

  • A notação rwxr-xr-- pode ser representada numericamente como 754:
    • rwx (proprietário) = 7
    • r-x (grupo) = 5
    • r-- (outros) = 4

Comandos para Gerenciar Permissões:

  • chmod – Alterar permissões:
    • Notação Numérica: chmod 755 arquivo (7 = rwx, 5 = r-x, 5 = r-x).
    • Notação Simbólica: chmod u=rwx,g=rx,o=r arquivo.
  • chown – Alterar proprietário e grupo:
    • chown usuario:grupo arquivo – Altera o dono e o grupo do arquivo.
    • chown usuario arquivo – Altera apenas o dono.
    • chown :grupo arquivo – Altera apenas o grupo.
  • chgrp – Alterar grupo:
    • chgrp grupo arquivo – Altera o grupo do arquivo.

Permissões Especiais:

  • SUID (Set User ID):
    • Quando aplicado a um arquivo executável, o programa é executado com as permissões do proprietário, não do usuário que o executa.
    • Representação: s na permissão de execução do proprietário (ex: rwsr-xr-x).
    • Exemplo: chmod u+s arquivo.
  • SGID (Set Group ID):
    • Similar ao SUID, mas aplicado ao grupo. Também pode ser usado em diretórios para herdar o grupo do diretório pai.
    • Representação: s na permissão de execução do grupo (ex: rwxr-sr-x).
    • Exemplo: chmod g+s arquivo.
  • Sticky Bit:
    • Quando aplicado a um diretório, apenas o proprietário do arquivo pode excluir ou renomear arquivos dentro dele.
    • Representação: t na permissão de execução de outros (ex: rwxr-xr-t).
    • Exemplo: chmod +t diretorio.

Boas Práticas:

  • Use permissões restritivas por padrão e conceda acesso apenas quando necessário.
  • Evite usar chmod 777, pois concede acesso total a todos os usuários.
  • Monitore permissões de arquivos sensíveis, como scripts e arquivos de configuração.
  • Use permissões especiais (SUID, SGID, Sticky Bit) com cuidado para evitar vulnerabilidades de segurança.

Exemplo Prático:

# Alterar permissões de um arquivo
chmod 755 script.sh

# Alterar dono e grupo de um arquivo
chown usuario:grupo arquivo.txt

# Aplicar SUID a um arquivo
chmod u+s /usr/bin/programa

# Aplicar Sticky Bit a um diretório
chmod +t /diretorio_compartilhado
Logo UFPR

Bibliografia

Logo Licenciatura

- Silberschatz et al., Fundamentos de SOs, 8ª ed., LTC, 2010, Cap. 10.
- Tanenbaum, Sistemas Operacionais: Projetos e Implementações, 3ª ed., Prentice Hall, 2009, Cap. 4.
- Maziero, SOCM, Parte VI: Gestão de Arquivos (link).