Como otimizar o SO para SSDs?

146

Quais etapas devem ser tomadas antes / durante / após a instalação do Ubuntu em uma unidade de estado sólido para otimizar o desempenho e garantir a máxima durabilidade da unidade?

Lars Haugseth
fonte

Respostas:

108

Usei com sucesso várias técnicas diferentes para melhorar a maneira como o Ubuntu usa o dispositivo de armazenamento, seja no estado sólido ou na unidade tradicional.

Para SSDs, você também procura minimizar o número de vezes que a unidade é gravada, pois as leituras não devem adicionar desgaste à unidade.

1) Gerencie o arquivo de troca

Se você não hibernar o computador e tiver memória RAM suficiente para executar todos os seus aplicativos, em teoria você não precisará de uma partição de troca.

Se você tiver uma mistura de SSD e discos rígidos, coloque sua partição de swap apenas nos discos rígidos.

2) Não há gravações para registros de data e hora de leitura (adequados para SSDs e discos rígidos)

Montar suas partições com as opções noatime e nodiratime interromperá as gravações de carimbo de data e hora quando você ler arquivos e pastas. Essas gravações de registro de data e hora geralmente não são necessárias, a menos que você use um cliente de servidor de correio local, como mutt. Geralmente, essa é uma péssima idéia, porque cada leitura produzirá uma gravação ao atualizar os carimbos de data e hora. Isso diminui a vida útil do SSD.

Edite seu arquivo de configuração / etc / fstab (com cuidado - faça um backup para garantir que a quebra da configuração do fstab possa impedir o funcionamento do sistema):

cp /etc/fstab ~/fstab-backup
gksudo gedit /etc/fstab

Edite as opções de montagem para suas partições adicionando o texto noatime e nodiratime às linhas que definem sua raiz (/) e outras partições se você as tiver (/ home) - Nota: se você tiver uma partição / home, comece com isso apenas alterando essa partição se você estiver preocupado em quebrar algo

# / was on /dev/sda2 during installation
UUID=587e0dc5-2db1-4cd9-9792-a5459a7bcfd2 /               ext4    noatime,nodiratime,errors=remount-ro 0       1

# /home was on /dev/sda3 during installation
UUID=2c919dc4-24de-474f-8da0-14c7e1240ab8 /home           ext4    noatime,nodiratime,defaults        0       2

Você precisará reiniciar sua máquina antes que essas alterações entrem em vigor

3) Minimizando gravações do SO e aplicativos

Supondo que você não esteja executando um servidor de produto de missão crítica, a maioria das pessoas não analisa os logs se algo der errado (especialmente porque erros sérios são raros para a maioria dos usuários do Ubuntu). Portanto, você pode configurar o Ubuntu para que todos os logs sejam gravados na memória RAM, e não no SSD.

Nota: faça as seguintes alterações somente quando tiver instalado todo o software que você irá usar (especialmente coisas como o servidor web Apache); caso contrário, poderá haver alguns problemas com os diretórios ausentes em / var / log

Para obter mais informações sobre essa abordagem, consulte prolongando a vida útil da sua unidade flash em ubuntu-eee.com

Abra o / etc / fstab com um editor (assumindo que você fez backup do arquivo / etc / fstab)

gksudo gedit /etc/fstab

Adicione as seguintes linhas no final do arquivo fstab e salve:

# Uncomment these after all server based applications installed - eg. apache
#tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
#tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
#tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0 
#tmpfs /var/log/apt tmpfs defaults,noatime 0 0
# none /var/cache unionfs dirs=/tmp:/var/cache=ro 0 0

Você precisará reiniciar sua máquina antes que essas alterações entrem em vigor

Veja também:

