En general, no se puede actualizar todo el disco sin leer/escribir todo. fsck es poco probable que proporcione lo que necesita; funciona con el sistema de archivos no el dispositivo subyacente, por lo tanto, en su mayoría solo escanea metadatos del sistema de archivos (inodos y otras estructuras del sistema de archivos).
badblocks -n podría ser una opción para dd if=X of=X . En cualquier caso, probablemente quieras usar bloques grandes para acelerar las cosas (para dd algo como bs=16M , para badblocks esto sería -b 16777216 o -b $((1<<24)) en caparazones razonables). Probablemente también quieras usar conv=fsync con dd .
En cuanto a la seguridad de dd con el mismo dispositivo de entrada y salida:lee el bloque de entrada y lo escribe en la salida, por lo que debería ser seguro (he vuelto a cifrar una partición cifrada como esta en varias ocasiones, creando dispositivos de bucle con el mismo dispositivo subyacente y diferentes contraseñas y luego dd 'ing de uno a otro), al menos para algunos tipos de medios físicos:por ejemplo, con unidades shingled definitivamente no es obvio para mí, que es 100% a prueba de fallas.