Live Chat Software by Kayako
Base de Conhecimento
Trocando o disco do sistema - Proapps / FreeBSD com ZFS
Postado por Anderson Aguiar on 20/Mar 13:44

Troca do disco

Este artigo tem como objetivo a troca de um disco saudável do pool do sistema. A troca de um disco com problemas tem outro comportamento.

Identificando discos e pool's

Para alterar o disco é necessário identificar os discos e quais os pool's estão criados, para evitar erros no procedimento. Neste caso podemos notar com os comandos abaixo, que temos dois discos e que eles têm o mesmo tamanho, mas o procedimento também funciona para discos com tamanhos superiores ao já existente.

(root@server) ~# sysctl kern.disks
kern.disks: ada1 ada0

(root@server) /usr/home/staffproapps# geom disk list
Geom name: ada0
Providers:
1. Name: ada0
Mediasize: 32017047552 (30G)
Sectorsize: 512
Mode: r2w2e5
descr: TS32GSSD420K
lunid: 57c354814f6c6104
ident: E627470084
rotationrate: 0
fwsectors: 63
fwheads: 16

Geom name: ada1
Providers:
1. Name: ada1
Mediasize: 32017047552 (30G)
Sectorsize: 512
Mode: r0w0e0
descr: TS32GSSD420K
ident: D781910408
rotationrate: 0
fwsectors: 63
fwheads: 16

Para identificar o pool e qual disco está em utilização utilizamos o comando descrito abaixo. Note que temos apenas um pool, caso tenha mais de um é necessário identificação do pool e seus pontos de montagem.

(root@server) /usr/home/staffproapps# zpool status
pool: zroot
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
gpt/disk0 ONLINE 0 0 0

errors: No known data errors

(root@server) /usr/home/staffproapps# df -h
Filesystem Size Used Avail Capacity Mounted on
zroot/root/proapps 27G 14G 13G 53% /
devfs 1.0K 1.0K 0B 100% /dev
zroot/tmp 13G 43K 13G 0% /tmp

Partições GPT

Feito a identificação, entendemos que no caso em questão o novo disco é o ada1 e o disco antigo é o ada0. O primeiro passo a ser realizado é replicar a tabela de partições GPT e escrever a partição de boot.

No comando abaixo podemos verificar que o novo disco já possui uma tabela de particionamento que deve ser sobrescrita.

(root@server) /usr/home/staffproapps# gpart show
=> 40 62533216 ada0 GPT (30G)
40 1024 1 freebsd-boot (512K)
1064 1024 - free - (512K)
2088 4194304 2 freebsd-swap (2.0G)
4196392 58336864 3 freebsd-zfs (28G)

=> 63 62533233 ada1 MBR (30G)
63 1985 - free - (993K)
2048 51200 1 linux-data [active] (25M)
53248 2097152 2 linux-data (1.0G)
2150400 2097152 3 linux-data (1.0G)


4247552 58285744 4 linux-data (28G)

=> 63 62533233 diskid/DISK-D781910408 MBR (30G)
63 1985 - free - (993K)
2048 51200 1 linux-data [active] (25M)
53248 2097152 2 linux-data (1.0G)
2150400 2097152 3 linux-data (1.0G)
4247552 58285744 4 linux-data (28G)

Com o comando abaixo já vamos realizar o backup das partições do disco ada0 e restaurar no disco ada1 apagando a tabela de particionamento já existente neste disco.

(root@server) ~# gpart backup ada0 |gpart restore -F ada1

Obs. Somente a tabela de partição é restaurada, após a restauração é necessário escrever o bootcode. Nenhum backup de dados é executado neste procedimento.

Para adicionar o bootcode no novo disco identifique a partição responsável pelo boot e utilize o comando abaixo:

(root@server) ~# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
partcode written to ada1p1
bootcode written to ada1