jr0cket
fonte
7
Sobre o último bit para logs e outras coisas, as tmpfslinhas são comentadas; então, por que adicionar essas linhas faria alguma diferença? Precisamos adicioná-lo não comentado?
Oxwivi 01/09/11
8
Entendo se isso visa melhorar a velocidade, mas a maior parte do que você escreveu parece ter como objetivo melhorar a vida do SSD. Não é o caso dos SSDs modernos que essas melhorias são inúteis? E à custa de mais uso de RAM! (por exemplo, ver a ligação dada em esta outra resposta )
Chan-Ho Suh
7
Não há necessidade de 2). relatime faz o trabalho de impedir gravações muito bem e está ativo por padrão desde o kernel 2.6.30 .
Mihai Capota
3
Apenas para adicionar ao comentário do @ MihaiCapotă, há uma resposta de falha do servidor com mais detalhes sobre por que o noatime não é necessário.
Cas
11
Eles dizem que noatime implica nodiratime aqui , portanto basta adicionar a opção anterior.
Jarno
92

Vida SSD

Geralmente eu não me incomodaria - as preocupações com a vida no SSD são exageradas. Você pode ler este artigo detalhado sobre por que realmente não deveria se preocupar . Em resumo, o circuito interno dos SSDs modernos gerencia o nível de desgaste para você e eles sabem como fazê-lo muito melhor do que você.

No artigo, está um cálculo da vida útil de um SSD que está recebendo gravações a uma taxa contínua de 80M / s. A vida é de 51 anos . Isso é baseado na tecnologia de 2007 - a vida útil do SSD será mais longa agora. E você quase certamente não grava no seu SSD a 80M / s 24 horas por dia.

Desempenho do SSD

No entanto, a degradação do desempenho ao longo do tempo pode ser um problema, e o TRIM é a solução. Existem duas opções

  • TRIM automático / online, também conhecido como descarte
  • TRIM manual

Você precisa habilitar o TRIM automático . (Basicamente, você adiciona a discardopção às opções de montagem, desde que esteja usando o ext4.) Encontrei uma postagem no blog relatando que a opção de descarte diminui a velocidade do sistema ao excluir arquivos .

Ocasionalmente, você pode fazer isso manualmente (ou em um trabalho cron) usando fstrim . Se você tiver apenas uma partição, tudo o que você precisa fazer é:

sudo fstrim /

Observe que o fstrim está disponível apenas na 11.10 e mais recente. Para sistemas mais antigos, você precisará do wiper.shscript. Encontrei o script no /usr/share/doc/hdparm/contrib/wiper.sh.gzmeu sistema.

Se você está se perguntando, o problema que o TRIM resolve, conforme descrito pela Wikipedia , é:

Os SSDs armazenam dados em células de memória flash agrupadas em páginas, com as páginas (normalmente 4 kB cada) agrupadas em blocos (normalmente 128 páginas por bloco, totalizando 512 kB). As células de memória flash NAND só podem ser gravadas diretamente quando estão vazias. Se eles são considerados como contendo dados, o conteúdo primeiro precisa ser apagado antes que uma operação de gravação possa ser executada de maneira confiável. Nos SSDs, uma operação de gravação pode ser feita no nível da página, mas devido a limitações de hardware, os comandos de exclusão sempre afetam blocos inteiros. Como resultado, a gravação de dados na mídia SSD é muito rápida, desde que as páginas vazias possam ser usadas, mas diminui consideravelmente quando as páginas escritas anteriormente precisam ser substituídas. Como é necessário apagar as células da página antes que ela possa ser gravada novamente, mas somente blocos inteiros podem ser apagados, uma substituição iniciará um ciclo de leitura-apagamento-modificação-gravação: o conteúdo de todo o bloco deve ser armazenado no cache antes de ser efetivamente apagado na mídia flash, a página substituída é modificada na cache para que o bloco em cache esteja atualizado e somente então o bloco inteiro (com página atualizada) é gravado na mídia flash . Esse fenômeno é conhecido como amplificação de gravação.

