If do I/O to a drive (with say, dd) without going through a file-system layer, is sync really inefficient?
Isso levanta a questão de que escrever em um nó de dispositivo ignora "a camada do sistema de arquivos". Eu suponho que, em certo sentido, obviamente, faz ...
De qualquer forma, isso não importa. Se o que você está fazendo não envolve o armazenamento em cache, executar sync
(ou algum equivalente) não seria "ineficiente": se não há nada para sincronizar, é uma chamada trivial.
When should one use one instead of the other?
Eu acho que quando você deseja segmentar uma partição específica, blockdev
faz sentido. Não consigo ver como isso teria uma vantagem específica sobre sync
(e vice-versa).