Questão de Sistemas Operacionais — Scripts em Unix e Linux — FUNDATEC 2023
- Código
- qa543596
- Banca
- FUNDATEC
- Órgão
- IFC
- Ano
- 2023
- Cargo
- Tec ( )
- ATotal.
- BIncremental.
- CEspelhado.
- DPessoal.
- ERemoto.
GabaritoB — Incremental.
Gabarito: letra B. Quando a linha 5 é verdadeira (o arquivo de controle existe), o script executa o rsync com --exclude-from=$ARQUIVO_DE_CONTROLE, que exclui da sincronização os arquivos já listados no controle — ou seja, copia apenas o que mudou desde o último backup, caracterizando um backup incremental. A lógica do script é: na primeira execução (arquivo de controle inexistente), faz um backup completo e gera a lista de arquivos; nas execuções seguintes, usa essa lista para excluir o que já foi copiado, copiando somente as alterações.
O backup incremental é uma estratégia de cópia de segurança que copia apenas os dados que foram criados ou modificados desde o último backup (seja ele completo ou incremental). Diferentemente do backup completo, que copia todos os dados a cada execução, e do backup diferencial, que copia tudo que mudou desde o último backup completo, o incremental é o mais econômico em termos de tempo e espaço de armazenamento, pois a cada execução copia apenas o delta de alterações. No script apresentado, o arquivo de controle (rsync_backup.control) armazena a lista de arquivos da origem na primeira execução (linha 10). Quando esse arquivo existe (linha 5 verdadeira), o rsync usa --exclude-from para pular os arquivos já listados, copiando somente os novos ou modificados — exatamente o comportamento incremental.
Na prática, considere uma pasta de origem com 100 arquivos. Na primeira execução, o arquivo de controle não existe, então o script faz um backup completo (copia os 100 arquivos) e gera a lista com os nomes deles. Na segunda execução, se apenas 5 arquivos foram alterados, o rsync com --exclude-from ignora os 95 inalterados e copia somente os 5 modificados. Isso reduz drasticamente o tráfego de rede e o tempo de backup, mas exige que todos os incrementos sejam mantidos para uma recuperação completa — a restauração precisa aplicar o backup completo original e, em sequência, cada incremento.
A distinção que importa aqui é entre incremental e diferencial. O backup incremental copia as alterações desde o último backup de qualquer tipo (completo ou incremental), enquanto o diferencial copia as alterações desde o último backup completo. No script, o controle é atualizado a cada execução (linha 10 roda sempre que o arquivo não existe, mas na prática o controle deveria ser atualizado também após o incremental para refletir o novo estado — embora o script como apresentado tenha essa limitação). A pegadinha da banca está em confundir o --exclude-from com um mecanismo de backup diferencial ou espelhado: o --delete presente nas duas chamadas do rsync é o que caracteriza a sincronização espelhada (o destino espelha exatamente a origem, removendo arquivos deletados), mas a presença do --exclude-from no ramo verdadeiro do if é o que define o tipo incremental — sem ele, seria um backup espelhado simples.
Guarde a fronteira entre os tipos de backup: o que decide é o critério de seleção dos arquivos a copiar. O backup total copia tudo; o incremental copia o que mudou desde o último backup (qualquer); o diferencial copia o que mudou desde o último completo; o espelhado mantém o destino idêntico à origem (com --delete). É exatamente nesse critério que as alternativas se dividem.
Critério | Backup Incremental (linha 5 verdadeira) | Backup Total/Espelhado (linha 5 falsa) |
|---|---|---|
Arquivo de controle | Existe ( | Não existe ( |
Opção usada no rsync |
| Sem |
O que é copiado | Apenas arquivos novos/modificados desde o último backup | Todos os arquivos da origem |
Efeito do | Mantém destino espelhado apenas para os arquivos não excluídos | Mantém destino como réplica exata da origem |
Tipo de backup resultante | Incremental | Total (primeira execução) / Espelhado (execuções sem controle) |
O backup total (ou completo) copia todos os dados da origem para o destino a cada execução, sem excluir nada. No script, o ramo else (linha 8) faz isso na primeira execução, quando o arquivo de controle não existe. Mas a pergunta é sobre a linha 5 verdadeira, ou seja, quando o controle já existe — e nesse caso o --exclude-from impede a cópia total, copiando apenas as alterações. A alternativa confunde o comportamento da primeira execução com o das execuções subsequentes.
Quando a linha 5 é verdadeira, o rsync usa --exclude-from=$ARQUIVO_DE_CONTROLE, que exclui da sincronização todos os arquivos listados no controle — ou seja, os arquivos que já foram copiados em execuções anteriores. O rsync copia então apenas os arquivos novos ou modificados desde o último backup, que é a definição exata de backup incremental. O arquivo de controle, gerado na primeira execução (linha 10), funciona como um registro do que já foi copiado, permitindo que as execuções seguintes copiem somente o delta de alterações.
O backup espelhado (mirror) mantém o destino como uma réplica exata da origem, usando a opção --delete para remover do destino os arquivos que não existem mais na origem. Embora o script use --delete nas duas chamadas do rsync, a presença do --exclude-from no ramo verdadeiro do if altera o comportamento: os arquivos listados no controle são excluídos da sincronização, então o destino não é uma réplica exata da origem — ele fica desatualizado em relação aos arquivos que foram excluídos da cópia. O espelhamento puro ocorreria apenas no ramo else, sem o --exclude-from.
"Backup pessoal" não é um tipo de backup reconhecido na literatura de cópias de segurança. Os tipos clássicos são: completo (total), incremental, diferencial e espelhado. A alternativa é um distrator sem fundamento técnico, provavelmente incluída para testar se o candidato conhece a nomenclatura correta dos tipos de backup.
O backup remoto refere-se ao local de armazenamento do backup (em um servidor ou localização geograficamente distante), não ao tipo de backup. No script, o rsync copia de $ORIGEM/ para $DESTINO/, que podem ser diretórios locais ou remotos (se $DESTINO fosse um caminho com user@host:), mas a questão pergunta sobre o tipo de backup, não sobre o local. A alternativa confunde a dimensão "onde o backup é armazenado" com a dimensão "o que é copiado".
Gabarito: letra B — quando o arquivo de controle existe, o --exclude-from faz o rsync copiar apenas as alterações desde o último backup, caracterizando um backup incremental.
Link permanente: /questoes/qa543596