Hamish Downer
fonte
8
Eu gostaria de poder votar várias vezes. Essa seria uma dessas respostas. Esse link resolveu uma preocupação que tenho há muito tempo. Muito obrigado Hamish.
Luis Alvarado
Artigo interessante do storagesearch.com. Eu gostaria que desse um encontro! Então, a resposta acima significa que os proprietários de SSD não precisam se preocupar com sugestões na primeira resposta, com exceção do TRIM? Não tenho muita necessidade de tempos de acesso a arquivos, mas com 2G de memória, ter uma partição de troca ainda pode ser útil ao executar algum software de edição de fotos junto com vários outros programas que exigem muita memória, como o Chrome.
Lawrence I. Siden
@lsiden: o artigo menciona "Mais tarde: - em maio de 2008" parcialmente. E você está certo de que não deve se preocupar com todas as outras coisas no primeiro artigo. Basta ativar TRIM e desfrutar da velocidade :)
Hamish Downer
2
O artigo refere-se a SSDs de nível empresarial: ele usa 2 milhões de ciclos de resistência à gravação. Os SSDs de consumo têm cerca de 3000-5000 ciclos. Um SSD de 128 GB com 3000 ciclos fornece 57 dias de gravação contínua de 80 MB / s.
LeartS
11
No Ubuntu 14.10 em diante, o TRIMming acontece automaticamente toda semana em todos os SSDs suportados pelo fstrim. ref.
KrisWebDev #
20

Existem vários pontos:

Alinhamento:

O que geralmente é apontado é o alinhamento correto da partição. Isso deve ser igual ao tamanho do bloco do SSD. Jogue com segurança e faça suas partições alinhadas aos limites do MiB. Observe que você não pode fazer isso com a ferramenta de partição do instalador do Ubuntu (que usa MB e não o MiB), mas pode inicializar o CD ao vivo, usar o Gparted (que usa o MiB) e clicar em Instalar para usar as partições que você configurou.

O agendador certo:

Um ponto importante é o agendador que deveria ser noop. Você pode definir esse agendador via parâmetro do kernel elevator=noopou através de uma entrada echo noop > /sys/block/sda/queue/schedulerem seu rc.local.

Mountflags:

Eu recomendaria noatimeediscard

Tmpfs

Colocar tmp em um ramdisk pode aumentar a vida útil do ssd. Para usar isso, coloque a seguinte linha no fstab:none /tmp tmpfs defaults 0 0

Geralmente, se você quiser se aprofundar neste tópico, eu recomendaria este excelente artigo wiki.

Sebastian Rühl
fonte
16

Curso de ajuste rápido para o seu SSD no Ubuntu:

sistema de arquivo

O Arch wiki menciona poucas opções preferíveis para o sistema de arquivos SSD - uma delas é instável, outras são ext * ones. Presumo que ext4 é uma das melhores escolhas.
Nota: No caso do ext4, você pode usar a discardopção mount.

fstab

# <file system> <mount point> <type> <options>                                  <dump>  <pass>
proc            /proc         proc   nodev,noexec,nosuid                        0       0
tmpfs           /tmp          tmpfs  nodev,nosuid,noatime,mode=1777             0       0
/dev/sda1       /             ext4   defaults,noatime,discard,errors=remount-ro 0       1
/dev/sda2       /home         ext4   defaults,noatime,discard,user_xattr        0       2
/dev/sda3       /windows      ntfs   defaults,noatime,discard,umask=007,gid=46  0       0

Algumas coisas importantes aqui são:

  • Para sistemas com> = 2 GB de memória, é recomendável localizar / tmp na RAM.
  • Nenhuma swappartição. Atualmente, é necessário apenas para hibernação, uma vez que as máquinas modernas possuem uma quantidade bastante grande de RAM.
  • noatimee discardopções. A informação está aqui .

Agendador

