Получение ошибки "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
Файлы подкачки не могут быть разреженными. Они должны быть полностью выделены. Если система пытается выполнить запись в часть файла подкачки, который не был выделен, возникает ошибка записи.
Копирование файла подкачки устраняет проблему, полностью выделяя файл назначения.
Вы можете решить исходную проблему, создав для начала полностью выделенный файл подкачки. Есть несколько способов сделать это, но, вероятно, самым быстрым и простым для интеграции в ваш процесс будет:
fallocate -l $swapsize $flPtDev