Aplicarei a prática de tunar os sistemas de arquivos ext3 e ext4 na mesma página, pois o procedimento é igual para ambos os F.S. Usarei o journal
externo e interno para ambos.
Mas não aplicarei as alterações antes da instalação do sistema operacional usado, e sim depois da instalação. Pois além de ser possível, é viável, já
que muitos administradores de sistemas e usuários usam estes sistemas de arquivos como padrão em suas instalações.
Apresentando particionamento usado para aplicar as alterações:
- Partição: /dev/sda1 com sistema de arquivos ext3 - Diretório root "/";
- Partição: /dev/sda2 com sistema de aquivos ext4 - Diretório home "/home";
- Partição: /dev/sda5 - Swap;
- Partição: /dev/sdb1 - Partição usada para armazenar o journal externo da partição /dev/sda1;
- Partição: /dev/sdb2 - Partição usada para armazenar o journal externo da partição /dev/sda2.
Caso tenha um particionamento diferente em sua máquina e/ou servidor, poderá fazer as operações do mesmo jeito. Porém, aconselho que antes de
aplicar as alterações em uma máquina que está em produção, faça em uma máquina de testes, para poder avaliar quais alterações podem adequar-
se às suas necessidades.
Tunando o ext3 e ext4 usando journal externo
Usando este esquema de particionamento apresentado e supondo que a instalação já foi feita com sucesso, vamos às alterações necessárias para
usar journal externo. Tenha em mãos um LiveCD para executar os passos seguintes.
1. Certifique-se que o sistema de arquivos onde está instalado o sistema esteja desmontado. E em seguida, verifique o tamanho do bloco das
partições do sistema usando os comandos descritos abaixo:
# tune2fs -l /dev/sda1 |grep -i "block size"
# tune2fs -l /dev/sda2 |grep -i "block size"
É necessário saber qual o tamanho do bloco do sistema de arquivos de cada partição que terá seu journal externo, porque cada partição que
armazenará os logs precisará ter o mesmo tamanho de bloco.
2. Prepare as partições que receberão os journals:
# mke2fs -O journal_dev /dev/sdb1 -b 4096 -L journal-ext-sda1 105500
# mke2fs -O journal_dev /dev/sdb2 -b 4096 -L journal-ext-sda2 105500
As opções passadas ao comando mke2fs foram:
- -O : Esta opção indica que irá ser adicionado e/ou removido do sistema de arquivos características específicas, ou seja, será
habilitado alguns comportamentos com personalização. Diferentemente de quando usa-se os padrões na aplicação de uma sistema de arquivos.
- journal_dev: Indica qual partição será preparada e usada para armazenar o journal de outra partição.
- -b: Indica o tamanho do bloco do sistema de arquivos criado. Neste caso, o tamanho do bloco deve ser o mesmo da partição que
contém o sistema, pois estas partições "/dev/sdb1" e "/dev/sdb2" irá armazenar os journals das partições "/dev/sda1" e "/dev/sda2".
- -L: Este parâmetro é opcional, pois o mesmo adiciona um rótulo, ou seja, um nome da partição para identificação.
E por fim, o número indicado no fim é o tamanho do journal em blocos. Para calcular corretamente o tamanho do journal armazenado, tenha em mente que foi usado 4096 bytes de tamanho para
cada bloco,
que equivale a 4 kbytes para cada. No comando anterior especifiquei 105500 blocos reservados para o journal, e cada bloco com o tamanho de 4096 bytes (4 kilobytes) configurado na linha de
comando.
Então o tamanho do log é: 105500 x 4 / 1024, que equivale um pouco mais de 412 megabytes.
3. Agora, faça o ext3 e ext4 não terem mais journal interno, para poderem usar os que foram criados anteriormente.
# tune2fs -O ^has_journal /dev/sda1
# tune2fs -O ^has_journal /dev/sda2
Verifique se as partições ainda têm journal:
# tune2fs -l /dev/sda1 | grep -i has_journal
# tune2fs -l /dev/sda2 | grep -i has_journal
Veja na imagem anterior, que os dispositivos não tem mais journal.
4. Anexe os journals das partições para "/dev/sda1" e "/dev/sda2" às partições que armazenaram o journal de ambas.
# tune2fs -j -J device=/dev/sdb1 /dev/sda1
# tune2fs -j -J device=/dev/sdb2 /dev/sda2
Execute os comando abaixo, e veja a nova localização dos journals para "/dev/sda1" e "/dev/sda2":
# tune2fs -l /dev/sda1 | grep -i journal
# tune2fs -l /dev/sda2 | grep -i journal
Depois das alterações, veja como ficaram as partições que receberam os logs:
Tanto ext3 quanto ext4 usados nas partições do sistema, já estão rápidos com o logo externo, mas podemos deixar mais rápido ainda, fazendo uso
do comando
tune2fs ou do arquivo "/etc/fstab" para habilitar os modos de operação que os sistemas de arquivos ext3/4 possuem.
O padrão é
ordered, assim como podemos habilitar outros comportamentos para os sistemas de arquivos usados.
Farei uso arquivo "/etc/fstab" para aplicar estes comportamentos.
No exemplo abaixo, estou indicando no ext3 (partição raiz) e ext4 (partição /home), que o modo de operação é
writeback executando o
comando
tune2fs e adiciono a opção
relatime fazendo com que tenha um ganho de desempenho muito bom para ambos os
F.S.:
# tune2fs -o journal_data_writeback /dev/sda1
# tune2fs -o journal_data_writeback /dev/sda2
UUID=4ccfc585-1d20-4845-9c00-0d2a44bf8e0a / ext3 errors=remount-
ro,relatime 0 1
UUID=85eebfa7-88ae-4de8-8125-3cfbce5abe29
/home ext4 errors=continue,rw,relatime 0 &nbs
p;2
Veja que o comportamento passado anteriormente, principalmente passado pelo comando
tune2fs alterando o modo de operação
'data=writeback', faz com ambos os F.S. fiquem mais vulneráveis à perda de dados caso ocorra algum erro no sistema, e o mesmo seja forçado a ser
desligado de forma incorretamente. Mas, a perda de dados é mais para o arquivos abertos.
Por exemplo, você está editando um arquivo e no momento em que está fazendo a edição, falta energia, então, o conteúdo que não foi salvo, será
perdido.
No exemplo abaixo, deixo ambos os F.S. com maior desempenho, mas deixando a desejar na consistência:
# tune2fs -o journal_data_writeback /dev/sda1
# tune2fs -o journal_data_writeback /dev/sda2
UUID=4ccfc585-1d20-4845-9c00-0d2a44bf8e0a / ext3 errors=remount-
ro,noatime,nodiratime,barrier=0,commit=40 0 1
UUID=85eebfa7-88ae-4de8-8125-3cfbce5abe29
/home ext4 errors=continue,rw,noatime,nodiratime,barrier=0,commit=40
0 2
Observe que, além de estar usando o modo de operação
writeback, estou passando para o sistema de arquivos que não serão gravadas
atualizações de acesso a arquivo e nem a diretórios, assim, como também desabilito o
barrier que dá mais desempenho.
Porém, deixa ext3 e ext4 com menos consistência, deixando seu sistema de arquivos mais vulnerável caso ocorra, por exemplo, quedas de energia.
Mas, uma característica ainda não abordada neste artigo e que acrescentei acima, é a
commit.
commit
Os sistemas de arquivos ext3/4 podem ser configurados para sincronizar os dados e metadados a cada "n" segundos para o journal. Sendo que o
valor padrão é 5 segundos. Isto significa que, se usar o valor padrão que é 5, e sua máquina é desligada incorretamente, como por exemplo em uma
queda de energia, você irá perder apenas os últimos 5 segundos de trabalho, isto é, se o seu sistema de arquivos não for danificado.
Mas graças ao journaling, este risco é diminuído. Se aumentamos o valor, o sistema de arquivos ficará mais rápido já que o intervalo de
sincronização e acesso ao journaling irá aumentar e não será necessário fazer tantas sincronizações em pouco tempo.
Porém, se deseja deixar seu sistema de arquivos ext3/4 o mais consistente possível, perdendo muito desempenho, acrescente ao "/etc/fstab", as
seguintes opções:
# tune2fs -o journal_data /dev/sda1
# tune2fs -o journal_data /dev/sda2
UUID=4ccfc585-1d20-4845-9c00-0d2a44bf8e0a / ext3 errors=remount-
ro,barrier=1,sync 0 1
UUID=85eebfa7-88ae-4de8-8125-3cfbce5abe29
/home ext4 errors=continue,rw,barrier=1,sync 0 &nbs
p;2
Veja bem estas opções de montagem, pois seu sistema de arquivos ficará muito lento, mas em compensação, estará mais consistente.
Uma boa forma de colocar seu sistema de arquivos ext3/4 ao meio termo, bom desempenho com consistência, seria usar as seguintes opções de
montagem:
# tune2fs -o journal_data_writeback /dev/sda2
UUID=4ccfc585-1d20-4845-9c00-0d2a44bf8e0a / ext3 errors=remount-
ro,barrier=1 0 1
UUID=85eebfa7-88ae-4de8-8125-3cfbce5abe29
/home ext4 errors=continue,rw,barrier=1,commit=30 0 &nbs
p; 2
Assim, mesmo com menos comportamentos habilitados e desabilitados, seu F.S. terá bom desempenho, pois ainda tem journal externo.
* Observação Importante: Caso a partição que contém o journal do sistema fique danificada e não possa mais ser acessada, ou o disco que contém o
journal chegue ao fim de sua vida útil, seu sistema não poderá mais ser acessado, nem mesmo através de outros sistemas presentes no disco ou
LiveCDs.
Para resolver isso, basta executar os seguintes comandos abaixo, para deixar seu sistema com journal e acessível mais uma vez. Mas antes, instale
um novo disco que conterá a partição que irá armazenar o journal do sistema.
Supondo que o dispositivo que contém o sistema é "/dev/sda1", e o novo dispositivo que irá armazenar o journal é "/dev/sdc1". Lembre-se de criar
uma tabela de partições para o novo disco e uma partição.
Primeiro, liste o tamanho do bloco do sistema de arquivos que contém o sistema:
# tune2fs -l /dev/sda1 |grep -i "block size"
Em seguida, prepare a partição que receberá o log do sistema de arquivos que contém o sistema, usando o tamanho do bloco que foi obtido pelo
comando anterior. Abaixo, estou supondo que é 4096, se for diferente:
# mke2fs -O journal_dev /dev/sdc1 -b 4096 -L journal-ext-sda1 105500
Em seguida, retire o journal do sistema de arquivos que tem o sistema, e crie o novo journal usando os comandos:
# tune2fs -O ^has_journal /dev/sda1
# tune2fs -j -J device=/dev/sdc1 /dev/sda1
Veja que já usei estes comandos no inicio da página, mas não custa nada voltar a usá-los, principalmente quando é necessário recriar o journal.
Lembre-se que os logs armazenam informações para recuperar dados do seu sistema, então, se o seu sistema tiver alguma informação corrompida,
ou que precisa recuperar, após a criação do novo journal a informação não poderá mais ser recuperada.
Tunando o ext3 e ext4 usando journal interno
Para tunar o ext3 e ou ext4 com journal interno é mais fácil. Podemos usar comandos assim como usados anteriormente e o arquivo "/etc/fstab"
para isso. Usarei o mesmo esquema de particionamento usado com journal externo.
Primeiro, vamos mudar o modo de operação via comando, e fazer com que ambos os sistemas de arquivos trabalhem em modo
writeback:
# tune2fs -o journal_data_writeback /dev/sda1
# tune2fs -o journal_data_writeback /dev/sda2
Como já alterei via comando o modo de operação, não será necessário alterar no "/etc/fstab", mas mesmo assim acrescentarei algumas opções
interessantes já explicadas.
UUID=4ccfc585-1d20-4845-9c00-0d2a44bf8e0a / ext3 errors=remount-ro,relatime 0 1
UUID=85eebfa7-88ae-4de8-8125-3cfbce5abe29 /home ext4 errors=continue,rw,relatime 0 2
Para o kernel tratar o sistema de arquivos ext3/4, que contém o diretório root (raiz) no modo de operação alterado, no caso para
writeback, teremos que incluir uma opção ao GRUB.
Se tem mais de um sistema com ext3/4 no seu diretório raiz "/" e deseja mudar o modo de operação apenas para alguns, então edite o arquivo de
configuração e coloque ao final da linha a opção:
rootflags=data=writeback
Mas, se deseja incluir em todos os sistemas que usam ext3/4 no seu diretório raiz "/", então edite o arquivo "/etc/default/grub", usando seu editor
favorito e deixe a linha abaixo:
GRUB_CMDLINE_LINUX=""
Assim:
GRUB_CMDLINE_LINUX="rootflags=data=writeback"
E em seguida, execute como root o comando:
# update-grub
Depois disso, o seu kernel tratará o sistema de arquivos no modo
writeback, caso precise alterar o modo de operação para outro
journal (data), e/ou
ordered, precisará fazer as mesmas alterações no mesmo arquivo, isto porque o sistema de arquivos já teve seu
comportamento alterado com o comando
tune2fs.
Porém, se deseja alterar o modo de operação em sistema de arquivos ext3/4 de qualquer partição que contém qualquer diretório, com exceção do
raiz, não precisará fazer tais alterações nos arquivos editados anteriormente.
* Lembrando que isso só vale para F.S ext3/4 com journal interno.
Para deixar o F.S. ainda mais rápido, mas deixando a consistência do mesmo mais vulnerável, principalmente usando a opção
barrier,
deixe seu fstab como descrito abaixo. E se ainda não mudou o modo de operação para
writeback, execute o comando abaixo e faça as
alterações já explicadas:
# tune2fs -o journal_data_writeback /dev/sda1
# tune2fs -o journal_data_writeback /dev/sda2
UUID=4ccfc585-1d20-4845-9c00-0d2a44bf8e0a / ext3 errors=remount-ro,noatime,nodiratime,barrier=0,commit=40 0 1
UUID=85eebfa7-88ae-4de8-8125-3cfbce5abe29 /home ext4 errors=continue,rw,noatime,nodiratime,barrier=0,commit=40 0 2
* Não esqueça de alterar o arquivo "/etc/default/grub" e/ou alterar manualmente o arquivo de configuração do GRUB.
Mas, se deseja deixar o sistema de arquivos "/ext3/4" mais robusto perdendo desempenho, mude o "/etc/fstab" para o indicado abaixo, e altere o
modo de operação usando o comando
tune2fs.
No exemplo abaixo, deixo ambos os F.S. com mais desempenho, mas deixando a desejar na consistência:
# tune2fs -o journal_data /dev/sda1
# tune2fs -o journal_data /dev/sda2
UUID=4ccfc585-1d20-4845-9c00-0d2a44bf8e0a / ext3 errors=remount-ro,barrier=1,sync 0 1
UUID=85eebfa7-88ae-4de8-8125-3cfbce5abe29 /home ext4 errors=continue,rw,barrier=1,sync 0 2
Nesta última forma de uso explicada, teria que mudar o arquivo de configuração do GRUB, e colocar no final da linha que descreve a localização do
kernel a seguinte linha:
rootflags=data=journal
Ou, editar o arquivo "/etc/default/grub" usando seu editor favorito e alterar a seguinte linha:
GRUB_CMDLINE_LINUX=""
Para:
GRUB_CMDLINE_LINUX="rootflags=data=journal"
E depois, executar o comando:
# update-grub
Para deixar o sistema de arquivos ext3/4 em um meio termo, com um bom desempenho e consistência mesmo usando journal interno, seria usado as
seguintes opções no "/etc/fstab":
UUID=4ccfc585-1d20-4845-9c00-0d2a44bf8e0a / ext3 errors=remount-ro,barrier=1 0 1
UUID=85eebfa7-88ae-4de8-8125-3cfbce5abe29 /home ext4 errors=continue,rw,barrier=1,commit=40,relatime 0 2
Pois a partição que contém o diretório raiz iria manter o modo de operação padrão, assim como na partição /home, porém, /home teria uma ganho
com as opções
commit e
relatime.