Considere mudar do agendador padrão, que na maioria das distribuições Linux é cfq (fila completamente justa), para o agendador noop ou prazo para um SSD. O uso do planejador noop, por exemplo, simplesmente processa solicitações na ordem em que são recebidas, sem levar em consideração o local onde os dados residem fisicamente no disco. Essa opção é considerada vantajosa para SSDs, pois os tempos de busca são idênticos para todos os setores no SSD.

Adicione o seguinte ao /etc/rc.local :

# SSD performance tuning
echo noop > /sys/block/sda/queue/scheduler

informação

um dois

Andrejs Cainikovs
fonte
2
Sem troca e com /tmpRAM, é muito fácil obter uma situação de falta de memória , pois muitos programas usam /tmpcomo espaço de armazenamento (por exemplo, o Brasero para armazenar imagens de DVD).
organize
5
Na verdade não. tmpfspor padrão é 10% da RAM. O tamanho pode ser ajustado usando a sizeopção.
Andrejs Cainikovs
11
Brasero é um mau exemplo, não deve fazer isso em primeiro lugar, como Lennart Poettering explica em seu blog 0pointer.de/blog/projects/tmp.html
LiveWireBT
8

4) ativar TRIM automático

Se o seu SSD suportar, você também deve ativar o TRIM automático (como descrito aqui )

Uli
fonte
3

Eu não adicionaria esta linha à sua pasta fstab, var / tmp, para sobreviver a reinicializações e isso pode causar problemas para você.

tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0

Quando configuro o novo sistema, deixo toda a pasta tmp comentada dessa maneira, se algo acontecer, posso verificar os logs e outras coisas. Então, quando eu tiver a configuração principal do sistema, não as comentarei, mas nunca adicionarei a linha acima, eis o que eu uso:

tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0 
tmpfs /var/log/apt tmpfs defaults,noatime 0 0

E se estou tendo algum problema com o meu sistema, comento-os para poder verificar tudo mesmo após uma reinicialização ou reinicialização forçada após um bloqueio.

Além disso, você não precisa de nodiratime, a opção noatime cuida de ambos por si só.

Quanto ao TRIM, se o seu hw / sw o suportar, é obrigatório, eu não uso o descarte no fstab. Eu crio um cron diário, porque meu PC está sempre ligado, fazendo o seguinte:

gksu gedit /etc/cron.daily/trim

