encrypt ist die selbstgestrickte Lösung. Findest du nur bei ArchLinux, jede andere Distro strickt sich da was eigenes. Das ist ein 150 Zeilen Shellscript, das ins Initramfs kopiert wird und dir irgendwie den LUKS-Container aufbügelt.
sd-encrypt ist systemd selbst, bzw. die für Verschlüsselung zuständigen Komponenten davon. Das kopiert nur die nötigen systemd-Helfer/Units/Abhängigkeiten ins initramfs. Keine einzige Zeile eigenen Code.
Beim selbstgestrickten mkinitcpio ist /init ein Shellscript das nach und nach die Hooks durchgeht und da also weitere Shellscripte ausführt. mkinitcpio ist hier zugleich Erzeuger von initramfs-linux.img als auch der Zulieferer von Shellscript-Code /init und somit dem kompletten Ablauf.
Beim systemd initcpio ist /init selber systemd also /usr/lib/systemd/systemd wird zu /init. systemd als initrd verwenden ist ein Feature von systemd (
https://www.freedesktop.org/wiki/Software/systemd/InitrdInterface/ ). mkinitcpio ist hier nur noch der Erzeuger von initramfs-linux.img quasi ohne eigene Zugaben. Was dann abläuft ist Sache von systemd.
Der Vergleich fällt da schwer, es ist am Ende eben ein ganz anderes Konzept. Mehr als funktionieren kann es nicht...
Ich bin selbst mit der selbstgestrickten Variante (und eigenen Hooks) unterwegs. Das systemd-Konzept... ist nicht so meins.
----
Du hast deswegen auch nicht die Wahl zwischen encrypt oder sd-encrypt. Sondern du hast die Wahl zwischen selbstgestrickten initramfs mit Hooks die du nach belieben selber umstricken kannst (wenn du willst), oder eben systemd mit Units statt Hooks. Diese beiden Konzepte schließen sich gegenseitig (weitgehend) aus, also die ganzen selbstgestrickten Hooks funktionieren in einem systemd-initramfs nicht und die sd-Hooks funktionieren umgekehrt im selbstgestrickten Initramfs auch nicht.