DigitalOcean Block Storage: Aprenda como adicionar mais espaço ao servidor

Recentemente a Digital Ocean começou a ofertar Block Storage para os Droplets possibilitando aumentar a capacidade de armazenamento dos servidores sem necessidade de fazer upgrade do VPS inteiro, o que era muito expensivo.

Block Storages são unidades de armazenamento que podem ser acopladas a um servidor, e o melhor é que, além de ser possivel customizar o tamanho variando entre 1Gb e 16Tb, também podemos fazer resize da unidade ou adicionar outra ao mesmo Droplet (a Digital Ocean permite acoplar até 5 unidades de armazenamento para cada VPS).

Eu testei a novidade e posso dizer que podemos tirar grande proveito se soubermos como aplicar em nosso site ou projeto pois o custo por Gb em SSD é de apenas $ 0,10 ao mês.

Imagine um cenário onde o seu site tem muitos arquivos e fotos, digamos milhares de fotos. Neste caso você teria que alugar um servidor maior, que nunca é barato, ou migrar o site para uma hospedagem compartilhada retornando aos dias de sofrimento com suporte e site offline. Com o Block Storage e alguns truques podemos linkar a nova partição com a pasta de fotos.

Em outro diferente cenário podemos usar a unidade montada para manter backup de um projeto ou de todo o servidor, usando rsync e o cron pode-se facilmente criar uma rotina agendada para isso. E ainda, num terceiro cenário de exemplo, poderíamos instalar o OwnCloud e linkar o diretório de armazenamento de arquivos para a unidade acoplada, desta maneira quando o volume de arquivos crescer é só fazer o resize para o tamanho que desejar criando o seu próprio Dropbox escalonável.

Uma outra vantagem de se usar armazenamento acoplado é que, se destruirmos o servidor por qualquer motivo, a unidade continuará no painel da conta com todos os arquivos, aguardando para ser adicionada à um Droplet novamente, e quando montarmos a partição os arquivos estarão lá.

Se você ainda não é assinante da Digital Ocean clique neste link e ganhe um bônus de $10 dólares para gastar em hospedagem. *O bônus é real e imediato após o primeiro depósito de pelo menos $5. (Algumas empresas oferecem bônus mas para usá-lo é necessário cumprir vários requisitos).

Block Storage: Como adicionar espaço em disco no VPS

* Este tutorial foi testado em nosso servidor Debian 8 Jessie com ISPConfig 3 e NginX, clique aqui e veja como instalar.

Adicionando um Block Storage

A Acesse o painel da sua conta na Digital Ocean e clique em um Droplet que esteja em NYC1 ou SFO2. Neste mês de lançamento eles ofertam o novo serviço somente nesses datacenters.  *Caso o seu VPS não esteja nos datacenters que ofertam Block Storage pode-se migrá-lo para um que tenha.

B Clique no menu Volumes e no botão “Attach a volume“.. Na tela que abrirá pode usar o nome padrão para a unidade (deixe o padrão para seguir o tutorial), e no espaço a adicionar digite um número (em Gb), exemplo 50. Com isso criaremos uma unidade de 50Gb em SSD que custará apenas $5 por mês. Note que logo abaixo do volume há um checkbox marcado indicando que a nova unidade será acoplada ao Droplet automaticamente. Clique em “Create“.

2 Montar e usar a partição no sistema

Para podermos usar a unidade é necessário montar e formatá-la. Acesse o console SSH como superusuário root para digitar os comandos abaixo (ou se tiver adicionado um usuário operador com permissões elevadas pode acessar com ele mas não esqueça de adicionar “sudo” ao início dos comandos)

Logo após clicarmos no botão para criar o Block Storage uma janela popup exibe os comandos que teremos que digitar para montar a unidade, vou relacioná-los abaixo:

*Irei negritar em vermelho o nome da partição caso você tenha alterado o nome padrão ou criado uma segunda partição.

A Neste exemplo vamos formatar o volume usando o sistema de arquivos “ext4“.   ATENÇÃO: Todos os arquivos da unidade adicionada serão apagados, se estiver vinculando um Block Storage que já havia sido desvinculado de outro servidor NÃO execute este comando pulando para o passo 2B 

ssh# mkfs.ext4 -F /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01

