Назад | Перейти на главную страницу

Linux отказывается от отображаемого файла образа, созданного с помощью dd в качестве устройства подкачки

Получение ошибки "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