想要加密交换并且我发现唯一可以按我想要的方式执行此操作的脚本是:
sudo -i
cd /root
mkdir -p ./.myfolder
cd ./.myfolder
swapsize='4G'
curdir=$(pwd)
flNmDev="myfile"
flPtDev="$curdir/$flNmDev"
flNmKey="mykeyfile"
flPtKey="$curdir/$flNmKey"
flNmMnt="mydevname"
flPtMnt="$curdir/$flNmMnt"
fallocate -l $swapsize $flPtDev &> /dev/null
chmod 0600 $flPtDev
chown root $flPtDev
dd if=/dev/urandom of=$flPtKey bs=4096 count=1 conv=notrunc,noerror &> /dev/null
sudo chmod 0600 $flPtKey
chown root $flPtKey
cat << EOF > /etc/crypttab
# <target name> <source device> <key file> <options>
$flNmMnt $flPtDev $flPtKey swap,offset=1024,cipher=aes-xts-plain64
EOF
cryptdisks_start $flNmMnt &> /dev/null
mappedCryptPath="/dev/mapper/$flNmMnt"
mkswap -L swapone $mappedCryptPath -f &> /dev/null
rpl "/swap.img" "#/swap.img" /etc/fstab &> /dev/null
echo "$mappedCryptPath none swap sw 0 0" >> /etc/fstab
swapon -a
在同一台机器和同一版本的 Ubuntu 上,它有时可以工作但有时会在启动时崩溃。
每次启动时都会出现以下输出:
uname -v
#54-Ubuntu SMP Mon May 6 18:46:08 UTC 2019
-
journalctl -b
systemd[1]: Mounting /boot...
swapon[995]: swapon: /dev/mapper/mydevname: swapon failed: Device or resource busy
mkswap[991]: mkswap: unable to erase bootbits sectors
systemd[1]: [email protected]: Control process exited, code=exited status=1
systemd[1]: [email protected]: Failed with result 'exit-code'.
systemd[1]: Failed to start Cryptography Setup for mydevname.
systemd[1]: Dependency failed for Local Encrypted Volumes.
systemd[1]: cryptsetup.target: Job cryptsetup.target/start failed with result 'dependency'.
systemd[1]: dev-mapper-mydevname.swap: Swap process exited, code=exited status=255
systemd[1]: dev-mapper-mydevname.swap: Failed with result 'exit-code'.
systemd[1]: Failed to activate swap /dev/mapper/mydevname.
systemd[1]: Dependency failed for Swap.
systemd[1]: swap.target: Job swap.target/start failed with result 'dependency'.
-
cat /proc/meminfo | grep Sw
SwapCached: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
-
cat /proc/swaps
Filename Type Size Used Priority
-
cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 4193788 72704 -2
-
cat /proc/meminfo | grep Sw
SwapCached: 10644 kB
SwapTotal: 4193788 kB
SwapFree: 4102396 kB
-
journalctl -b
mkswap[868]: mkswap: /dev/mapper/mydevname: warning: wiping old swap signature.
systemd[1]: Found device /dev/mapper/mydevname.
systemd[1]: Activating swap /dev/mapper/mydevname...
mkswap[868]: Setting up swapspace version 1, size = 4 GiB (4294438912 bytes)
mkswap[868]: no label, UUID=348deb8f-7457-4829-a1a2-0ebd1b61f6d6
systemd[1]: Started Cryptography Setup for mydevname.
systemd[1]: Reached target Local Encrypted Volumes.
kernel: Adding 4193788k swap on /dev/mapper/mydevname. Priority:-2 extents:1 across:4193788k FS
systemd[1]: Activated swap /dev/mapper/mydevname.
systemd[1]: Reached target Swap.
-
cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 4193788 0 -2
-
journalctl -b
mkswap[683]: mkswap: unable to erase bootbits sectors
systemd[1]: [email protected]: Control process exited, code=exited status=1
systemd[1]: [email protected]: Failed with result 'exit-code'.
systemd[1]: Failed to start Cryptography Setup for mydevname.
systemd[1]: Dependency failed for Local Encrypted Volumes.
systemd[1]: cryptsetup.target: Job cryptsetup.target/start failed with result 'dependency'.
systemd[1]: Dependency failed for dev-mapper-mydevname.device.
systemd[1]: Dependency failed for /dev/mapper/mydevname.
systemd[1]: Dependency failed for Swap.
systemd[1]: swap.target: Job swap.target/start failed with result 'dependency'.
systemd[1]: dev-mapper-mydevname.swap: Job dev-mapper-mydevname.swap/start failed with result 'dependency'.
systemd[1]: dev-mapper-mydevname.device: Job dev-mapper-mydevname.device/start failed with result 'dependency'.
systemd[1]: Activating swap /dev/mapper/mydevname...
systemd[1]: Starting Cryptography Setup for mydevname...
systemd-cryptsetup[688]: Volume mydevname already active.
kernel: Adding 4193788k swap on /dev/mapper/mydevname. Priority:-2 extents:1 across:4193788k FS
systemd[1]: Activated swap /dev/mapper/mydevname.
mkswap[690]: mkswap: error: /dev/mapper/mydevname is mounted; will not make swapspace
systemd[1]: [email protected]: Control process exited, code=exited status=1
systemd[1]: [email protected]: Failed with result 'exit-code'.
systemd[1]: Failed to start Cryptography Setup for mydevname.
-
cat /proc/meminfo | grep Sw
SwapCached: 0 kB
SwapTotal: 4193788 kB
SwapFree: 4193788 kB
-
答案1
我认为你在我的问题,遇到了和你同样的问题,但是这里有足够的内存,我通过执行以下操作解决了所有交换问题:
cp /etc/sysctl.conf /etc/sysctl.conf.bkp
echo '' > /etc/sysctl.conf
echo 'vm.swappiness=0' >> /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
rpl "/swap.img" "#/swap.img" /etc/fstab &> /dev/null
DEBIAN_FRONTEND=noninteractive apt-get -yq install zram-config &> /dev/null