Agora devemos remover a partição freebsd-zfs do novo disco e cria-la novamente à fim de adicionarmos um label à ela e também para que haja a incorporação de todo o espaço em disco que esteja sobrando caso o novo disco tenha um tamanho maior que o que está em produção.

(root@server) ~# gpart delete -i 3 ada1
ada1p3 deleted

(root@server) ~# gpart add -t freebsd-zfs -l disk1 ada1

Agora o particionamento do novo disco tem que estar idêntico ao do disco em produção.

(root@server) /usr/home/staffproapps# gpart show ada0
=> 40 62533216 ada0 GPT (30G)
40 1024 1 freebsd-boot (512K)
1064 1024 - free - (512K)
2088 4194304 2 freebsd-swap (2.0G)
4196392 58336864 3 freebsd-zfs (28G)

Adicionando o novo disco no pool

Vamos adicionar o novo disco no pool do sistema ao invés de utilizar o comando replace para evitarmos erros durante o procedimento que possam inutilizar todo o sistema. Portanto será incluído o novo disco e após todo o procedimento iremos realizar a remoção do disco antigo.

Adicionando o novo disco:

(root@server) ~# zpool attach zroot gpt/disk0 gpt/disk1

Aguardo o tempo de sincronização dos discos, é possível acompanhar o procedimento com o comando abaixo:

FALTA PRINT

Ao finalizar o procedimento a saída do comando ficará parecida com a mostrada abaixo:

(root@server) ~# zpool status
pool: zroot
state: ONLINE
scan: resilvered 14.1G in 0h4m with 0 errors on Wed Mar 20 08:45:26 2019
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
gpt/disk0 ONLINE 0 0 0
gpt/disk1 ONLINE 0 0 0

Obs. É recomendado que seja realizado testes de inicialização com o novo disco antes de realizar a remoção do antigo do pool. Pois caso haja algum erro com o novo disco, ainda é possível bootar com o disco antigo. Realizado os testes e certo da confiabilidade do novo disco remova o disco antigo do pool. Como durante os testes provavelmente ocorreu o reboot a nomenclatura dos discos podem ter sido alteradas, é necessário se certificar da identificação dos discos novamente antes de prosseguir. Caso a maquina suporte Hot swapping o reboot não é necessário, porém é recomendado para testar a partição de boot que foi escrita afim de identificar quaisquer erros.

Após todos os testes, verifique qual o disco deve ser removido:

(root@server) ~# zpool status
pool: zroot
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://illumos.org/msg/ZFS-8000-2Q
scan: resilvered 14.1G in 0h4m with 0 errors on Tue Mar 19 13:23:15 2019
config:

NAME STATE READ WRITE CKSUM
zroot DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
13576504213766443699 UNAVAIL 0 0 0 was /dev/gpt/disk0
gpt/disk1 ONLINE 0 0 0

errors: No known data errors

Neste caso vamos remover o disco que se encontra fora do sistema:

(root@server) ~# zpool detach zroot gpt/disk0
(root@server) ~# zpool status
pool: zroot
state: ONLINE
scan: resilvered 14.1G in 0h4m with 0 errors on Tue Mar 19 13:23:15 2019
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
gpt/disk1 ONLINE 0 0 0

errors: No known data errors

Troubleshooting

Caso a partição GPT não tenha abrangido todo o espaço disponível do disco tente utilizar os comandos abaixo para realocar o espaço:

gpart resize -i 3 da0

zpool online -e zroot gpt/disk0

Documentação

https://www.freebsd.org/cgi/man.cgi?gpart(8)#content

https://docs.oracle.com/cd/E19253-01/819-5461/gcfhe/index.html

https://www.freebsd.org/doc/handbook/disks-adding.html

(0 votos)
Este artigo foi útil
Este artigo não foi útil

Comentários (0)
Postar um novo comentário
 
 
Nome completo:
Email:
Comentários:
Help Desk Software by Kayako suporte.freebsdbrasil.com.br:443/index.php?