Manter o sistema de arquivos separado dos dados

0

Isso pode ser um caso extremo, mas aqui vai ...

Estou recuperando dados de um disco rígido de 2 TB. É montável apenas se eu usar mount -r e estiver usando rsync --files-from para copiar diretórios importantes.

De vez em quando, ele falha e precisa ser reiniciado (powercycled). Eu gostaria que houvesse uma maneira de armazenar em cache toda a árvore de diretórios, e usar esse cache abrangendo várias montagens : em outras palavras, quando eu precisar remontar o disco, eu forneceria o cache a ser usado para o arquivo pesquisa em vez de fazer mais pesquisas no disco.

Considere como determinado que o disco não pode ser visualizado em sua totalidade (com dd ou ddrescue ) devido ao espaço de backup insuficiente.

    
por afuna 20.03.2018 / 22:57

1 resposta

2

A única maneira que eu vejo para fazer isso é independente do sistema de arquivos usado porque ele age na camada de bloco.

O que se deseja é um tipo de lvmcache: Clique no dispositivo e leia os metadados do sistema de arquivos ( find /path/to/mountpoint -perm 700 -printf "" ) para que ele seja copiado para o dispositivo de cache e depois congele o dispositivo de cache.

Infelizmente, parece que o lvmcache não tem essa função de congelamento.

Mas você pode fazer algo semelhante: você pode configurar um instantâneo. Você tem que fazer isso manualmente porque o LVM suporta apenas dentro de um grupo de volumes. Crie um instantâneo em um VG e dê uma olhada nos detalhes com dmsetup ls e dmsetup table para os dispositivos envolvidos. dmsetup não se importa se os dispositivos envolvidos pertencem a um grupo de volumes (ou são dispositivos LVM).

Geralmente você cria um instantâneo e continua usando o dispositivo principal. O estado anterior do dispositivo principal pode ser restaurado revertendo o instantâneo porque os dados originais são gravados no instantâneo antes de serem alterados no dispositivo original. Isto não é o que você quer. Você deseja minimizar os acessos ao dispositivo de origem. Assim, você não monta o dispositivo de origem (novo), mas o dispositivo de instantâneo.

Em seguida, você modifica todos os setores que contêm metadados para que eles sejam gravados no dispositivo de instantâneo. Mesmo se você escrever duas vezes (porque você altera os dados e depois os altera de volta ao seu estado original) para que os dados em si não sejam alterados, o setor mantém parte do dispositivo de instantâneo. Isso significa que é sempre lido a partir do dispositivo de instantâneo. Em caso de falha, basta restaurar a configuração dmsetup e o dispositivo de origem não será mais acessado por metadados.

Você pode precisar de um instantâneo bastante grande com um tamanho pequeno de cluster, no entanto. Mas você não precisa armazenar em cache todos os metadados do sistema de arquivos de uma só vez. Você pode configurar uma captura instantânea, armazenar em cache os metadados de uma árvore de diretórios, copiar todos os arquivos de lá, excluir a captura instantânea, criar uma nova e armazenar em cache os metadados da próxima subárvore. Você pode ver (IIRC com dmsetup status ) quanto do espaço do snapshot está em uso.

Para escrever os inodes, você pode alterar o registro de data e hora ( touch /path/to/file ), especialmente se não precisar do valor original. Ou você (talvez depois de escrever o valor original em algum lugar) executar, e. %código%. Para escrever todos os setores que pertencem a entradas de diretório, você pode renomear todos os arquivos (para algum nome não usado e vice-versa):

unique_suffix=4itxIIq5kyGhMVPJ
mv "$file" "${file}${unique_suffix}"
mv "${file}${unique_suffix}" "$file"

Não tenho certeza se o cache de páginas é inteligente o suficiente para detectar que não houve alteração, portanto você pode verificar se o instantâneo está realmente gravado em.

Estas operações em todos os arquivos devem ser feitas (talvez apenas para um subdiretório) com

find /path/to/mountpoint -type f -exec ... + # for chmod and mv
find /path/to/mountpoint -type d -exec ... + # for mv
    
por 23.03.2018 / 09:56