ฉันไม่สามารถเปิดใช้งาน Swap space บน CentOS 7 ได้


55

ดังนั้นฉันกำลังติดตามการสอนเพื่อติดตั้ง OTRS ซึ่งเป็นระบบการขอตั๋วโอเพ่นซอร์ส ดังนั้นในการติดตั้งจำเป็นต้องใช้: พื้นที่สวอป 4GB นี่คือคำสั่งที่ฉันใช้:

[root@ip-10-0-7-41 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       50G   14G   37G  27% /
devtmpfs        478M     0  478M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  484M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000
[root@ip-10-0-7-41 ~]# fallocate -l 4G /myswap
[root@ip-10-0-7-41 ~]# ls -lh /myswap
-rw-r--r--. 1 root root 4.0G Jul  8 08:44 /myswap
[root@ip-10-0-7-41 ~]# chmod 600 /myswap
[root@ip-10-0-7-41 ~]# mkswap /myswap
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=3656082a-148d-4604-96fb-5b4604fa5b2e
[root@ip-10-0-7-41 ~]# swapon /myswap
swapon: /myswap: swapon failed: Invalid argument

คุณสามารถดู: ข้อผิดพลาดอาร์กิวเมนต์ไม่ถูกต้องที่นี่ ฉันพยายามหลายครั้งเพื่อเปิดใช้งานมันไร้ประโยชน์บางคนโปรดบอกวิธีแก้ไขข้อผิดพลาดนี้ (ฉันใช้ CentOS 7 นี้บน AWS Instance EC2)

[root@ip-10-0-7-41 ~]# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
/dev/xvda1 xfs /

เกิดอะไรขึ้นกับระบบไฟล์นี้ btrfs โดยบังเอิญ?
schaiba

@schaiba สวัสดีฉันแก้ไขคำถามของฉัน ฉันคิดว่าระบบไฟล์คือ xfs
The One

2
บน XFS ddแน่นอนมันจะดีกว่าที่จะใช้ โปรดจำไว้ว่าระบบไฟล์บางอันไม่รองรับการสลับหรืออย่างน้อยก็ไม่เหมือนกัน
schaiba

@schaiba ฉันไม่รู้ดีเกี่ยวกับประเภทของระบบไฟล์ ขอบคุณมาก.
The One

คำตอบ:


102

ปัญหาfallocate(1)คือมันใช้ระบบไฟล์ioctlsเพื่อให้การจัดสรรรวดเร็วและมีประสิทธิภาพข้อเสียคือมันไม่ได้จัดสรรพื้นที่ทางกายภาพ แต่swapon(2)syscall ต้องการพื้นที่จริง การอ้างอิง: https://bugzilla.redhat.com/show_bug.cgi?id=1129205

ฉันต้องเผชิญกับปัญหานี้ก่อนหน้านี้พร้อมกล่องของฉันด้วย ดังนั้นแทนที่จะใช้fallocateฉันใช้ddเป็นลิงก์แนะนำ

sudo dd if=/dev/zero of=/myswap count=4096 bs=1MiB

และการย้ายไปข้างหน้าด้วยchmod, mkswapและswaponคำสั่ง บิงโก! มันได้ผล


1
แปลกไฟล์แลกเปลี่ยน fallocate'd ทำงานได้ดีสำหรับฉันบน Ubuntu 16.04.3 LTS แต่มันล้มเหลวด้วย "swapon ล้มเหลว: อาร์กิวเมนต์ไม่ถูกต้อง" บน Red Hat Enterprise Linux Server รีลีส 7.4 (Maipo) คำสั่ง dd ที่ระบุด้านบนใช้งานได้กับ RedHat จะต้องมีสิ่งที่แตกต่างกันระหว่างสองระบบปฏิบัติการที่อนุญาตให้ใช้งาน fallocate บน Ubuntu ได้
Davidian1024

โซลูชันทำงานบน CentOS 7.5
NerdOfCode

ddดูเหมือนว่าจะทำงานได้มากขึ้นtime dd if=/dev/zero of=/myswap count=4096 bs=1MiBใช้เวลา 14.003 วินาทีซึ่งtime fallocate -l 4G /swap3ใช้เวลา 0.018 วินาที แต่มันสร้างไฟล์ขนาดเดียวกัน ฉันคาดเดาว่าfallocateจะไม่คัดลอกเลขศูนย์ในแบบที่ต้องการddและswaponต้องการเลขศูนย์เหล่านั้น
Daniel Wisehart

swapon: /swapfile: read swap header failed: Invalid argumentได้รับข้อผิดพลาดนี้หลังจากพยายามswapon /swapfileบนเซิร์ฟเวอร์ puppetenterprise centos7
Brian Thomas

@BrianThomas ดูเหมือนว่าคุณลืมรัน mkswap บนไฟล์หลังจากที่คุณสร้างมันด้วย dd
jblaine

17

ทำตามขั้นตอนเหล่านี้มันทำงานบนหยดของ DigitalOcean ฉันทดสอบแล้ว เปลี่ยนจำนวน 4096 ตามความต้องการของคุณ

yum install nano -y

sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

sudo nano /etc/fstab

เพิ่มบรรทัดนี้:

/swapfile   swap    swap    sw  0   0

เรียกใช้คำสั่งนี้

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

เพิ่มบรรทัดนี้

vm.swappiness = 10
vm.vfs_cache_pressure = 50

เพื่อตรวจสอบขนาดของ swap

swapon --summary
free -h

2
ddคำสั่งของฉันจะเป็นdd if=/dev/zero of=/swapfile count=4 bs=1GiBเพราะฉันไม่สามารถใส่ใจกับการคำนวณ mebibytes ในหน่วย gibibytes ได้ถ้าddทำได้สำหรับฉัน คุณรู้หรือไม่ว่าในสมัยของผู้คนในสมัยก่อนแสดงเป็น kibibytes และคำนวณด้วยมือเป็น gibibytes? อย่างไม่น่าเชื่อ!
Amedee Van Gasse

@AmedeeVanGasse คุณเวอร์ชันของคำสั่ง dd ต้องการหน่วยความจำ 1GiB จริง ๆ และคำสั่งจะล้มเหลวหากคุณไม่มีหน่วยความจำที่ว่างมาก
Fabiano

@ Fabiano ใช่และ? ประเด็นของคุณคือ ...
Amedee Van Gasse

2
@AmedeeVanGasse ประเด็นของฉันคือถ้าคุณไม่อยากรำคาญกับการคำนวณ MiBs และ GiB bs=นั้นไม่ใช่วิธีที่เหมาะสมในการทำเช่นนั้นเพราะมันมีผลกระทบที่ไม่ตั้งใจเช่นประสิทธิภาพในการทำร้ายและไม่น่าจะเป็นโฮสต์ต้นทุนต่ำที่สุด หากคุณขี้เกียจเพียงใช้count_bytesและปล่อยให้ddคุณทำทั้งคณิตศาสตร์และการเลือกขนาดบล็อกที่มีประสิทธิภาพ: dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
Fabiano

iflag=count_bytesเป็นการปรับปรุงความคิดเห็นของคุณอย่างยอดเยี่ยม และฉันก็ไม่ขี้เกียจฉันสนใจที่จะอ่าน ในเวลา 6 เดือนเมื่อฉันอ่านสคริปต์ของฉันอีกครั้ง (หรือเมื่อผู้ดูแลคนต่อไปมา) ผู้อ่านจะต้องเข้าใจสิ่งที่เกิดขึ้น ไม่ใช่แค่คอมพิวเตอร์ที่อ่านรหัส แต่มนุษย์ก็อ่านรหัสด้วย!
Amedee Van Gasse
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.