Я пытаюсь реализовать следующую службу systemd для автоматической загрузки ключа при загрузке. Код:
```
cat << 'EOF' > /etc/systemd/system/zfs-load-key@.service
[Unit]
Description=Load ZFS keys
DefaultDependencies=no
Before=zfs-mount.service
After=zfs-import.target
Requires=zfs-import.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/zfs load-key %I
[Install]
WantedBy=zfs-mount.service
EOF
```
У меня есть две системы. На обеих системах ключ хранится на ZFS-разделе, расположенном в корневой файловой системе (`rpool`). `rpool` не зашифрован, и я пока не планирую его шифровать. На системе A (название `tank`) ключ загружается безупречно. На системе B (название `sata1`) загрузка ключа не удаётся, и служба systemd находится в состоянии ошибки. Я не уверен, почему это работает на системе A, но не работает на системе B. Система A использует NVME-диски для зеркала `rpool`. Система B использует SATADOM-ы для зеркала `rpool`.
Я думаю, что может быть состояние гонки. Если это так, мне интересно, является ли это плохим решением по проекту и стоит ли вернуться к предыдущему подходу. Ключи хранятся в `/root/poolname.key`.
Код системы A:
```
Mar 11 21:04:42 virvh01 zed[2185]: eid=5 class=config_sync pool='rpool'
Mar 11 21:04:42 virvh01 zed[2184]: eid=10 class=config_sync pool='tank'
Mar 11 21:04:42 virvh01 zed[2178]: eid=8 class=pool_import pool='tank'
Mar 11 21:04:42 virvh01 zed[2175]: eid=7 class=config_sync pool='tank'
Mar 11 21:04:42 virvh01 systemd[1]: Reached target zfs.target - ZFS startup target.
Mar 11 21:04:42 virvh01 zed[2162]: eid=2 class=config_sync pool='rpool'
Mar 11 21:04:42 virvh01 systemd[1]: Finished zfs-share.service - ZFS file system shares.
Mar 11 21:04:42 virvh01 zed[2146]: Processing events since eid=0
Mar 11 21:04:42 virvh01 zed[2146]: ZFS Event Daemon 2.2.6-pve1 (PID 2146)
Mar 11 21:04:42 virvh01 systemd[1]: Started zfs-zed.service - ZFS Event Daemon (zed).
Mar 11 21:04:42 virvh01 systemd[1]: Starting zfs-share.service - ZFS file system shares...
Mar 11 21:04:41 virvh01 systemd[1]: Finished zfs-mount.service - Mount ZFS filesystems.
Mar 11 21:04:41 virvh01 systemd[1]: Reached target zfs-volumes.target - ZFS volumes are ready.
Mar 11 21:04:41 virvh01 systemd[1]: Finished zfs-volume-wait.service - Wait for ZFS Volume (zvol) links in /dev.
Mar 11 21:04:41 virvh01 zvol_wait[2012]: No zvols found, nothing to do.
Mar 11 21:04:41 virvh01 systemd[1]: Starting zfs-mount.service - Mount ZFS filesystems...
Mar 11 21:04:41 virvh01 systemd[1]: Finished zfs-load-key@tank-encrypted.service - Load ZFS keys.
Mar 11 21:04:41 virvh01 systemd[1]: Starting zfs-volume-wait.service - Wait for ZFS Volume (zvol) links in /dev...
Mar 11 21:04:41 virvh01 systemd[1]: Starting zfs-load-key@tank-encrypted.service - Load ZFS keys...
Mar 11 21:04:41 virvh01 systemd[1]: Reached target zfs-import.target - ZFS pool import target.
Mar 11 21:04:41 virvh01 systemd[1]: Finished zfs-import-cache.service - Import ZFS pools by cache file.
Mar 11 21:04:40 virvh01 systemd[1]: zfs-import-scan.service - Import ZFS pools by device scanning was skipped because of an unmet condition check (ConditionFileNotEmpty=!/etc/zfs/zpool.cache).
Mar 11 21:04:40 virvh01 systemd[1]: Starting zfs-import-cache.service - Import ZFS pools by cache file...
```
Код системы B:
```
Mar 15 17:32:14 VIRVH02 systemd[1]: Reached target zfs.target - ZFS startup target.
Mar 15 17:32:14 VIRVH02 systemd[1]: Finished zfs-share.service - ZFS file system shares.
Mar 15 17:32:13 VIRVH02 systemd[1]: Starting zfs-share.service - ZFS file system shares...
Mar 15 17:31:25 VIRVH02 systemd[1]: Failed to start zfs-load-key@sata1-encrypted.service - Load ZFS keys.
Mar 15 17:31:25 VIRVH02 systemd[1]: zfs-load-key@sata1-encrypted.service: Failed with result 'exit-code'.
Mar 15 17:31:25 VIRVH02 systemd[1]: zfs-load-key@sata1-encrypted.service: Main process exited, code=exited, status=1/FAILURE
Mar 15 17:31:25 VIRVH02 zfs[3016]: cannot open 'sata1/encrypted': dataset does not exist
Mar 15 17:31:25 VIRVH02 systemd[1]: Starting zfs-volume-wait.service - Wait for ZFS Volume (zvol) links in /dev...
Mar 15 17:31:25 VIRVH02 systemd[1]: Starting zfs-load-key@sata1-encrypted.service - Load ZFS keys...
Mar 15 17:31:25 VIRVH02 systemd[1]: Reached target zfs-import.target - ZFS pool import target.
Mar 15 17:31:25 VIRVH02 systemd[1]: Finished zfs-import-cache.service - Import ZFS pools by cache file.
Mar 15 17:31:25 VIRVH02 zpool[3014]: no pools available to import
Mar 15 17:31:25 VIRVH02 systemd[1]: zfs-import-scan.service - Import ZFS pools by device scanning was skipped because of an unmet condition check (ConditionFileNo>
Mar 15 17:31:25 VIRVH02 systemd[1]: Starting zfs-import-cache.service - Import ZFS pools by cache file...
```
```
cat << 'EOF' > /etc/systemd/system/zfs-load-key@.service
[Unit]
Description=Load ZFS keys
DefaultDependencies=no
Before=zfs-mount.service
After=zfs-import.target
Requires=zfs-import.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/zfs load-key %I
[Install]
WantedBy=zfs-mount.service
EOF
```
У меня есть две системы. На обеих системах ключ хранится на ZFS-разделе, расположенном в корневой файловой системе (`rpool`). `rpool` не зашифрован, и я пока не планирую его шифровать. На системе A (название `tank`) ключ загружается безупречно. На системе B (название `sata1`) загрузка ключа не удаётся, и служба systemd находится в состоянии ошибки. Я не уверен, почему это работает на системе A, но не работает на системе B. Система A использует NVME-диски для зеркала `rpool`. Система B использует SATADOM-ы для зеркала `rpool`.
Я думаю, что может быть состояние гонки. Если это так, мне интересно, является ли это плохим решением по проекту и стоит ли вернуться к предыдущему подходу. Ключи хранятся в `/root/poolname.key`.
Код системы A:
```
Mar 11 21:04:42 virvh01 zed[2185]: eid=5 class=config_sync pool='rpool'
Mar 11 21:04:42 virvh01 zed[2184]: eid=10 class=config_sync pool='tank'
Mar 11 21:04:42 virvh01 zed[2178]: eid=8 class=pool_import pool='tank'
Mar 11 21:04:42 virvh01 zed[2175]: eid=7 class=config_sync pool='tank'
Mar 11 21:04:42 virvh01 systemd[1]: Reached target zfs.target - ZFS startup target.
Mar 11 21:04:42 virvh01 zed[2162]: eid=2 class=config_sync pool='rpool'
Mar 11 21:04:42 virvh01 systemd[1]: Finished zfs-share.service - ZFS file system shares.
Mar 11 21:04:42 virvh01 zed[2146]: Processing events since eid=0
Mar 11 21:04:42 virvh01 zed[2146]: ZFS Event Daemon 2.2.6-pve1 (PID 2146)
Mar 11 21:04:42 virvh01 systemd[1]: Started zfs-zed.service - ZFS Event Daemon (zed).
Mar 11 21:04:42 virvh01 systemd[1]: Starting zfs-share.service - ZFS file system shares...
Mar 11 21:04:41 virvh01 systemd[1]: Finished zfs-mount.service - Mount ZFS filesystems.
Mar 11 21:04:41 virvh01 systemd[1]: Reached target zfs-volumes.target - ZFS volumes are ready.
Mar 11 21:04:41 virvh01 systemd[1]: Finished zfs-volume-wait.service - Wait for ZFS Volume (zvol) links in /dev.
Mar 11 21:04:41 virvh01 zvol_wait[2012]: No zvols found, nothing to do.
Mar 11 21:04:41 virvh01 systemd[1]: Starting zfs-mount.service - Mount ZFS filesystems...
Mar 11 21:04:41 virvh01 systemd[1]: Finished zfs-load-key@tank-encrypted.service - Load ZFS keys.
Mar 11 21:04:41 virvh01 systemd[1]: Starting zfs-volume-wait.service - Wait for ZFS Volume (zvol) links in /dev...
Mar 11 21:04:41 virvh01 systemd[1]: Starting zfs-load-key@tank-encrypted.service - Load ZFS keys...
Mar 11 21:04:41 virvh01 systemd[1]: Reached target zfs-import.target - ZFS pool import target.
Mar 11 21:04:41 virvh01 systemd[1]: Finished zfs-import-cache.service - Import ZFS pools by cache file.
Mar 11 21:04:40 virvh01 systemd[1]: zfs-import-scan.service - Import ZFS pools by device scanning was skipped because of an unmet condition check (ConditionFileNotEmpty=!/etc/zfs/zpool.cache).
Mar 11 21:04:40 virvh01 systemd[1]: Starting zfs-import-cache.service - Import ZFS pools by cache file...
```
Код системы B:
```
Mar 15 17:32:14 VIRVH02 systemd[1]: Reached target zfs.target - ZFS startup target.
Mar 15 17:32:14 VIRVH02 systemd[1]: Finished zfs-share.service - ZFS file system shares.
Mar 15 17:32:13 VIRVH02 systemd[1]: Starting zfs-share.service - ZFS file system shares...
Mar 15 17:31:25 VIRVH02 systemd[1]: Failed to start zfs-load-key@sata1-encrypted.service - Load ZFS keys.
Mar 15 17:31:25 VIRVH02 systemd[1]: zfs-load-key@sata1-encrypted.service: Failed with result 'exit-code'.
Mar 15 17:31:25 VIRVH02 systemd[1]: zfs-load-key@sata1-encrypted.service: Main process exited, code=exited, status=1/FAILURE
Mar 15 17:31:25 VIRVH02 zfs[3016]: cannot open 'sata1/encrypted': dataset does not exist
Mar 15 17:31:25 VIRVH02 systemd[1]: Starting zfs-volume-wait.service - Wait for ZFS Volume (zvol) links in /dev...
Mar 15 17:31:25 VIRVH02 systemd[1]: Starting zfs-load-key@sata1-encrypted.service - Load ZFS keys...
Mar 15 17:31:25 VIRVH02 systemd[1]: Reached target zfs-import.target - ZFS pool import target.
Mar 15 17:31:25 VIRVH02 systemd[1]: Finished zfs-import-cache.service - Import ZFS pools by cache file.
Mar 15 17:31:25 VIRVH02 zpool[3014]: no pools available to import
Mar 15 17:31:25 VIRVH02 systemd[1]: zfs-import-scan.service - Import ZFS pools by device scanning was skipped because of an unmet condition check (ConditionFileNo>
Mar 15 17:31:25 VIRVH02 systemd[1]: Starting zfs-import-cache.service - Import ZFS pools by cache file...
```
