Linux
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