TL; DR:
Como posso estender o Thin-Pool se não estiver usando o LVM, mas o próprio Device Mapper diretamente?
Versão detalhada:
Até onde eu sei,
quando criamos um pool thin por dmsetup
, podemos definir um low_water_mark;
assim que a marca d'água for alcançada, um dmevent será enviado e o daemon de proteção poderá estender o pool imediatamente.
No entanto, não consegui encontrar o caminho para realizar tal tarefa de maneira trivial; e eu não tenho ideia de como isso poderia ser alcançado.
Além disso,
Eu cavo em dm-thin.c
e descubro que há uma função chamada maybe_resize_data_dev
,
que aumentará o dispositivo de dados em r = dm_pool_resize_data_dev(pool->pmd, data_size)
se o espaço restante não for suficiente.
No entanto, enquanto isso, o próprio Device Mapper impede que você faça isso verificando o status do dispositivo de dados:
if (le32_to_cpu(disk_super->data_block_size) != pmd->data_block_size) {
/* Verify the data block size hasn't changed */
if (le32_to_cpu(disk_super->data_block_size) != pmd->data_block_size) {
DMERR("changing the data block size (from %u to %llu) is not supported",
le32_to_cpu(disk_super->data_block_size),
(unsigned long long)pmd->data_block_size);
r = -EINVAL;
goto bad_unlock_sblock;
}
que é corrigido no commit 9aec862, intitulado dm thin metadata: do not allow the data block size to change
.
Os códigos são citados de drivers/md/dm-thin.c
(ref-1) e drivers/md/dm-thin-metadata.c
(ref-2)
E o que mais me confunde é que eu sabia que isso poderia ser feito se o pool fosse criado por utilitários LVM; isto é %código% (do Guia publicado pela Red Hat), que torna Eu me pergunto como isso é conseguido.
ref-1: drivers / md / dm-thin.c # L3246-L3292
ref-2: drivers / md / dm-thin-metadata.c # L617-L621
Desculpe, não posso postar mais de dois links porque estou muito noob.