私の 前の質問 は、暗号化されたスワップファイルを追加するコマンドを生成しました:
# One-time setup:
fallocate -l 4G /root/swapfile.crypt
chmod 600 /root/swapfile.crypt
# On every boot:
loop=$(losetup -f)
losetup ${loop} /root/swapfile.crypt
cryptsetup open --type plain --key-file /dev/urandom ${loop} swapfile
mkswap /dev/mapper/swapfile
swapon /dev/mapper/swapfile
しかし Arch Linux は systemd を使用しており、systemdでスワップファイルを自動的にアクティブ化する方法を理解するのに苦労しています。 systemd.swap は、次のようなdev-mapper-swapfile.swap
ユニットが必要であることを示しています。
[Unit]
Description=Encrypted Swap File
[Swap]
What=/dev/mapper/swapfile
これはswapon
コマンドを実行します。しかし、/dev/mapper/swapfile
を準備するコマンドを実行する方法がわかりません。私はdev-mapper-swapfile.swap
が他のユニットへの依存関係を宣言する必要があると収集しましたが、そのユニットがどのように見えるべきかわかりません。
あなたは見てみたいかもしれません:
これらは、ブロックデバイスによってサポートされる暗号化されたボリュームに対して機能します。それらは、ファイルでバックアップされたボリュームでも機能するはずです。
更新:
これは私にとってはうまくいきます:
# Automatically generated by systemd-cryptsetup-generator
[Unit]
Description=Cryptography Setup for %I
Documentation=man:[email protected](8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=umount.target
Before=cryptsetup.target
After=systemd-random-seed-load.service
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'swap2' '/swap.test' '/dev/urandom' 'swap'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'swap2'
ExecStartPost=/sbin/mkswap '/dev/mapper/swap2'
このファイルを取得する手順:
swap2 /swap.test /dev/urandom swap
/usr/lib/systemd/system-generators/systemd-cryptsetup-generator
これにより、/tmp/
ディレクトリにユニットファイルが作成されます。swap.test.device
およびAfter=
ディレクティブからのエントリBindsTo=
を開きます。スワップファイル用のデバイスがないため、これは重要です。これはunitfileの開始を防ぎます。/etc/systemd/system/
にコピーしますこれが t-8ch's の回答に基づいて私が思いついた最終結果です。
これを/etc/systemd/system/[email protected]
に入れます:
# Automatically generated by systemd-cryptsetup-generator
# then manually tweaked
[Unit]
Description=Cryptography Setup for %I
Documentation=man:[email protected](8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=umount.target
Before=cryptsetup.target
After=systemd-random-seed-load.service
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'swapfile' '/root/swapfile.crypt' '/dev/urandom' 'swap,cipher=aes-cbc-essiv:sha256,size=256'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'swapfile'
ExecStartPost=/sbin/mkswap '/dev/mapper/swapfile'
これを/etc/systemd/system/dev-mapper-swapfile.swap
に入れます:
[Unit]
Description=Encrypted Swap File
[email protected]
[email protected]
Before=swap.target
[Swap]
What=/dev/mapper/swapfile
[Install]
WantedBy=swap.target
スワップファイルを作成し、将来の起動のために有効にして、すぐに使用を開始するための1回限りのセットアップ(rootとして):
fallocate -l 4G /root/swapfile.crypt
chmod 600 /root/swapfile.crypt
systemctl enable dev-mapper-swapfile.swap
systemctl start dev-mapper-swapfile.swap
fallocate
コマンドのサイズによって、スワップファイルの大きさが決まります。
/etc/crypttab
エントリは必要ありません。 [email protected]
を生成する方法にすぎません。完了したら、もう必要ありません。