启动时出现错误“ WRITE ERROR ON SWAP DEVICE
”,但当我更改以下行时一切正常:
truncate -s $swapsize $flPtDev
经过
cp /swap.img $flPtDev
完整脚本如下:
cd /home/myuser/
mkdir ./.myfolder
cd ./.myfolder
swapsize='4G'
curdir=$(pwd)
flNmDev="myfile.img"
flPtDev="$curdir/$flNmDev"
flNmKey="mykeyfile"
flPtKey="$curdir/$flNmKey"
flNmMnt="myDesiredMappedDeviceName"
flPtMnt="$curdir/$flNmMnt"
truncate -s $swapsize $flPtDev # ** THE OFFENDING LINE **
chmod 0600 $flPtDev
chown root $flPtDev
dd if=/dev/urandom of=$flPtKey bs=4096 count=1 conv=notrunc,noerror
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
rpl "/swap.img none swap sw 0 0" "#/swap.img none swap sw 0 0" /etc/fstab
echo "/dev/mapper/$flNmMnt none swap sw 0 0" >> /etc/fstab
答案1
交换文件不能是稀疏文件。它们必须完全分配。如果系统尝试写入未分配的交换文件的一部分,则会发生写入错误。
复制交换文件可通过完全分配目标文件来解决问题。
您可以通过首先创建完全分配的交换文件来解决原始问题。有几种方法可以做到这一点,但最快和最容易集成到您的流程中的方法可能是:
fallocate -l $swapsize $flPtDev