Linux

Linux拒絕使用dd創建的映射圖像文件作為交換設備

  • May 14, 2019

啟動時出現錯誤“ 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

引用自:https://serverfault.com/questions/966638