Por que estou vendo:
btrfs replace "ERROR: target device smaller than source device"
quando já reduzi o sistema de arquivos do dispositivo de origem para ser menor que o destino por meio de:
btrfs filesystem resize <devid>:<small-size> /mountpoint
Eu encontrei isso ao tentar substituir um disco por um um pouco menor. Eu estava recebendo esse erro mesmo depois de redimensionar o sistema de arquivos na unidade de origem. Como eu estava usando discos inteiros, não havia opção de redimensionar a partição. O truque acabou sendo passar um devid para a unidade de origem em vez de um caminho de dispositivo. Isso parecia resultar na
btrfs filesystem replace
verificação do tamanho real do sistema de arquivos no dispositivo de origem, e não no tamanho do próprio dispositivo.Meu estado inicial:
Eu queria substituir /dev/sdf por /dev/sdg.
Tentativa nº 1:
Redimensionando o sistema de arquivos em /dev/sdf (devid 5):
Tentativa nº 2:
Nenhuma mudança. Aparece ao especificar a origem como um dispositivo de bloco,
replace
apenas verifica o tamanho do dispositivo de bloco ao verificar se há espaço suficiente no destino. No entanto, examinando o código-fonte, descobri quereplace
lida com um dispositivo de origem de maneira diferente e, na verdade, recupera o tamanho correto do sistema de arquivos.Isso levou à tentativa nº 3:
Essa formulação, combinada com o redimensionamento anterior, permitiu que a operação de substituição fosse iniciada com sucesso.
A mensagem de erro está se referindo aos tamanhos do dispositivo de bloco do Linux, não ao tamanho do sistema de arquivos, portanto, a partição que contém o sistema de arquivos de origem precisará ser reduzida para ser menor (ou do mesmo tamanho) que o destino.
Supondo que o dispositivo de destino seja 200G, redimensione o dispositivo de origem para 199G:
Em seguida, redimensione a partição para também 199GiB. Eu costumava
gdisk
remover a partição de origem existente e, em seguida, criei uma nova com o mesmo setor inicial, mas inseri o tamanho do setor final como+199G
.Depois
partprobe /dev/hdd-device
de recarregar a nova partição,replace
funcionou bem.Embora as duas abordagens pareçam funcionar, a solução @rkjnsn parece menos arriscada, pois não requer a substituição da tabela de partição de um disco ativo. As coisas podem dar muito errado lá.