Como criar um sistema de arquivos s3ql e montá-lo automaticamente na inicialização?

4

Eu tenho experimentado com o s3ql no Ubuntu 10.04, usando-o para montar os buckets do Amazon S3. No entanto, eu realmente gostaria de montá-los automaticamente. Alguém sabe como fazer isso?

Solução:

Graças à ajuda de Nikratio de s3ql , finalmente posso montar automaticamente baldes S3 quando o sistema é inicializado. Você definitivamente vai querer olhar para o manual , mas aqui está o básico de como fazer isso!

O primeiro passo é criar um arquivo authinfo. Esse arquivo deve ser colocado em um diretório .s3ql dentro do diretório inicial do usuário que o utilizará. O arquivo authinfo contém informações de login, permitindo que o s3ql monte os buckets sem avisar. Abaixo está um exemplo de como deve ser seu arquivo authinfo. A primeira linha contém suas credenciais de segurança da Amazon. O segundo contém o local e a senha do seu intervalo. Você pode adicionar várias linhas de depósito a esse arquivo, se necessário, mas estou usando apenas um neste exemplo. Nesse ponto, a senha do intervalo pode ser qualquer coisa.

backend s3 machine any login YourAWSAccessKeyID password YourAWSSecretAccessKey
storage-url s3://mybucket password EncryptionPasswordOfYourChoosing

O encryption_password_of_your_choosing é usado pelo S3QL para criptografar / descriptografar todas as gravações / leituras de arquivos do S3.

O nome do intervalo precisa ser único em toda a AWS: dois usuários não podem ter o mesmo nome de intervalo, por isso é uma boa ideia entrar no Amazon Web Services e tentar nomes diferentes até encontrar um que esteja disponível. Um bom esquema de nomenclatura é usar o nome do domínio + servidor do qual você acessará o bloco (por exemplo, "staging.example.com" ou "east.coast.01.example.com", ou o que for apropriado).

Para criar o sistema de arquivos, use o comando:

mkfs.s3ql s3://mybucket

Ele solicitará sua senha de criptografia. Isso deve ser o mesmo que a senha do intervalo no arquivo authinfo.

Agora que seu sistema de arquivos foi criado, você pode montá-lo usando o comando:

mount.s3ql s3://mybucket /mnt/s3/bucket

É claro que o nome do seu intervalo e o ponto de montagem variam.

Agora, se quisermos montar esse bucket automaticamente na inicialização, precisamos adicionar um script upstart ao / etc / init. Felizmente, o s3ql vem empacotado com um, s3ql.conf.

Eu adicionei "--allow-other" ao comando mount.s3ql para permitir que usuários além do root acessem o bucket montado.

#
# This file can be placed in /etc/init. It defines an upstart job that
# takes care of mounting and unmounting an S3QL file system.
# 
description "S3QL Backup File System"
author      "Nikolaus Rath <[email protected]>"

start on (filesystem and net-device-up IFACE=eth0)
stop on runlevel [016]

env BUCKET="s3://mybucket"
env MOUNTPOINT="/mnt/s3/bucket"

expect stop

script
    # Redirect stdout and stderr into the system log
    DIR=$(mktemp -d)
    mkfifo "$DIR/LOG_FIFO"
    logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" &
    exec > "$DIR/LOG_FIFO"
    exec 2>&1
    rm -rf "$DIR"

    # Check and mount file system
    fsck.s3ql --batch "$BUCKET"
    exec mount.s3ql --upstart --allow-other "$BUCKET" "$MOUNTPOINT"
end script

pre-stop script
    umount.s3ql "$MOUNTPOINT"
end script

Depois de adicionar esse script, em teoria você deve poder reinicializar e ter o seu bucket montado automaticamente, mas isso é porque eu tive problemas. O meu não estava sendo montado.

Meu problema foi causado pelo fato de que o upstart estava executando o script como root, mas eu criei o sistema de arquivos como outro usuário. Depois que eu copiei o diretório .s3ql do diretório home do usuário que eu estava logado como / root, o problema foi resolvido.

Espero que isso ajude alguém lá fora. Embora eu não tenha usado meu balde S3 montado por muito tempo, estou impressionado com a forma como meus testes iniciais foram feitos.

Além disso, esta resposta foi escrita cerca de uma semana após a solução ter sido encontrada. Acho que cobri tudo, mas se você perceber que eu perdi um passo, me avise e adicionarei. Você também vai querer ler o manual , vale a pena lê-lo se você pretende usar s3ql.

    
por ks78 08.01.2011 / 09:00

2 respostas

1

Com a ajuda de Nikratio, finalmente posso montar meu balde S3 automaticamente na inicialização. Atualizei minha pergunta com a solução.

    
por ks78 22.01.2011 / 19:03
0

Modernas instalações do Ubuntu usam o sistema upstart orientado a eventos durante grande parte do processo de inicialização, então é melhor mover a inicialização para isso. Você teria um script em / etc / init que seria parecido com isto:

description     "S3FS"

start on (filesystem
        and net-device-up IFACE!=lo)
stop on runlevel[!2345]

console output
expect fork
respawn

script
    # Redirect stdout and stderr into the system log
    DIR=$(mktemp -d)
    mkfifo "$DIR/LOG_FIFO"
    logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" &
    exec > "$DIR/LOG_FIFO"
    exec 2>&1
    rm -rf "$DIR"

    modprobe fuse
    fsck.s3ql --batch s3://mybucket
    exec mount.s3ql --allow-other s3://mybucket /mnt/s3fs
end script

Você terá que fazer algum trabalho de teste - não sei como o redirecionamento de saída para o registro se comportará, e talvez seja necessário configurar um script de pós-inicialização para desmontar corretamente o sistema de arquivos.

A documentação do upstart é aqui . Ainda não encontrei um pacote baseado em FUSE que o use, mas não fiz uma pesquisa exaustiva.

Uma alternativa pode ser construir uma entrada fstab para o sistema de arquivos, de modo a deixar as entradas mountall para cuidar de montá-las para você, mas não sei se existe uma maneira de especificar que um determinado FUSE sistema de arquivos depende da rede.

    
por John Morton 09.01.2011 / 01:59