Em seguida, adicione-o ao arquivo e salve (se você não tiver uma partição home / separada no ssd ou outras partes que estejam no ssd, você deve ter a idéia de como modificar isso:

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
fstrim -v / >> $LOG
fstrim -v /home >> $LOG

Em seguida, torne o arquivo executável por:

sudo chmod +x /etc/cron.daily/trim

Também edito meu rc.local da seguinte forma:

gksu gedit /etc/rc.local

Adicione isso acima "exit 0" e abaixo do último #:

# Modification for SSD
# you may want to add more folders to be checked/created to this list
for dir in apparmor apt ConsoleKit cups dist-upgrade fsck gdm installer news ntpstats samba speech-dispatcher unattended-upgrades; do
  if [ ! -e /var/log/$dir ] ; then
    mkdir /var/log/$dir
  fi
done

Você pode copiar e colar a partir daqui, para que não haja erros; para o leigo, parece que está fora de controle, não é.

Também li que deixar 10% da sua unidade ssd não formatada pode ajudar a prolongar a vida útil, o que resta a ser visto. Eu não li muito sobre isso, então não posso garantir se faz sentido fazê-lo.

Este é o melhor guia geral, ele não procurou no Google por um dia e, em seguida, criou um guia, você deve conferir AQUI

JohnRB
fonte
A idéia é adicionar todos os diretórios em / var / log regular ao /etc/rc.local? O que acontece, se você não adicionar os diretórios? Eu acho que pode ser necessário adicionar mais diretórios, se você instalar alguns novos pacotes. O /etc/rc.local pode ser atualizado durante o desligamento para criar todos os diretórios na próxima inicialização?
22415 jarno
No ubuntu 14.04 e posterior, existe um trabalho cron /etc/cron.weekly/fstrim definido por padrão para aparar os sistemas de arquivos semanalmente. Quanto ao 14.04, veja aqui . O Ubuntu 15.10 usa /sbin/fstrim --all || trueno script fstrim.
Jarno
Pelo menos o diretório / var / log / installer possui um subdiretório chamado ubiquity-apt-clone no Xubuntu 15.10. Você deve criar subdiretórios recursivamente?
Jarno
3

O TRIM permite que um sistema operacional informe um SSD que blocos de dados não são mais considerados em uso e podem ser limpos internamente. O corte permite que o SSD lide com a sobrecarga da coleta de lixo, o que, de outra forma, diminuiria significativamente as operações futuras de gravação nos blocos envolvidos. 1

No Ubuntu 14.04, um novo recurso foi adicionado ao pacote util-linux que apara regularmente os SSDs automaticamente, mas apenas os SSDs da Intel e da Samsung têm o TRIM ativado por padrão, porque alguns SSDs baratos podem se proteger ao executar o TRIM. 2 O conteúdo do /etc/cron.weekly/fstrimUbuntu 14.04:

#!/bin/sh
# call fstrim-all to trim all mounted file systems which support it
set -e

# This only runs on Intel and Samsung SSDs by default, as some SSDs with faulty
# firmware may encounter data loss problems when running fstrim under high I/O
# load (e. g.  https://launchpad.net/bugs/1259829). You can append the
# --no-model-check option here to disable the vendor check and run fstrim on
# all SSD drives.
exec fstrim-all

1 https://en.wikipedia.org/wiki/Trim_%28computing%29
2 Como o Trim está ativado?

karel
fonte
2

É claro que /var/tmpnão deve estar no tmpfs, pois, por definição, seu conteúdo precisa ser preservado além das reinicializações:

user95602
fonte
2

Ok, "longa história curta":

  1. Sim. É como um disco rígido normal. Aqui está uma boa visão geral.
  2. Alguns extras especiais, que eu irei cobrir.
  3. Muito bom. Eu o uso com um servidor.

Formate como ext4durante a instalação e crie uma pequena troca de ~ 1 GB. Após instalar, edite o fstab com sudo gedit /etc/fstabe adicione a seguinte linha

tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0

Isso criará uma ramdrive para seus arquivos temporários, o que reduzirá o envelhecimento. Adicione também noatime,nodiratime,discardà sua linha ext4 após os padrões. Isso também reduz o desgaste e ativa a função TRIM. Salve e reinicie.

gajdipajti
fonte
Muito obrigado. Estou confuso porque sempre usei o Linux de inicialização dupla e será a primeira vez que instalarei o Linux em um SSD novo, portanto, o processo e o armazenamento são novos para mim. mas parece que é o mesmo que instalar o Ubuntu no disco rígido, certo?
Varun
É o mesmo. Na instalação, você pode ser solicitado a criar a tabela de partição, mas esse é um clique.
gajdipajti
Outra pergunta: Preciso fazer alguma alteração no BIOS do meu laptop Dell. Vou instalar o SSD e o Ubuntu hoje?
Varun
Não, a BIOS moderna detecta automaticamente os tipos de discos rígidos.
gajdipajti
Muito obrigado, muito útil, vai deixar você saber o que acontece amanhã :)
Varun
2

Há algumas informações boas: Como ajustar e otimizar o SSD para Ubuntu, Linux Mint em http://namhuy.net/1563/how-to-tweak-and-optimize-ssd-for-ubuntu-linux-mint.html, você pode estar interessado em

Usar pré-carregamento

Para instalar o pré-carregamento nas distribuições baseadas no Ubuntu, Linux Mint ou debian

# apt-get update && apt-get install preload

Desligue sua troca

