Como posso “sombrear” o sistema de arquivos no Linux?

4

Em um ambiente Linux, às vezes, preciso executar um script como root, o qual adicionará / modificará arquivos serveral no meu fs.

Basicamente eu gostaria de saber exatamente quais arquivos são modificados e como sem abrir o script e tentar adivinhar o código.

Eu estava pensando em usar algo parecido com unionfs: o fs principal seria acessível no modo readonly e todas as alterações são escritas em um arquivo usado como uma partição e "montado" no modo de gravação.

Existem outras maneiras de atingir o mesmo objetivo (ou seja, diferente de unionfs)?

    
por Emiliano 13.01.2011 / 11:25

5 respostas

1

Um exemplo para a solução LVM mencionada anteriormente.

Advertência: O sistema de arquivos que você deseja diff deve estar em um volume lógico lvm! (E você tem que ter algum espaço livre no disco.)

# lvcreate --size 2G --name your-fs-snapshot --snapshot /dev/vg0/your-fs 
  Logical volume "your-fs-snapshot" created

Isso tira um instantâneo de / dev / vg0 / your-fs naquele momento. Em seguida, faça as alterações que você deseja registrar.

Você pode montar seu instantâneo como uma cópia do seu-fs no estado original e diferenciá-lo com a ferramenta de sua escolha, por exemplo, diff.

# mount /dev/vg0/your-fs-snapshot /mnt
# diff -q /original/volume/subdir /mnt/subdir

Não se esqueça de desmontar e remover seu instantâneo, pois, ao fazer isso, as alterações no volume original são registradas como diffs reversos no instantâneo, até que ele seja preenchido.

# umount /mnt
# lvremove /dev/vg0/your-fs-snapshot 
Do you really want to remove active logical volume your-fs-snapshot? [y/n]: y
  Logical volume "your-fs-snapshot" successfully removed

Dica: Se o seu volume lógico contiver uma tabela de partições, você poderá adicionar entradas de dispositivos por meio de:

# kpartx -av /dev/vg0/your-disk-snapshot
    
por 13.01.2011 / 15:53
5

Você pode criar um instantâneo LVM, em seguida, montar o instantâneo, executar o script, em seguida, fazer uma comparação entre o instantâneo e o original.

    
por 13.01.2011 / 11:50
4

Antes das sofisticadas tecnologias de captura instantânea e rastreamento de hoje, as pessoas resolviam esse problema por meio do uso inteligente da variável de ambiente LD_PRELOAD , que permite substituir as funções da biblioteca C por suas próprias substituições (chamadas interposição de funções ). Nessa situação, você envolveria a chamada de sistema open() e, quando arquivos forem abertos para gravação, você poderia:

  • Preserve o original (por exemplo, com uma extensão .bak ou algo assim)
  • Permitir que o instalador substitua
  • Produza um diff do original vs. a versão modificada.

O programa installwatch é um exemplo desse tipo de coisa. Existem muitos outros exemplos desse tipo de solução, e há também muitas outras maneiras de usar LD_PRELOAD para modificar o comportamento de programas binários.

    
por 13.01.2011 / 15:01
1

Isso soa como algo que o systemtap pode ser bom. Aqui está uma postagem do blog onde alguém escreveu um script de systemtap que imprimirá todos os arquivos que um usuário abrir. Uma coisa a ter em mente é que não é específico para um processo, portanto, se você estiver executando o script como um usuário que está fazendo muitas outras coisas, isso pode ser bastante barulhento; algumas modificações podem ser necessárias. Porém, é um começo.

    
por 13.01.2011 / 14:27
1

Você também pode querer olhar para o inotify, que permitirá monitorar os eventos do sistema de arquivos conforme eles ocorrem. É semelhante ao framework fsevent do OS X. A maioria das distros terá um pacote inotify-tools.

    
por 14.01.2011 / 11:33