Crie o conjunto zfs que permite substituir um dos discos por um disco um pouco menor

4

Esta é uma questão sobre o zfs no Linux (CentOS 7). Eu tenho uma configuração muito simples com dois discos de 8 TB, um disco espelhando o outro.

zpool criar -f -o ashift = 12 $ zpoolName espelhar $ disksById

No caso de um dos discos precisar ser substituído, o disco de substituição deve ser de tamanho igual ou maior que o menor dos dois discos na configuração, de acordo com as páginas de manual do zpool. E pelo que eu entendi é comum que o tamanho exato normalmente difira um pouco entre os drives de diferentes marcas e modelos (e revisões de modelos), mesmo que todos eles sejam rotulados como 8 TB. No entanto, gostaria de poder substituí-lo por qualquer outro disco de 8 TB , não necessariamente pela mesma marca e modelo.

Como faço para isso?

Eu teria esperado uma opção para o comando zpool create para que não todo o disco seja usado para o pool, mas deixando alguma folga, no entanto, não consigo encontrar essa opção. A única sugestão que tenho visto é particionar o disco antes de criar o pool, criar uma partição "pool" e uma partição "slack", mas eu li que isso afetará o desempenho do disco como o cache de disco não pode ser usado corretamente por zfs, então eu suponho que eu gostaria de evitar isso.

    
por joaerl 29.03.2017 / 12:54

2 respostas

3

The only suggestion that I have seen is partitioning the disk before creating the pool, creating one "pool" partition and one "slack" partition

Esta é a resposta correta.

but I've read the this will affect disk performance as the disk cache can not be used properly by zfs.

Isso é um mal-entendido. Usar uma partição em vez de um disco cheio afeta apenas o desempenho se a partição estiver desalinhada, o que normalmente requer alguma determinação real da parte do usuário, se você estiver usando editores de partição vagamente modernos. Linux e BSD fdisk, sfdisk e gparted todos entendem limites de partição e trabalham dentro deles, a menos que seja forçado a não fazê-lo.

Além disso, se você olhar de perto para um disco que foi alimentado inteiro para zfs, você notará que o zfs particionou ele mesmo. Exemplo:

root@banshee:~# zpool status data
  pool: data
 state: ONLINE
  scan: scrub repaired 0 in 27h54m with 0 errors on Mon Mar 13 05:18:20 2017
config:

    NAME                                           STATE     READ WRITE CKSUM
    data                                           ONLINE       0     0     0
      mirror-0                                     ONLINE       0     0     0
        wwn-0x50014ee206fd9549  ONLINE       0     0     0
        wwn-0x50014ee2afb368a9    ONLINE       0     0     0
      mirror-1                                     ONLINE       0     0     0
        wwn-0x50014ee25d2510d4  ONLINE       0     0     0
        wwn-0x5001517bb29d5333  ONLINE       0     0     0

errors: No known data errors

root@banshee:~# ls -l /dev/disk/by-id | grep 510d4
lrwxrwxrwx 1 root root  9 Mar 22 15:57 wwn-0x50014ee25d2510d4 -> ../../sdd
lrwxrwxrwx 1 root root 10 Mar 22 15:57 wwn-0x50014ee25d2510d4-part1 -> ../../sdd1
lrwxrwxrwx 1 root root 10 Mar 22 15:57 wwn-0x50014ee25d2510d4-part9 -> ../../sdd9

Como você pode ver, o ZFS já particionou os discos brutos no pool. O pool usa a partição 1; a partição 9 está com folga.

root@banshee:~# sfdisk -d /dev/sdd
label: gpt
label-id: B2DED677-DB67-974C-80A6-070B72EB8CFB
device: /dev/sdd
unit: sectors
first-lba: 34
last-lba: 3907029134

/dev/sdd1 : start=        2048, size=  3907010560, type=6A898CC3-1DD2-11B2-99A6-080020736631, uuid=A570D0A4-EA32-F64F-80D8-7479D918924B, name="zfs"
/dev/sdd9 : start=  3907012608, size=       16384, type=6A945A3B-1DD2-11B2-99A6-080020736631, uuid=85D0957B-65AF-6B4A-9F1B-F902FE539170

sdd9 tem 16384 setores. Este é um disco 4K, de modo que sai para 64M, e qualquer disco que não seja mais do que 63M-ish menor que o disco existente deve estar bem como um substituto para este, caso ele falhe.

    
por 29.03.2017 / 17:10
2

The only suggestion that I have seen is partitioning the disk before creating the pool

Esta é realmente a única solução para lidar com isso. Você não precisa criar uma segunda partição pequena, esse espaço pode permanecer não particionado. Como a variação entre discos é normalmente muito pequena, você perde apenas alguns megabytes, o que não é problema em discos de 8 TB.

Uma alternativa seria simplesmente comprar o mesmo modelo exato de discos (muitas vezes não é recomendado devido a falhas seriais na fabricação que afetam apenas um modelo); ou começar com o menor disco e só substituir por discos maiores, mas isso vai custar muito mais espaço perdido, e pode não ser possível depois de algum tempo.

    
por 29.03.2017 / 13:25