Para alterar a configuração de swappiness:

$ su -
# nano /etc/sysctl.conf

E adicione esta linha no arquivo sysctl.conf.

vm.swappiness = 10
Sue Russell
fonte
2

É necessário o no-break /etc/sysctl.conf.

vm.dirty_writeback_centisecs = 15000
vm.swappiness = 10

Localize o daemon do arquivo de configuração, geralmente /etc/syslog.confили, /etc/rsyslog.d/e todos os caminhos do formulário são /var/log/alterados, escrevendo um sinal de menos ("-") na frente.

/var/log/mail.err

Depois de
mail.err -/var/log/mail.err

use FS btrfse use a -o ssdopção

Mais http://vasilisc.com/speedup_ubuntu_eng#speedup_fs

Василий Алексеенко
fonte
1

Como ajustar e otimizar o SSD para Ubuntu, Linux Mint

Ativar TRIM

TRIM (comando Trim permite que um sistema operacional saiba quais blocos SSD não estão sendo usados ​​e podem ser limpos)

Faça backup do fstab primeiro, caso aconteça algum problema.

# cp /etc/fstab ~/fstab.bk

Editar arquivo fstab

# nano /etc/fstab

Adicione descarte às suas unidades ou partições ssd, após ext4

UUID=bef10b86-494d-41c6-aa46-af72cfba90fd / ext4 discard,errors=remount-ro 0 1
Adding noatime and nodiratime

noatime e nodiratime são opções de montagem no linux para sistema de arquivos linux. noatime desativa atualizações atime no sistema de arquivos e nodiratime desativa atualizações atime no sistema de diretórios. A adição de noatime e nodiratime reduzirá bastante a carga ssd, o que significa ganhos de desempenho.

Editar arquivo fstab

# nano /etc/fstab

Adicione noatime, nodiratime às suas unidades ou partições ssd, após ext4

UUID=bef10b86-494d-41c6-aa46-af72cfba90fd / ext4 discard,noatime,nodiratime,errors=remount-ro 0 1

fonte
0

Eu sugiro colocar apenas as coisas que são lidas no momento da inicialização no SSD, talvez aplicativos que exijam muito tempo para carregar. Dados e logs e outras coisas não críticas que eu localizaria em um disco rígido normal. um grande initramfs a partir do SSD no momento da inicialização e não grava novamente as alterações no ssd. Isso tem o benefício de que as alterações nesta partição não são persistentes, o que é uma proteção para o seu sistema de inicialização.

Por exemplo, eu colocaria as partições /, / etc, / usr, / boot, / lib 32/64 no SSD enquanto sth como

/ opt, / bin, / sbin, / root, / home e até swap (aumente a RAM !!!) no disco rígido

A Wikipedia diz:

O kernel do Linux suporta a função TRIM iniciando na versão 2.6.33. O sistema de arquivos ext4 é suportado quando montado usando o parâmetro "descarte". Os utilitários de disco mais recentes (e, portanto, o software de instalação que os utiliza) também aplicam o alinhamento adequado das partições.

Para backups, existem várias maneiras, das quais a mais simples é (r) sync mais cron.

Michael K
fonte
Você sabe para que são usados ​​cada um dos locais? Todos os mencionados locais exceto para /root, /homee de troca deve ser colocado no SSD para a velocidade, porque é principalmente somente leitura. Para obter benefícios de velocidade, coloque /vartambém o SSD.
precisa saber é o seguinte
Depende do que você pretende acelerar e do tamanho do seu SSD. 120 GB deve ser suficiente, tudo bem, mas com um SSD menor, você alcança as fronteiras facilmente.
Michael K
A /partição do Kubuntu Oneiric leva 4,5 GB no meu SSD. 20 GB é suficiente para /menos /home. Os esforços para ajustar o layout do sistema de arquivos, espalhando-o por várias partições, não valem a pena.
Lekensteyn