B Para montar o volume formatado digite os seguintes comandos (note que montaremos no diretório /mnt mas poderia ser em qualquer lugar do sistema. Posso explicar melhor isso nos comentários caso haja dúvidas)

ssh# mkdir -p /mnt/volume-nyc1-01

ssh# mount -o discard,defaults /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01 /mnt/volume-nyc1-01

C Temos ainda que adicionar a partição ao fstab para que seja montada automaticamente quando o sistema reiniciar

ssh# echo '/dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01 /mnt/volume-nyc1-01 ext4 defaults,nofail,discard 0 0' | tee -a /etc/fstab

D Verifique se a partição foi adicionada corretamente. Caso apresente erro reveja os passos acima:

ssh# cat /etc/fstab

ssh# mount -a

ssh# df -h -x tmpfs -x devtmpfs

* Após executar todos os passos o volume poderá ser acessado em /mnt/volume-nyc1-01 e poderemos usá-lo normalmente como uma pasta do sistema.

** Dentro do diretório montado há um subdiretório chamado “lost+found“, ele é usado pelo fsck em caso de problemas com arquivos na incialização. O fsck faz a verificação do sistema quando há desligamento incorreto do servidor ou falhas na partição. Não delete esse subdiretório.

3 Resize da partição

Explicarei nesta parte do artigo como fazer um resize de um Block Storage. Isso pode ser usado para casos em que a partição foi adicionada mas terá que ser redimensionada para servir mais espaço. *Como eu disse anteriormente você pode também adicionar outra partição, o limite é de 5 partições por Droplet.

Siga os passos abaixo tendo em mente que somente é possível fazer o resize aumentando o espaço da partição, não há como reduzir o tamanho.

A No painel da Digital Ocean, na linha do Block Storage, há um menu de ação para aquele Block, clique nele e selecione “Resize Volume“. Digite a nova capacidade para o volume e clique no botão de Resize.

B No console SSH, logado como root, digite os comandos abaixo:

# Este comando irá redimensionar automaticamente o volume caso o sistema de arquivos seja ext4
ssh# resize2fs /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01

# Para listar a partição e verificar o novo tamanho digite
ssh# df -h -x tmpfs -x devtmpfs
4 Excluir ou desvincular uma partição

Para excluir, desvincular ou simplesmente destruir o Block Storage siga os passos abaixo.

A Liste os volumes montados

ssh# df -h -x tmpfs -x devtmpfs

B Verifique se existe algum processo gravando arquivos na partição, se houver interrompa o programa ou aguarde o fim da gravação

ssh# lsof +f -- /mnt/volume-nyc1-01

C Desmonte a unidade

ssh# cd /root

ssh# umount /mnt/volume-nyc1-01

D Edite o arquivo /etc/fstab e remova a linha que adicionamos no passo 2C para que a unidade seja montada automaticamente na reinicialização do sistema

#/dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01 /mnt/volume-nyc1-01 ext4 defaults,nofail,discard 0 0

E No painel da conta da Digital Ocean desvincule o Block Storage do Droplet. Se não for usá-lo, e tiver certeza de que não precisa dos arquivos da partição, então destrua-o.

Observação: O espaço vinculado ao Droplet não será incluido à rotina de backup daquele VPS. Se quiser manter cópia de segurança dos arquivos da partição a melhor opção é criar outro Block Storage do mesmo tamanho e fazer um rsync.

Feito! Agora você já pode criar aquele mega site cheio de fotografias e outras tolices.. 🙂

Índice do Tutorial:

Gestão em infraestrutura de Servidores Cloud VPS e Dedicados. Planos mensais acessíveis e consultoria diferenciada para agências de marketing.
Envie um email para [email protected] e solicite uma análise gratuita!

  • Opa Luis! Show de bola o tutorial, mas fiquei interessado em uma questão…

    Configurei na Vultr um server em um data center de miami pois a latência é menor aqui para o Brasil e assim como na digital ocean os storages deles só estão disponíveis em apenas dois data centers (Los Angeles e Nova York) e futuramente com o crescimento da quantidade de fotos coletadas pela minha aplicação vou precisar aumentar o espaço de armazenamento, mas não queria migrar para outro data center por conta dessa questão da latência e aí você disse algo no tutorial que achei interessante…

    “E ainda, num terceiro cenário de exemplo, poderíamos instalar o OwnCloud e linkar o diretório de armazenamento de arquivos para a unidade acoplada, desta maneira quando o volume de arquivos crescer é só fazer o resize para o tamanho que desejar criando o seu próprio Dropbox escalonável.”

    Pelo que entendi, usando esse “OwnCloud” é possível linkar, por exemplo, a pasta “uploads” da minha intalação wordpress em miami para armazenar as fotos cadastradas no storage localizado em Nova York ou Los Angeles? É isso mesmo?

  • O menu “Volumes” só habilita quando o VPS está numa localidade onde há disponibilidade de Storage para ele, então você não conseguiria acoplar ele em locations que não seja ofertado.

    Existe outras maneiras de se fazer isso mas essa do Block Storage no servidor é a mais rápida e melhor.

    Sua preocupação é com o latency ping mas lembre sempre que é só milisegundos.. tenho visto a galera se preocupar com latency e quando abro o site ele está com temas pesados e plugins arcaicos atrasando o site, e erroneamente eles acham que é a latência. Hoje mesmo fiz uma auditoria num site de cliente onde a culpa da loja demorar um segundo para abrir era de um plugin que colocava icones de compartilhamento abaixo de cada produto, desligou o plugin e agora abre em 0.125ms novamente.

    *Fiz alguns trabalhos para clientes na Vultr recentemente, a história de que o I/O deles é melhor provavelmente foi escrita por alguém que não testou os serviores em um projeto real.

  • Bacana! Legal escutar outro ponto de vista porque eu comecei a pouco tempo pesquisar sobre essas coisas e sempre fiquei com uma pulga atrás da orelha vendo o pessoal (nos grupos de discussão) obcecado com milisegundos…

    A minha aplicação está abrindo em menos de 2 segundos, mas não fiz nenhuma otimização ainda (tipo minificar CSS/JS e outras coisas) pq estou desenvolvendo ainda.

    Mas com base na sua resposta, acredito que após aplicar algumas técnicas de otimização e instalar o cloudflare para entregar arquivos estáticos mais rapidamente, esse tempo melhore bastante, mesmo que em um DC mais longe.

    Acho que agora vou migrar logo pra um DC que dê suporte para storage e assim já deixo tudo preparado para escalonar a aplicação de um jeito rápido e prático quando for necessário.

    Muito obrigado pela resposta, ajudou bastante! =)

    P.S: Quando optei pela Vultr, o que mais levei em consideração nem foi a questão do I/O, mas sim o fato deles terem essa opção de storage (que agora a digital ocean tbm tem) e o server de entrada ter mais memória.

  • Com certeza o seu APP abrirá mais rápido sim, tenho servidores configurados em NYC pela Digital que abrem catálogos OpenCart e Magento em menos de meio segundo.

    Na CloudFlare cuidado com o Rocket Loader, aquilo dá muitos problemas com temas e plugins.

    Se futuramente achar que ainda está lento faça um teste na Digital, instalei Vultr para alguns clientes e levei uns 30% mais de tempo só para baixar pacotes e fazer o deploy por causa de delays de rede e disco. E teve um caso onde precisei fazer um rsync de site de um servidor dedicado para o VPS da Vultr e a conexão simplesmente diminuiu para 50kbps, não era problema no dedicado da outra empresa porque acabei tendo que baixar para o meu PC primeiro.

  • Pow Luis vlw d+++ pelas dicas!

    Se tiver problemas de velocidade farei uns testes na Digital Ocean sim, já que agora eles tbm tem storage pelo mesmo valor…

    Em relação ao Rocket Loader eu utilizo ele em um site meu sem problemas, uso o Genesis Framework para construção de temas, mas já li que realmente dá problema em alguns temas e plugins. Deve ser pq esse recurso deles ainda está em fase BETA, mas com temas simples e com os plugins que utilizo, até agora não tive problemas.

  • Opa Luis! Eu aqui de novo te perturbando… hehe

    É o seguinte: eu criei um block storage, mas toda vez que eu faço o “attached” pro meu servidor, todos os sites instalados nele retornam a página “Apache2 Debian Default Pag” – para ver a página retornada, acesse: http://mensure.me/ – e esse servidor eu configurei seguindo o seu tutorial “Debian 8 x64 com ISPConfig e NginX”.

    Se eu remover block storage “attached” e reiniciar o servidor, tudo volta a funcionar normalmente e para de retornar essa página, mas aí fico sem o espaço extra! Entrei em contato com o suporte da Vultr e me disseram que isso é um problema nas configurações do servidor web.

    Você tem alguma ideia do que possa estar acontecendo? Será que é alguma configuração do Ngnix mesmo? Grato desde já… =)

    P.S: Também não entendi porque retorna essa página do “Apache2” já que o server está configurado com Ngnix.

  • Acho que você ter adicionado espaço extra e reiniciar o servidor ou outro serviço foi uma coincidência com outra configuração.

    O que acontece é que o mantenedor daquele script de instalação do ISPConfig instala o Apache e o NginX, e na inicialização do servidor o Apache deve estar carregando primeiro.

    Eu publiquei um fix para isso no paso 6 neste link: https://fatorbinario.com/tutorial-debian-8-x64-com-ispconfig-e-nginx-otimizando-a-instalacao/

    Mas basicamente você tem que dar um stop no Apache e reiniciar o NginX.

    > /etc/init.d/apache2 stop
    > /etc/init.d/nginx restart

    Mas altere também o /etc/rc.local daquela forma.

  • Vlw Luiz… você é o cara! =)

    Era isso mesmo, alterei o “/etc/rc.local”, reiniciei o server para testar e tudo voltou ao normal…

    Brigadão!

  • Aproveitando mais um pouco da sua boa vontade, vamos lá…

    “Para montar o volume formatado digite os seguintes comandos (note que montaremos no diretório /mnt mas poderia ser em qualquer lugar do sistema. Posso explicar melhor isso nos comentários caso haja dúvidas)”

    A dúvida é a seguinte: se eu quiser montar esse volume para armazenar todos os arquivos de “wp-content/uploads” de APENAS UMA instalação/domínio wordpress – que se encontra dentro da pasta “/var/www” – como eu deveria fazer?

    Em outras palavras: se eu quiser usar esse volume para armazenar apenas uploads de um site específico em meu servidor, como eu deveria montar esse volume? Estou perguntando pq a minha ideia é criar no painel da Vultr um storage adicional por domínio – “storage.meudominio.com” – para armazenar apenas os uploads do domínio em questão.

  • Monte naquele diretorio normal mesmo, exemplo /mnt/volume-nyc1-01

    Depois de montado e configuado acesse o diretório, e dentro dele crie uma pasta chamada meusiteuploads (por exemplo).

    E para fazer fucnionar como uma pasta do WordPress faça um link simbólico da pasta dentro do mount para o uploads do site, lembre-se de copiar os arquivos do WP que já estão na uploads para o /mnt/volume-nyc1-01/meusiteuploads

    Para criar o link simbólico será necessário excluir a pasta wp-content/uploads. Em seguida chame o diretório wp-content daquele site, e dentro dele onde estava a pasta uploads crie o link simbolico, exemplo:

    ln -s /mnt/volume-nyc1-01/meusiteuploads uploads

    *Note ali que só coloquei “uploads” como destino do link simbólico porque como eu disse você deve carregar o diretório wp-content do site para digitar o comando.

    *Sempre faça um backup de tudo antes de fazer essas ações, e teste exaustivamente para caçar quaisquer possiveis bugs..

    Agora quando você chamar wp-content/uploads a pasta do mount será carregada.

  • Executei todo o processo conforme descrito acima, mas o site aonde o atalho “uploads” foi criado não consegue acessar a pasta “meusiteuploads” na unidade montada. Se eu estiver logado no servidor como ROOT e acessar a pasta do site o atalho funciona…

    Mas direto pelo site (tentei via FTP do domínio tbm) não funciona, pois o usuário do site está em Jail conforme você recomenda no tutorial. Nesse caso eu teria que dar permissão ou configurar algo mais? O que seria?

    Desculpe pelo excesso de perguntas, mas é que realmente estou panguando! hehe

  • Consegui!! =D

    Depois de pesquisar muito, vi muita gente falando que tinha o mesmo problema e que tbm não conseguiam criar esse link simbólico em usuários Jail. Sendo assim, seguindo a nomenclatura utilizada por vc nesse post, a solução seria algo do tipo:

    mount –bind /mnt/volume-nyc1-01/meusiteuploads /var/www/meudominio.com/web/wp-content/uploads

    E para tornar permanente é só adicionar essa linha no “/etc/fstab”:

    /mnt/volume-nyc1-01/meusiteuploads /var/www/meudominio.com/web/wp-content/uploads none bind 0 0

    Assim o bind entre as pastas se mantém mesmo que o servidor reinicie. O “mount –bind” não duplica a pasta, mas cria uma visualização do MESMO conteúdo em um outro lugar e aí tudo que postado na pasta de uploads do wordpress (mesmo em Jail) fica armazenado no volume adicional.

    Escrevi bem detalhado pq pode ser que alguém tenha o mesmo problema e a resposta ajude…

    Bridagão pelas dicas Luiz!

    P.S: a minha principal referência foi essa aqui: http://unix.stackexchange.com/questions/198590/what-is-a-bind-mount

  • Era só ter mudado o dono e grupo da pasta no mount para o mesmo do Jail, exemplo:
    chown web1:client0 /mnt/volume-nyc1-01/meusiteuploads

    *E cuidado para não mudar as permissões da pasta para 777, nunca faça isso. Deixe ela com as mesmas permissões que estava a uploads do WP.

  • Putz! Eu tinha dado permissão 0777 na pasta do mount para funcionar, mas voltei a permissão e deixei do mesmo jeito que é na pasta uploads do wordpress. Desse jeito funciona com link simbólico tbm (como você disse) e nem precisava ter mudado, mas eu deixei esse esquema aí do “mount –bind” mesmo pq já tinha perdido muito tempo pra “descobrir” ele… hahaha

    É bom que agora conheço duas maneiras de se fazer a mesma coisa! =)

    Obrigado Luiz! Sou completamente inexperiente nessa questão de servidores, permissões, configurações e tudo mais, mas tenho aprendido bastante com seus tutoriais e respostas aqui nos comentários….

    Abração!

  • Valeu Glauber, e obrigado por contribuir nos comentários.. pode não parecer mas isso melhora o ranking do site.

    O método com bind dá certo no seu projeto mas imagine como ficaria se você tivesse vários sites no mesmo servidor e tentar usar a partição para eles também. Por isso que deixar com link simbólico é a melhor opção.

    Pode sempre perguntar aqui no Fator quando tiver dúvidas, há muitas loucuras e bruxarias pela internet que podem colocar seu servidor inteiro em risco. Por exemplo, se você criar uma pasta com permissões de root e der chmod 777 o cara coloca um executável disfarçado de JPG e executa com poder elevado.. calcule os estragos.

  • É… vou ficar mais ligado nessa questão das permissões para não deixar nenhuma brecha. No caso desse exemplo de ter vários sites usando a mesma partição teria que montar uma pasta específica para cada site dentro da partição e adicionar as instruções para cada um no “/etc/fstab” também. Realmente, nessa situação, seria mais prático criar um link simbólico para cada site mesmo.

  • Isso. Pelo método com bind seria bem complicado.

    *A Digital Ocean liberou a partir de hoje o Live Snapshot que facilita tirar um backup do servidor inteiro sem desligar. Você que gosta dessas novidades dá uma olhada depois: https://fatorbinario.com/comunidade/topico/digital-ocean-agora-permite-gravar-snapshots-sem-desligar-o-servidor/

  • Bacana!

    Já conhecia esse recurso, usei ele pra migrar meu servidor essa semana pra NY (pra conseguir usar o blockstorage) e uso ele com frequência tbm pra fazer BKPs. Na Vultr tbm não precisa desligar o server.

    P.S: o ping com o server em NY está retornando mais rápido do que quando estava em Miami. Realmente aquela parada da latência que falamos em um outro comentário não merece todo excesso de preocupação que se vê por aí.

  • New York é top, fique tranquilo.

    Participei de uma discussão sobre latency ping no mês passado. O mais engraçado é que o cara que falava mal dos VPS em New York ofertava revenda de hospedagem pela OVH.. você precisava ver quanta abobrinha postaram.

    Me divirto mais quando eles começam a discutir sobre isso como se fosse o fim do mundo, ae você abre o site da revenda do cara e está hospedado na Hostgator.. kkkkk

  • hahaha Tenso! Já vi umas discussões desse tipo também por aí, mas prefiro nem participar… O complicado é que muita gente que ta iniciando e n tem mt conhecimento ainda, acaba caindo nessas pegadinhas.