Desativando write cache em todos os discos internos
No post Escritas duráveis (ou: o mal que o EXT3 causou) mostrei uma forma de desativar o write cache do disco rígido usando um .service do systemd. Considerei apenas um disco
Quem sabe automatizar um meio de desativar o write cache em todos os discos existentes na máquina que sejam do tipo não-removível?
O systemd é um projeto que quer retirar o shell script da onde for possível. Tirá-lo da vitrine do processo de boot. Mas obviamente não acabar com ele. Este é um caso onde um pequeno shell script ajuda pacas e trabalha em harmonia com o systemd.
Chega de papo e vamos lá.
(não esqueça de dar permissão de execução ao arquivo:
Nota: no shell script, se você usar uma distribuição que venha com pelo menos a suíte util-linux 2.22 (
/dev/sda
. Quando existe mais de um HD na máquina, poderíamos repetir a linha ExecStart adaptando o nome do dispositivo. Funcionaria, porém não seria lá uma solução muito robusta, pois se algum disco for adicionado ou removido o arquivo precisaria ser atualizado. E se por algum motivo surgir um disco interno chamado /dev/sdzzz
? (saiba que é possível, porém improvável :-)Quem sabe automatizar um meio de desativar o write cache em todos os discos existentes na máquina que sejam do tipo não-removível?
O systemd é um projeto que quer retirar o shell script da onde for possível. Tirá-lo da vitrine do processo de boot. Mas obviamente não acabar com ele. Este é um caso onde um pequeno shell script ajuda pacas e trabalha em harmonia com o systemd.
Chega de papo e vamos lá.
/usr/local/libexec/desativa-write-cache.sh
(não esqueça de dar permissão de execução ao arquivo:
chmod +x /usr/local/libexec/desativa-write-cache.sh
)#!/bin/bash for i in $(lsblk -drno NAME | grep -Eo 'sd[[:alpha:]]+'); do if [[ $(lsblk -drno RM /dev/$i) == 0 ]]; then echo "Desativando write cache em /dev/$i" hdparm -W0 /dev/$i fi done
/etc/systemd/system/desativa-write-cache.service
[Unit] Description=Desativa Write Cache DefaultDependencies=no Before=local-fs-pre.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/libexec/desativa-write-cache.sh [Install] WantedBy=basic.target
systemctl daemon-reload systemctl enable desativa-write-cache.service
Nota: no shell script, se você usar uma distribuição que venha com pelo menos a suíte util-linux 2.22 (
fdisk -V
dirá a versão), poderá simplificar um pouco usando a nova opção -I
do lsblk, que nos permite remover o filtro com o grep:#!/bin/bash for i in $(lsblk -I 8 -drno NAME); do if [[ $(lsblk -drno RM /dev/$i) == 0 ]]; then echo "Desativando write cache em /dev/$i" hdparm -W0 /dev/$i fi done
Comentários
Postar um comentário